branch: externals/eglot
commit c2862f46c8330a0c0feaf871034166ed5d973894
Author: João Távora <joaotav...@gmail.com>
Commit: João Távora <joaotav...@gmail.com>
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.
---
eglot.el | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/eglot.el b/eglot.el
index 8f371d2..df03d04 100644
--- a/eglot.el
+++ b/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)))