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

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

[elpa] externals/corfu b2159847fc 1/3: Delay docsig function call with t


From: ELPA Syncer
Subject: [elpa] externals/corfu b2159847fc 1/3: Delay docsig function call with timer (#132)
Date: Mon, 21 Feb 2022 10:57:26 -0500 (EST)

branch: externals/corfu
commit b2159847fc452dbc60c4485c23b474a7284aac6d
Author: JD Smith <93749+jdtsmith@users.noreply.github.com>
Commit: GitHub <noreply@github.com>

    Delay docsig function call with timer (#132)
    
    * Delay docsig function call with timer
    
    * Generalize corfu-echo-documentation to allow (initial subsequent)
    
    * Change corfu-echo-documentation default
---
 corfu.el | 48 +++++++++++++++++++++++++++++++++++-------------
 1 file changed, 35 insertions(+), 13 deletions(-)

diff --git a/corfu.el b/corfu.el
index 5735f6cfea..740194886e 100644
--- a/corfu.el
+++ b/corfu.el
@@ -131,9 +131,21 @@ separator: Only stay alive if there is no match and
   "Width of the bar in units of the character width."
   :type 'float)
 
-(defcustom corfu-echo-documentation 1.0
-  "Show documentation string in the echo area after that number of seconds."
-  :type '(choice boolean float))
+(defcustom corfu-echo-documentation '(1.0 0.2)
+  "Show documentation string in the echo area after that number of seconds.
+Set to nil to disable docsig, or t to echo immediately on
+selecting a new candidate.  Can also be a 2-element list of
+floats (or t) to specify initial and seubsequent delay."
+  :type '(choice (const :tag "Never" nil)
+                (const :tag "Instant" t)
+                (number :tag "Delay [sec]")
+                (list :tag "Two Delays"
+                      (choice :tag "Initial   "
+                              (const :tag "Instant" t)
+                              (number :tag "Delay [sec]"))
+                      (choice :tag "Subsequent"
+                              (const :tag "Instant" t)
+                              (number :tag "Delay [sec]")))))
 
 (defcustom corfu-margin-formatters nil
   "Registry for margin formatter functions.
@@ -242,6 +254,9 @@ The completion backend can override this with
 (defvar corfu--auto-timer nil
   "Auto completion timer.")
 
+(defvar-local corfu--initial t
+  "Whether on the initial update.")
+
 (defvar-local corfu--candidates nil
   "List of candidates.")
 
@@ -289,6 +304,7 @@ The completion backend can override this with
 
 (defconst corfu--state-vars
   '(corfu--base
+    corfu--initial
     corfu--candidates
     corfu--highlight
     corfu--index
@@ -782,18 +798,23 @@ there hasn't been any input, then quit."
                            msg
                          (propertize msg 'face 'corfu-echo))))
 
+(defun corfu--echo-call-show (fun cand)
+  (corfu--echo-show (funcall fun cand)))
+
 (defun corfu--echo-documentation ()
   "Show documentation string of current candidate in echo area."
-  (when corfu-echo-documentation
-    (if-let* ((fun (plist-get corfu--extra :company-docsig))
-              (cand (and (>= corfu--index 0) (nth corfu--index 
corfu--candidates)))
-              (doc (funcall fun cand)))
-        (if (or (eq corfu-echo-documentation t) corfu--echo-message)
-            (corfu--echo-show doc)
-          (setq corfu--echo-timer (run-at-time corfu-echo-documentation
-                                               nil #'corfu--echo-show doc)))
-      (when corfu--echo-message
-        (corfu--echo-show "")))))
+  (if-let* ((delay (if (consp corfu-echo-documentation)
+                      (nth (if corfu--initial 0 1) corfu-echo-documentation)
+                    corfu-echo-documentation))
+            (fun (plist-get corfu--extra :company-docsig))
+           (cand (and (>= corfu--index 0)
+                      (nth corfu--index corfu--candidates))))
+      (if (eq delay t)                         ; immediate
+         (corfu--echo-show (funcall fun cand))
+        (when corfu--echo-timer (cancel-timer corfu--echo-timer))
+       (setq corfu--echo-timer 
+             (run-at-time delay nil #'corfu--echo-call-show fun cand))
+       (when corfu--echo-message (corfu--echo-show "")))))
 
 (defun corfu--update ()
   "Refresh Corfu UI."
@@ -831,6 +852,7 @@ there hasn't been any input, then quit."
       (corfu--candidates-popup beg)
       (corfu--preview-current beg end str)
       (corfu--echo-documentation)
+      (setq corfu--initial nil)
       (redisplay 'force)) ;; XXX HACK Ensure that popup is redisplayed
      ;; 4) There are no candidates & corfu-quit-no-match => Confirmation popup.
      ((and (not corfu--candidates)



reply via email to

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