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

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

[elpa] externals/consult 65ba52d442 4/5: Improve consult--dynamic-comput


From: ELPA Syncer
Subject: [elpa] externals/consult 65ba52d442 4/5: Improve consult--dynamic-compute interrupt handling
Date: Fri, 3 Jan 2025 06:57:44 -0500 (EST)

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

    Improve consult--dynamic-compute interrupt handling
---
 consult.el | 46 +++++++++++++++++++---------------------------
 1 file changed, 19 insertions(+), 27 deletions(-)

diff --git a/consult.el b/consult.el
index 1b01be2dbe..3fbfa36e8e 100644
--- a/consult.el
+++ b/consult.el
@@ -2382,34 +2382,26 @@ highlighting function."
   "Dynamic computation of candidates.
 ASYNC is the sink.
 FUN computes the candidates given the input."
-  (let (request current)
+  (let (current)
     (lambda (action)
-      (pcase action
-        ('nil
-         ;; Perform the computation when the candidates are requested, since
-         ;; then the computation can be interrupted by the completion UI.
-         (when request
-           (let ((state 'killed))
-             (unwind-protect
-                 (progn
-                   (funcall async 'indicator 'running)
-                   (redisplay)
-                   ;; Run computation
-                   (let ((response (funcall fun request)))
-                     ;; Flush and update candidate list
-                     (funcall async 'flush)
-                     (funcall async response)
-                     (setq state 'finished current request request nil)))
-               (funcall async 'indicator state))))
-         (funcall async nil))
-        ((pred stringp)
-         ;; Do not perform the computation immediately, only when the
-         ;; candidates are requested.
-         (if (equal action current)
-             (setq request nil)
-           (setq request action)
-           (funcall async 'refresh)))
-        (_ (funcall async action))))))
+      (cond
+       ((stringp action)
+        (if (equal action current)
+            (funcall async 'indicator 'finished)
+          (let ((state 'killed))
+            (unwind-protect
+                (while-no-input
+                  (funcall async 'indicator 'running)
+                  (redisplay)
+                  ;; Run computation
+                  (let ((response (funcall fun action)))
+                    ;; Flush and update candidate list
+                    (funcall async 'flush)
+                    (funcall async response)
+                    (funcall async 'refresh)
+                    (setq state 'finished current action)))
+              (funcall async 'indicator state)))))
+       (t (funcall async action))))))
 
 (defun consult--dynamic-collection (fun &optional debounce min-input)
   "Dynamic collection with input splitting.



reply via email to

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