From: João Távora Date: Fri, 4 May 2018 11:03:51 +0000 (+0100) Subject: Don't auto-reconnect if last attempt lasted less than 3 seconds X-Git-Tag: emacs-29.0.90~1616^2~524^2~4^2~645 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4f62e731d8e1b4c30bff9f24dd4020cb2a11b06e;p=emacs.git Don't auto-reconnect if last attempt lasted less than 3 seconds * eglot.el (eglot--inhibit-auto-reconnect): New var. (eglot--process-sentinel): Use it. --- diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 8f371d2011b..df03d044789 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -329,6 +329,9 @@ INTERACTIVE is t if called interactively." (with-current-buffer buffer (eglot--maybe-activate-editing-mode proc)))))) +(defvar eglot--inhibit-auto-reconnect nil + "If non-nil, don't autoreconnect on unexpected quit.") + (defun eglot--process-sentinel (process change) "Called with PROCESS undergoes CHANGE." (eglot--debug "(sentinel) Process state changed to %s" change) @@ -355,11 +358,20 @@ INTERACTIVE is t if called interactively." (cond ((eglot--moribund process) (eglot--message "(sentinel) Moribund process exited with status %s" (process-exit-status process))) - (t + ((null eglot--inhibit-auto-reconnect) (eglot--warn "(sentinel) Reconnecting after process unexpectedly changed to %s." change) - (eglot-reconnect process))) + (eglot-reconnect process) + (setq eglot--inhibit-auto-reconnect + (run-with-timer + 3 nil + (lambda () + (setq eglot--inhibit-auto-reconnect nil))))) + (t + (eglot--warn + "(sentinel) Not auto-reconnecting, last one didn't last long." + change))) (force-mode-line-update t) (delete-process process)))