summaryrefslogtreecommitdiffstats
path: root/lisp/init-eglot.el
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-03-18 10:57:25 +0100
committerMartin Polden <mpolden@mpolden.no>2023-03-18 10:57:25 +0100
commit06b1bf615f8b549081ea20878ec4e00722aa2ea8 (patch)
tree41e35ad7d8bf2bf8c134cc75f324b7c9a49f5a4b /lisp/init-eglot.el
parent0bff1f1f69246959250cf3375bd498a6a8bd5232 (diff)
eglot: run some servers through toolbox
Diffstat (limited to 'lisp/init-eglot.el')
-rw-r--r--lisp/init-eglot.el19
1 files changed, 18 insertions, 1 deletions
diff --git a/lisp/init-eglot.el b/lisp/init-eglot.el
index da392e1..a993765 100644
--- a/lisp/init-eglot.el
+++ b/lisp/init-eglot.el
@@ -47,6 +47,20 @@
"\\1"
string))
+(defun mpolden/eglot-server-program (&optional interactive)
+ "Return a LSP server program for the current `major-mode'.
+If toolbox is in PATH, prefix the server program with \"toolbox
+run\". Optional argument INTERACTIVE has no effect, but must be
+present to satisfy `eglot-server-programs'."
+ (when-let* ((programs '((go-mode . "gopls")
+ (python-mode . "pylsp")
+ (rust-mode . "rust-analyzer")
+ (java-mode . "jdtls")))
+ (program (cdr (assoc major-mode programs))))
+ (if (executable-find "toolbox" (file-remote-p buffer-file-name))
+ (list "toolbox" "run" program)
+ (list program))))
+
(use-package eglot
:ensure t
:init
@@ -78,7 +92,10 @@
;; https://github.com/jrblevin/markdown-mode/issues/377
(advice-add 'eglot--format-markup
:filter-return
- 'mpolden/gfm-unescape-string))
+ 'mpolden/gfm-unescape-string)
+ ;; run some servers through toolbox
+ (add-to-list 'eglot-server-programs
+ '(prog-mode . mpolden/eglot-server-program)))
(provide 'init-eglot)