emacs-bug-tracker
[Top][All Lists]
Advanced

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

bug#62816: closed (30.0.50; ElDoc blinks echo area when eldoc-documentat


From: GNU bug Tracking System
Subject: bug#62816: closed (30.0.50; ElDoc blinks echo area when eldoc-documentation-compose is used)
Date: Sat, 15 Apr 2023 11:04:02 +0000

Your message dated Sat, 15 Apr 2023 12:04:54 +0100
with message-id 
<CALDnm51-4-MGSiDr4+zgT2m9d1kf66JJUqkV5CqOxSfVaQ62Gw@mail.gmail.com>
and subject line Re: bug#62816: 30.0.50; ElDoc blinks echo area when 
eldoc-documentation-compose is used
has caused the debbugs.gnu.org bug report #62816,
regarding 30.0.50; ElDoc blinks echo area when eldoc-documentation-compose is 
used
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
62816: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=62816
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: 30.0.50; ElDoc blinks echo area when eldoc-documentation-compose is used Date: Thu, 13 Apr 2023 15:47:40 +0100
Hello,

Originally reported by Dmitry Gutov <dmitry@gutov.dev> over
at bug#62029:

> It's trivially reproduced even with 'emacs -Q': just add somewhere
> inside an Elisp buffer:

>   (remove-hook asd)

> when flymake-mode is enabled and eldoc-documentation-strategy is
> 'eldoc-documentation-compose, and eldoc-echo-area-use-multiline-p is
> not 1, and move around 'asd' with C-f and C-b.

I've confirmed this in a graphical Emacs frame.  In a TTY frame, it's
harder or impossible to spot.  

Traced the problem down to a misimplementation of the
'eldoc-documentation-compose' strategy, which leads to potentially one
eldoc-message call to be issued for each member of
'eldoc-documentation-functions'.  In fact, with this particular
strategy, the intention at most one such call should occur (after all
the documentation items of different backends have been collected).

It's reasonably easy to fix, and I've been running the patch after my
sig all day with no problems either in Elisp or other modes.  The
"blinking" observed before is gone.

I'll push it to master soon, but leave this issue open for comments
and/or feedback a little longer.

João

diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index 1eb0d38c5ce..55fb518f990 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -681,29 +681,34 @@ eldoc-documentation-default
                     (lambda (f)
                       (funcall f (eldoc--make-callback :eager f)))))
 
-(defun eldoc--documentation-compose-1 (eagerlyp)
-  "Helper function for composing multiple doc strings.
-If EAGERLYP is non-nil show documentation as soon as possible,
-else wait for all doc strings."
-  (run-hook-wrapped 'eldoc-documentation-functions
-                    (lambda (f)
-                      (let* ((callback (eldoc--make-callback
-                                        (if eagerlyp :eager :patient)
-                                        f))
-                             (str (funcall f callback)))
-                        (if (or (null str) (stringp str)) (funcall callback 
str))
-                        nil)))
-  t)
-
 (defun eldoc-documentation-compose ()
   "Show multiple documentation strings together after waiting for all of them.
 This is meant to be used as a value for `eldoc-documentation-strategy'."
-  (eldoc--documentation-compose-1 nil))
+  (let (fns-and-callbacks)
+    ;; Make all the callbacks, this sets up state inside
+    ;; `eldoc--invoke-strategy' to know how many to wait for before
+    ;; displaying (bug#xxxxx)
+    (run-hook-wrapped 'eldoc-documentation-functions
+                      (lambda (f)
+                        (push (cons f (eldoc--make-callback :patient f))
+                              fns-and-callbacks)
+                        nil))
+    ;; Now call them.  The last one will trigger the display.
+    (cl-loop for (f . callback) in fns-and-callbacks
+             for str = (funcall f callback)
+             when (or (null str) (stringp str)) do (funcall callback str)))
+  t)
 
 (defun eldoc-documentation-compose-eagerly ()
   "Show multiple documentation strings one by one as soon as possible.
 This is meant to be used as a value for `eldoc-documentation-strategy'."
-  (eldoc--documentation-compose-1 t))
+  (run-hook-wrapped 'eldoc-documentation-functions
+                    (lambda (f)
+                      (let* ((callback (eldoc--make-callback :eager f))
+                             (str (funcall f callback)))
+                        (if (or (null str) (stringp str)) (funcall callback 
str))
+                        nil)))
+  t)
 
 (defun eldoc-documentation-enthusiast ()
   "Show most important documentation string produced so far.





--- End Message ---
--- Begin Message --- Subject: Re: bug#62816: 30.0.50; ElDoc blinks echo area when eldoc-documentation-compose is used Date: Sat, 15 Apr 2023 12:04:54 +0100
On Sat, Apr 15, 2023 at 10:13 AM Eli Zaretskii <eliz@gnu.org> wrote:

> > So maybe that weighs on your decision.  You can check out the fix
> > in 83b5e9cd24ddcbb04dbd5db9a07248ff7fa301ab.
>
> Sounds scary.  I'd prefer to leave it on master at this time.  Unless
> the bug it fixes is more than just resizing of the mini-window.

OK.  That was my initial assessment too (though I wouldn't call it
scary).

So I guess I'm closing the bug, as there's nothing more to do.
João


--- End Message ---

reply via email to

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