emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/eglot 14c7647 4/8: Be more criterious before running th


From: João Távora
Subject: [elpa] externals/eglot 14c7647 4/8: Be more criterious before running the idle timer
Date: Tue, 29 May 2018 22:21:24 -0400 (EDT)

branch: externals/eglot
commit 14c764708edf49bb3b6c24d054d4d1f5a6d52fac
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Be more criterious before running the idle timer
    
    * eglot.el (eglot--change-idle-timer): make a defvar-local
    (eglot--after-change): Only run timer if the buffer is live.
---
 eglot.el | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/eglot.el b/eglot.el
index c48aa2b..8ab4b49 100644
--- a/eglot.el
+++ b/eglot.el
@@ -1118,7 +1118,7 @@ THINGS are either registrations or unregisterations."
 (defmethod eglot-server-ready-p (_s _what)
   "Normally ready if no outstanding changes." (not eglot--recent-changes))
 
-(defvar eglot--change-idle-timer nil "Idle timer for textDocument/didChange.")
+(defvar-local eglot--change-idle-timer nil "Idle timer for didChange signals.")
 
 (defun eglot--before-change (start end)
   "Hook onto `before-change-functions'.
@@ -1141,10 +1141,14 @@ Records START, END and PRE-CHANGE-LENGTH locally."
             `(,pre-change-length ,(buffer-substring-no-properties start end)))
     (setf eglot--recent-changes :emacs-messup))
   (when eglot--change-idle-timer (cancel-timer eglot--change-idle-timer))
-  (setq eglot--change-idle-timer
-        (run-with-idle-timer
-         0.5 nil (lambda () (eglot--signal-textDocument/didChange)
-                   (setq eglot--change-idle-timer nil)))))
+  (let ((buf (current-buffer)))
+    (setq eglot--change-idle-timer
+          (run-with-idle-timer
+           0.5 nil (lambda () (when (buffer-live-p buf)
+                                (with-current-buffer buf
+                                  (when eglot--managed-mode
+                                    (eglot--signal-textDocument/didChange)
+                                    (setq eglot--change-idle-timer nil)))))))))
 
 (defun eglot--signal-textDocument/didChange ()
   "Send textDocument/didChange to server."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]