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

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

[elpa] externals/corfu 04ff423: Improve echo messages, interaction with


From: ELPA Syncer
Subject: [elpa] externals/corfu 04ff423: Improve echo messages, interaction with eldoc
Date: Mon, 22 Nov 2021 07:57:13 -0500 (EST)

branch: externals/corfu
commit 04ff42341ebca022d9ab0d31f6ca048ba9f661f9
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Improve echo messages, interaction with eldoc
---
 corfu.el | 37 ++++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/corfu.el b/corfu.el
index 8130dec..98ef6f6 100644
--- a/corfu.el
+++ b/corfu.el
@@ -247,6 +247,9 @@ return a string, possibly an icon."
 (defvar-local corfu--echo-timer nil
   "Echo area message timer.")
 
+(defvar-local corfu--echo-message nil
+  "Last echo message.")
+
 (defvar corfu--frame nil
   "Popup frame.")
 
@@ -262,6 +265,7 @@ return a string, possibly an icon."
     corfu--extra
     corfu--auto-start
     corfu--echo-timer
+    corfu--echo-message
     corfu--change-group
     corfu--metadata)
   "Buffer-local state variables used by Corfu.")
@@ -710,21 +714,33 @@ input. If there hasn't been any input, then quit."
     (overlay-put corfu--preview-ov 'window (selected-window))
     (overlay-put corfu--preview-ov 'display (concat (substring str 0 
corfu--base) cand))))
 
-(defun corfu--echo (msg)
+(defun corfu--echo-refresh ()
+  "Refresh echo message to prevent flicker during redisplay."
+  (when corfu--echo-timer
+    (cancel-timer corfu--echo-timer)
+    (setq corfu--echo-timer nil))
+  (when corfu--echo-message
+    (corfu--echo-show corfu--echo-message)))
+
+(defun corfu--echo-show (msg)
   "Show MSG in echo area."
   (let ((message-log-max nil))
+    (setq corfu--echo-message msg)
     (message "%s" (if (text-property-not-all 0 (length msg) 'face nil msg)
                       msg
                     (propertize msg 'face 'corfu-echo)))))
 
 (defun corfu--echo-documentation (cand)
   "Show documentation string for CAND in echo area."
-  (when-let* ((fun (and corfu-echo-documentation (plist-get corfu--extra 
:company-docsig)))
+  (when corfu-echo-documentation
+    (if-let* ((fun (plist-get corfu--extra :company-docsig))
               (doc (funcall fun cand)))
-    (if (eq corfu-echo-documentation t)
-        (corfu--echo doc)
-      (setq corfu--echo-timer (run-with-idle-timer corfu-echo-documentation
-                                                   nil #'corfu--echo doc)))))
+        (if (or (eq corfu-echo-documentation t) corfu--echo-message)
+            (corfu--echo-show doc)
+          (setq corfu--echo-timer (run-with-idle-timer corfu-echo-documentation
+                                                       nil #'corfu--echo-show 
doc)))
+      (when corfu--echo-message
+        (corfu--echo-show "")))))
 
 (defun corfu--update (msg)
   "Refresh Corfu UI, possibly printing a message with MSG."
@@ -735,12 +751,10 @@ input. If there hasn't been any input, then quit."
                (continue (or (/= beg end)
                              (corfu--match-symbol-p corfu-continue-commands
                                                     this-command))))
+    (corfu--echo-refresh)
     (when corfu--preview-ov
       (delete-overlay corfu--preview-ov)
       (setq corfu--preview-ov nil))
-    (when corfu--echo-timer
-      (cancel-timer corfu--echo-timer)
-      (setq corfu--echo-timer nil))
     (cond
      ;; XXX Guard against errors during candidate generation.
      ;; Turn off completion immediately if there are errors
@@ -1062,6 +1076,7 @@ input. If there hasn't been any input, then quit."
     ;; issue has been mentioned. We never uninstall this advice since the
     ;; advice is active *globally*.
     (advice-add #'completion--capf-wrapper :around 
#'corfu--capf-wrapper-advice)
+    (advice-add #'eldoc-display-message-no-interference-p :before-while 
#'corfu--allow-eldoc)
     (and corfu-auto (add-hook 'post-command-hook #'corfu--auto-post-command 
nil 'local))
     (setq-local completion-in-region-function #'corfu--completion-in-region))
    (t
@@ -1096,6 +1111,10 @@ The ORIG function takes the FUN and WHICH arguments."
               (memq major-mode corfu-excluded-modes))
     (corfu-mode 1)))
 
+(defun corfu--allow-eldoc ()
+  "Return non-nil if Corfu is currently not active."
+  (not (and corfu-mode completion-in-region-mode)))
+
 ;; Emacs 28: Do not show Corfu commands with M-X
 (dolist (sym '(corfu-next corfu-previous corfu-first corfu-last corfu-quit 
corfu-reset
                corfu-complete corfu-insert corfu-scroll-up corfu-scroll-down



reply via email to

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