From: Michal Krzywkowski Date: Sat, 11 Aug 2018 23:22:26 +0000 (+0200) Subject: Kill server's output and events buffers from eglot-shutdown () X-Git-Tag: emacs-29.0.90~1616^2~524^2~4^2~450 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ef5266397a0447a356b401df5572becdb30e7c61;p=emacs.git Kill server's output and events buffers from eglot-shutdown () * eglot.el (Package-Requires): Require jsonrpc 1.0.5 (eglot-shutdown): Kill events and stderr buffers of the server, unless new PRESERVE-BUFFERS argument is non-nil. eglot-reconnect): Preserve buffers on shutdown. * eglot-tests.el (eglot--call-with-dirs-and-files): Call eglot-shutdown with non-nil PRESERVE-BUFFERS arg. GitHub-reference: https://github.com/joaotavora/eglot/issues/66 --- diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index e37ec94ab0a..70a725c22f1 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -7,7 +7,7 @@ ;; Maintainer: João Távora ;; URL: https://github.com/joaotavora/eglot ;; Keywords: convenience, languages -;; Package-Requires: ((emacs "26.1") (jsonrpc "1.0.2")) +;; Package-Requires: ((emacs "26.1") (jsonrpc "1.0.5")) ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -237,11 +237,14 @@ lasted more than that many seconds." (defvar eglot--servers-by-project (make-hash-table :test #'equal) "Keys are projects. Values are lists of processes.") -(defun eglot-shutdown (server &optional _interactive timeout) +(defun eglot-shutdown (server &optional _interactive timeout preserve-buffers) "Politely ask SERVER to quit. Forcefully quit it if it doesn't respond within TIMEOUT seconds. -Don't leave this function with the server still running." - (interactive (list (eglot--current-server-or-lose) t)) +If PRESERVE-BUFFERS is non-nil (interactively, when called with a +prefix argument), do not kill events and output buffers of +SERVER. Don't leave this function with the server still +running." + (interactive (list (eglot--current-server-or-lose) t nil current-prefix-arg)) (eglot--message "Asking %s politely to terminate" (jsonrpc-name server)) (unwind-protect (progn @@ -253,9 +256,12 @@ Don't leave this function with the server still running." ;; Turn off `eglot--managed-mode' where appropriate. (dolist (buffer (eglot--managed-buffers server)) (eglot--with-live-buffer buffer (eglot--managed-mode-onoff server nil))) - ;; Now ask jsonrpc.el to shutdown server (which in normal + ;; Now ask jsonrpc.el to shut down the server (which under normal ;; conditions should return immediately). - (jsonrpc-shutdown server))) + (jsonrpc-shutdown server (not preserve-buffers)) + (unless preserve-buffers + (mapc #'kill-buffer + `(,(jsonrpc-events-buffer server) ,(jsonrpc-stderr-buffer server)))))) (defun eglot--on-shutdown (server) "Called by jsonrpc.el when SERVER is already dead." @@ -408,7 +414,7 @@ managing `%s' buffers in project `%s'." INTERACTIVE is t if called interactively." (interactive (list (eglot--current-server-or-lose) t)) (when (jsonrpc-running-p server) - (ignore-errors (eglot-shutdown server interactive))) + (ignore-errors (eglot-shutdown server interactive nil 'preserve-buffers))) (eglot--connect (eglot--major-mode server) (eglot--project server) (eieio-object-class-name server)