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

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

[elpa] externals/consult 026b801b91 1/2: consult--dynamic-collection-sou


From: ELPA Syncer
Subject: [elpa] externals/consult 026b801b91 1/2: consult--dynamic-collection-source: Cache candidates
Date: Fri, 27 Jan 2023 17:57:26 -0500 (EST)

branch: externals/consult
commit 026b801b9135abd31991966e085f5cbfc8fe85a7
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    consult--dynamic-collection-source: Cache candidates
---
 consult.el | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/consult.el b/consult.el
index 90854497ff..dccb52eeb2 100644
--- a/consult.el
+++ b/consult.el
@@ -2101,7 +2101,7 @@ The THROTTLE delay defaults to 
`consult-async-input-throttle'.
 The DEBOUNCE delay defaults to `consult-async-input-debounce'."
   (setq throttle (or throttle consult-async-input-throttle)
         debounce (or debounce consult-async-input-debounce))
-  (let ((input "") (last) (timer))
+  (let ((input "") last timer)
     (lambda (action)
       (pcase action
         ((pred stringp)
@@ -2179,26 +2179,28 @@ The refresh happens after a DELAY, defaulting to 
`consult-async-refresh-delay'."
 ASYNC is the sink.
 FUN computes the candidates given the input."
   (setq async (consult--async-indicator async))
-  (let ((request ""))
+  (let (request current)
     (lambda (action)
       (pcase action
+        ((and 'nil (guard (not request)))
+         (funcall async nil))
         ('nil
-         (if (equal request "")
-             (funcall async nil)
-           (let ((state 'killed))
-             (unwind-protect
-                 (progn
-                   (funcall async 'indicator 'running)
-                   (redisplay)
-                   (let ((response (funcall fun request)))
-                     (funcall async 'flush)
-                     (setq state 'finished)
-                     (funcall async response)))
-               (funcall async 'indicator state)
-               (setq request "")))))
+         (let ((state 'killed))
+           (unwind-protect
+               (progn
+                 (funcall async 'indicator 'running)
+                 (redisplay)
+                 (let ((response (funcall fun request)))
+                   (funcall async 'flush)
+                   (setq state 'finished current request)
+                   (funcall async response)))
+             (funcall async 'indicator state)
+             (setq request nil))))
         ((pred stringp)
-         (setq request action)
-         (funcall async 'refresh))
+         (if (or (equal action "") (equal action current))
+             (funcall async 'indicator 'finished)
+           (setq request action)
+           (funcall async 'refresh)))
         (_ (funcall async action))))))
 
 (defun consult--dynamic-collection (fun)



reply via email to

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