]> git.eshelyaron.com Git - emacs.git/commitdiff
Auto update mode-line after setting some process properties
authorJoão Távora <joaotavora@gmail.com>
Wed, 2 May 2018 12:28:18 +0000 (13:28 +0100)
committerJoão Távora <joaotavora@gmail.com>
Wed, 2 May 2018 14:50:17 +0000 (15:50 +0100)
* eglot.el (eglot--define-process-var): Rework.
(eglot--short-name, eglot--spinner, eglot--status): Update mode-line
after setting it.

lisp/progmodes/eglot.el

index ff71a2f782f48d9103c088409585c697476182c7..1a82cc507d3b2ebec9380bc370f5396b0894398d 100644 (file)
                     (if (project-current) ""
                       " (Also no current project)"))))
 
-(defmacro eglot--define-process-var (var-sym initval &optional doc)
+(defmacro eglot--define-process-var
+    (var-sym initval &optional doc mode-line-update-p)
+  "Define VAR-SYM as a generalized process-local variable.
+INITVAL is the default value.  DOC is the documentation.
+MODE-LINE-UPDATE-P says to also force a mode line update
+after setting it."
   (declare (indent 2))
   `(progn
      (put ',var-sym 'function-documentation ,doc)
                (process-put proc ',var-sym def)
                def))))
      (gv-define-setter ,var-sym (to-store &optional process)
-       (let ((prop ',var-sym))
-         `(let ((proc (or ,process (eglot--current-process-or-lose))))
-            (process-put proc ',prop ,to-store))))))
+       (let* ((prop ',var-sym))
+         ,(let ((form '(let ((proc (or ,process (eglot--current-process-or-lose))))
+                         (process-put proc ',prop ,to-store))))
+            (if mode-line-update-p
+                `(backquote (prog1 ,form (force-mode-line-update t)))
+              `(backquote ,form)))))))
 
 (eglot--define-process-var eglot--short-name nil
-  "A short name for the process")
+  "A short name for the process" t)
 
 (eglot--define-process-var eglot--expected-bytes nil
   "How many bytes declared by server")
 
 (eglot--define-process-var eglot--spinner `(nil nil t)
   "\"Spinner\" used by some servers.
-A list (ID WHAT DONE-P).")
+A list (ID WHAT DONE-P)." t)
 
 (eglot--define-process-var eglot--status `(:unknown nil)
   "Status as declared by the server.
-A list (WHAT SERIOUS-P).")
+A list (WHAT SERIOUS-P)." t)
 
 (defun eglot--command (&optional errorp)
   (let ((probe (cdr (assoc major-mode eglot-executables))))