85 lines
2.6 KiB
EmacsLisp
85 lines
2.6 KiB
EmacsLisp
;;; javatx-mode.el --- Major mode for .jav files -*- lexical-binding: t; -*-
|
|
|
|
(defvar javatx-mode-hook nil
|
|
"Hook called when entering `javatx-mode`.")
|
|
|
|
;; Define the mode
|
|
(define-derived-mode javatx-mode java-mode "Javatx"
|
|
"Major mode for editing `.jav` files.")
|
|
|
|
;; Automatically use javatx-mode for .jav files
|
|
;;;###autoload
|
|
(add-to-list 'auto-mode-alist '("\\.jav\\'" . javatx-mode))
|
|
|
|
(provide 'javatx-mode)
|
|
;;; javatx-mode.el ends here
|
|
|
|
;; Initialize package sources
|
|
(require 'package)
|
|
(setq package-archives
|
|
'(("melpa" . "https://melpa.org/packages/")
|
|
("gnu" . "https://elpa.gnu.org/packages/")))
|
|
(package-initialize)
|
|
|
|
;; Refresh package contents if needed
|
|
(unless package-archive-contents
|
|
(package-refresh-contents))
|
|
|
|
;; Install use-package if not installed
|
|
(unless (package-installed-p 'use-package)
|
|
(package-install 'use-package))
|
|
|
|
(require 'use-package)
|
|
(setq use-package-always-ensure t) ;; automatically install packages if missing
|
|
|
|
(use-package lsp-mode
|
|
:hook (prog-mode . lsp)
|
|
:commands lsp
|
|
:config
|
|
(setq lsp-prefer-flymake nil)) ;; use flycheck instead of flymake
|
|
|
|
(use-package lsp-ui
|
|
:commands lsp-ui-mode
|
|
:hook (lsp-mode . lsp-ui-mode)
|
|
:config
|
|
(setq lsp-ui-sideline-show-hover t
|
|
lsp-ui-sideline-show-code-actions t
|
|
lsp-ui-sideline-show-diagnostics t))
|
|
|
|
(defcustom javatx-compiler-path nil
|
|
"Path to the JavaTX Compiler jar."
|
|
:type 'string
|
|
:group 'javatx)
|
|
|
|
(defcustom javatx-lsp-server-path nil
|
|
"Path to the JavaTX Language Server jar."
|
|
:type 'string
|
|
:group 'javatx)
|
|
|
|
;;register javatx-mode lsp
|
|
(with-eval-after-load 'lsp-mode
|
|
(message "Compiler path: %s" javatx-compiler-path)
|
|
(message "Server path: %s" javatx-lsp-server-path)
|
|
(add-to-list 'lsp-language-id-configuration '(javatx-mode . "Java-TX"))
|
|
(lsp-register-client
|
|
(make-lsp-client
|
|
:new-connection (lsp-stdio-connection (lambda () `("java" "-cp" ,(format "%s:%s" (expand-file-name javatx-compiler-path) (expand-file-name javatx-lsp-server-path)) "de.dhbw.JavaTXLanguageServerLauncher")))
|
|
:major-modes '(javatx-mode)
|
|
:server-id 'javatx-lsp-proxy)))
|
|
|
|
(add-hook 'javatx-mode-hook #'lsp) ;; start LSP automatically for .jav files
|
|
|
|
;; Automatically enable inlay hints for javatx-mode
|
|
(add-hook 'javatx-mode-hook
|
|
(lambda ()
|
|
;; Replace 'lsp-inlay-hints-mode' with whatever inlay hints function you use
|
|
(when (fboundp 'lsp-inlay-hints-mode)
|
|
(lsp-inlay-hints-mode 1))))
|
|
|
|
|
|
(setq lsp-log-io t) ;; enable logging of LSP messages
|
|
|
|
(with-eval-after-load 'lsp-mode
|
|
(define-key lsp-mode-map (kbd "C-c a") 'lsp-execute-code-action))
|
|
|