From 842a01fe1cf068299b3e7a46f50ea8dd6c3788c4 Mon Sep 17 00:00:00 2001 From: Ingo Lohmar Date: Tue, 24 Sep 2019 11:16:59 +0200 Subject: [PATCH] Option to autoshutdown after killing last buffer (#309) This should close issue #217, also cf. #270. * eglot.el: New defcustom `eglot-autoshutdown' (default t). (eglot--managed-mode): Signal didClose before possibly triggering autoshutdown. (eglot--managed-mode-onoff): Shutdown if so configured and no managed buffers left. --- eglot.el | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/eglot.el b/eglot.el index 3155135b..19619dd8 100644 --- a/eglot.el +++ b/eglot.el @@ -170,6 +170,11 @@ as 0, i.e. don't block at all." :type '(choice (boolean :tag "Whether to inhibit autoreconnection") (integer :tag "Number of seconds"))) +(defcustom eglot-autoshutdown t + "If t, shut down a language server automatically after killing +the last buffer it has managed." + :type 'boolean) + (defcustom eglot-events-buffer-size 2000000 "Control the size of the Eglot events buffer. If a number, don't let the buffer grow larger than that many @@ -1172,7 +1177,7 @@ and just return it. PROMPT shouldn't end with a question mark." (eglot--managed-mode (add-hook 'after-change-functions 'eglot--after-change nil t) (add-hook 'before-change-functions 'eglot--before-change nil t) - (add-hook 'kill-buffer-hook 'eglot--signal-textDocument/didClose nil t) + (add-hook 'kill-buffer-hook 'eglot--signal-textDocument/didClose -1 t) ;before possible server autoshutdown (add-hook 'kill-buffer-hook 'eglot--managed-mode-onoff nil t) (add-hook 'before-revert-hook 'eglot--signal-textDocument/didClose nil t) (add-hook 'before-save-hook 'eglot--signal-textDocument/willSave nil t) @@ -1223,7 +1228,11 @@ Reset in `eglot--managed-mode-onoff'.") (setq eglot--cached-current-server nil) (when server (setf (eglot--managed-buffers server) - (delq buf (eglot--managed-buffers server))))))))) + (delq buf (eglot--managed-buffers server))) + (when (and eglot-autoshutdown + (not (eglot--shutdown-requested server)) + (not (eglot--managed-buffers server))) + (eglot-shutdown server)))))))) (defun eglot--current-server () "Find the current logical EGLOT server."