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

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

[elpa] externals/vertico 9b44350621: vertico-multiform--temporary-mode:


From: ELPA Syncer
Subject: [elpa] externals/vertico 9b44350621: vertico-multiform--temporary-mode: Rework toggle mechanism
Date: Tue, 4 Jan 2022 06:57:52 -0500 (EST)

branch: externals/vertico
commit 9b443506210b5f77ede9d0a8242b173496862e64
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    vertico-multiform--temporary-mode: Rework toggle mechanism
    
    Fix vertico-unobtrusive-mode toggle bug reported in #168. Thanks, @gcv!
---
 extensions/vertico-multiform.el   | 32 ++++++++++++++++----------------
 extensions/vertico-unobtrusive.el |  3 ++-
 2 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/extensions/vertico-multiform.el b/extensions/vertico-multiform.el
index 919387ea63..c897da054f 100644
--- a/extensions/vertico-multiform.el
+++ b/extensions/vertico-multiform.el
@@ -81,7 +81,7 @@ Has lower precedence than `vertico-multiform-commands'."
   "Toggle modes from stack depending on ARG."
   (when-let ((win (active-minibuffer-window))
              (modes (car vertico-multiform--stack)))
-    (when (= arg 1) (setq modes (reverse modes)))
+    (when (> arg 0) (setq modes (reverse modes)))
     (with-selected-window win
       (dolist (m modes)
         (if (eq (car-safe m) :not)
@@ -163,34 +163,34 @@ APP is the original function call."
   (unless vertico-multiform-mode
     (user-error "`vertico-multiform-mode' is not enabled")))
 
-(defun vertico-multiform--temporary-set (mode arg)
-  "Set MODE temporarily in minibuffer to ARG."
+(defun vertico-multiform--temporary-mode (mode arg)
+  "Enable or disable MODE temporarily in minibuffer given ARG.
+ARG can be nil, t, -1, 1 or toggle."
   (unless (minibufferp)
     (user-error "`%s' must be called inside the minibuffer" this-command))
   (unless vertico-multiform-mode
     (user-error "`vertico-multiform-mode' is not enabled"))
-  (unless (eq (= arg 1) (and (boundp mode) (symbol-value mode)))
-    (funcall mode arg)
+  (setq arg (pcase arg
+              ('toggle (not (and (boundp mode) (symbol-value mode))))
+              ((or 'nil 't) arg)
+              (_ (> arg 0))))
+  (unless (eq arg (and (boundp mode) (symbol-value mode)))
+    (funcall mode (if arg 1 -1))
     (let ((modes (car vertico-multiform--stack))
           (not-mode (cons :not mode)))
-      (when (= arg 1)
+      (when arg
         (cl-rotatef not-mode mode))
       (if (member mode modes)
           (setcar vertico-multiform--stack (remove mode modes))
         (push not-mode (car vertico-multiform--stack))))))
 
-(defun vertico-multiform--temporary-toggle (mode)
-  "Toggle MODE temporarily in minibuffer."
-  (vertico-multiform--temporary-set
-   mode (if (and (boundp mode) (symbol-value mode)) -1 1)))
-
 (defun vertico-multiform--display-toggle (mode)
   "Toggle display MODE temporarily in minibuffer."
-  (dolist (m '(vertico-unobtrusive-mode vertico-flat-mode
-               vertico-grid-mode vertico-reverse-mode))
-    (unless (eq m mode)
-      (vertico-multiform--temporary-set m -1)))
-  (vertico-multiform--temporary-toggle mode))
+  (let ((arg (not (and (boundp mode) (symbol-value mode)))))
+    (dolist (m '(vertico-unobtrusive-mode vertico-flat-mode
+                 vertico-grid-mode vertico-reverse-mode))
+      (vertico-multiform--temporary-mode m -1))
+    (when arg (vertico-multiform--temporary-mode mode 1))))
 
 (defmacro vertico-multiform--define-display-toggle (name)
   "Define toggle for display mode NAME."
diff --git a/extensions/vertico-unobtrusive.el 
b/extensions/vertico-unobtrusive.el
index 087c00515b..343bd15a2c 100644
--- a/extensions/vertico-unobtrusive.el
+++ b/extensions/vertico-unobtrusive.el
@@ -68,7 +68,8 @@
             vertico-flat-format (nthcdr 4 vertico-flat-format)
             vertico-unobtrusive--orig-count nil))
     (advice-remove #'vertico--setup #'redisplay)
-    (vertico-flat-mode 0))))
+    (vertico-flat-mode -1)))
+  (setq vertico-flat-mode nil))
 
 (provide 'vertico-unobtrusive)
 ;;; vertico-unobtrusive.el ends here



reply via email to

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