From 4f62e731d8e1b4c30bff9f24dd4020cb2a11b06e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Fri, 4 May 2018 12:03:51 +0100 Subject: [PATCH] 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. --- lisp/progmodes/eglot.el | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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))) -- 2.39.2