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

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

[elpa] externals/eglot 5ea4049 68/69: Fix #324: let user keep control of


From: João Távora
Subject: [elpa] externals/eglot 5ea4049 68/69: Fix #324: let user keep control of some variables during Eglot sessions
Date: Sun, 20 Oct 2019 08:21:55 -0400 (EDT)

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

    Fix #324: let user keep control of some variables during Eglot sessions
    
    * NEWS.md: Mention new variable eglot-stay-out-of
    
    * eglot.el (eglot-stay-out-of): New variable.
    (eglot--setq-saving): Use it.
    (eglot--managed-mode): Use eglot--setq-saving for imenu.  No need
    to remove 'eglot-flymake-backend from diagnostic functions.
---
 NEWS.md  |  9 +++++++++
 eglot.el | 30 +++++++++++++++++++++++++++---
 2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/NEWS.md b/NEWS.md
index 33808ea..86f3a76 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,5 +1,13 @@
 # 1.5 (upcoming)
 
+##### New variable `eglot-stay-out-of` ([#324][github#324])
+
+For the duration of an Eglot session, certain variables pertaining to
+Flymake, Xref, Company, etc. are set in such a way that they override
+user's customization.  However, for users interested in keeping full
+control of these variables, Eglot will refrain setting any variables
+matched in 'eglot-stay-out-of'.
+
 ##### Prevent Eldoc flicker when moving around ([#198][github#198])
 
 ##### Show large docs in help buffer instead of echo area by default 
([#198][github#198])
@@ -150,4 +158,5 @@ TCP connection finds a listening server.
 [github#158]: https://github.com/joaotavora/eglot/issues/158
 [github#160]: https://github.com/joaotavora/eglot/issues/160
 [github#167]: https://github.com/joaotavora/eglot/issues/167
+[github#324]: https://github.com/joaotavora/eglot/issues/324
 
diff --git a/eglot.el b/eglot.el
index 09c1461..7a22b5c 100644
--- a/eglot.el
+++ b/eglot.el
@@ -1172,8 +1172,33 @@ and just return it.  PROMPT shouldn't end with a 
question mark."
 (defvar-local eglot--saved-bindings nil
   "Bindings saved by `eglot--setq-saving'.")
 
+(defvar eglot-stay-out-of '()
+  "List of Emacs things that Eglot should try to stay of.
+Before Eglot starts \"managing\" a particular buffer, it
+opinionatedly sets some peripheral Emacs facilites, such as
+Flymake, Xref and Company.  These overriding settings help ensure
+consistent Eglot behaviour and only stay in place until
+\"managing\" stops (usually via `eglot-shutdown'), whereupon the
+previous settings are restored.
+
+However, if you wish for Eglot to stay out of a particular Emacs
+facility that you'd like to keep control of, add a string, a
+symbol, or a regexp here that will be matched against the
+variable's name, and Eglot will refrain from setting it.
+
+For example, to keep your Company customization use
+
+(add-to-list 'eglot-stay-out-of 'company)")
+
 (defmacro eglot--setq-saving (symbol binding)
-  `(when (boundp ',symbol)
+  `(when (and (boundp ',symbol)
+              (not (cl-find (symbol-name ',symbol)
+                            eglot-stay-out-of
+                            :test
+                            (lambda (s thing)
+                              (let ((re (if (symbolp thing) (symbol-name thing)
+                                          thing)))
+                                (string-match re s))))))
      (push (cons ',symbol (symbol-value ',symbol))
            eglot--saved-bindings)
      (setq-local ,symbol ,binding)))
@@ -1200,11 +1225,10 @@ and just return it.  PROMPT shouldn't end with a 
question mark."
     (eglot--setq-saving xref-prompt-for-identifier nil)
     (eglot--setq-saving flymake-diagnostic-functions '(eglot-flymake-backend 
t))
     (eglot--setq-saving company-backends '(company-capf))
-    (add-function :around (local 'imenu-create-index-function) #'eglot-imenu)
+    (eglot--setq-saving imenu-create-index-function #'eglot-imenu)
     (flymake-mode 1)
     (eldoc-mode 1))
    (t
-    (remove-hook 'flymake-diagnostic-functions 'eglot-flymake-backend t)
     (remove-hook 'after-change-functions 'eglot--after-change t)
     (remove-hook 'before-change-functions 'eglot--before-change t)
     (remove-hook 'kill-buffer-hook 'eglot--signal-textDocument/didClose t)



reply via email to

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