branch: externals/vertico
commit afec802d1ade246e76df33ab11cef01c031c39fc
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>

    Do not use minibuffer-setup-hook for idempotency
---
 extensions/vertico-multiform.el | 8 +++++---
 vertico.el                      | 8 ++++++--
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/extensions/vertico-multiform.el b/extensions/vertico-multiform.el
index e1fbec27ff3..21b3e8b6088 100644
--- a/extensions/vertico-multiform.el
+++ b/extensions/vertico-multiform.el
@@ -175,11 +175,13 @@ The keys in LIST can be symbols or regexps."
   menu)
 
 (cl-defmethod vertico--advice (&context (vertico-multiform-mode (eql t)) &rest 
app)
-  (unwind-protect
-      (dlet ((completion-eager-display nil)) ;; Available on Emacs 31
+  (unwind-protect ;; Do not use `minibuffer-setup-hook' for idempotency.
+      (progn
         (vertico-multiform--toggle -1)
-        (minibuffer-with-setup-hook #'vertico-multiform--setup
+        (add-hook 'minibuffer-setup-hook #'vertico-multiform--setup)
+        (dlet ((completion-eager-display nil)) ;; Available on Emacs 31
           (apply app)))
+    (remove-hook 'minibuffer-setup-hook #'vertico-multiform--setup)
     (vertico-multiform--toggle 1)))
 
 (defun vertico-multiform--toggle-mode-1 (mode arg)
diff --git a/vertico.el b/vertico.el
index 90f47929923..5cd257c843b 100644
--- a/vertico.el
+++ b/vertico.el
@@ -624,8 +624,12 @@ the stack trace is shown in the *Messages* buffer."
 
 (cl-defgeneric vertico--advice (&rest app)
   "Advice for completion function, apply APP."
-  (dlet ((completion-eager-display nil)) ;; Available on Emacs 31
-    (minibuffer-with-setup-hook #'vertico--setup (apply app))))
+  (unwind-protect ;; Do not use `minibuffer-setup-hook' for idempotency.
+      (progn
+        (add-hook 'minibuffer-setup-hook #'vertico--setup)
+        (dlet ((completion-eager-display nil)) ;; Available on Emacs 31
+          (apply app)))
+    (remove-hook 'minibuffer-setup-hook #'vertico--setup)))
 
 (defun vertico-first ()
   "Go to first candidate, or to the prompt when the first candidate is 
selected."

Reply via email to