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

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

[elpa] externals/vertico ce35812f69 2/5: vertico-multiform: Handle :not


From: ELPA Syncer
Subject: [elpa] externals/vertico ce35812f69 2/5: vertico-multiform: Handle :not forms in temporary mode toggles
Date: Mon, 3 Jan 2022 11:57:47 -0500 (EST)

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

    vertico-multiform: Handle :not forms in temporary mode toggles
---
 extensions/vertico-multiform.el | 51 ++++++++++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 21 deletions(-)

diff --git a/extensions/vertico-multiform.el b/extensions/vertico-multiform.el
index e692d30793..919387ea63 100644
--- a/extensions/vertico-multiform.el
+++ b/extensions/vertico-multiform.el
@@ -156,34 +156,43 @@ APP is the original function call."
       (advice-add #'vertico--advice :override #'vertico-multiform--advice)
     (advice-remove #'vertico--advice #'vertico-multiform--advice)))
 
-(defun vertico-multiform--display-disable (mode)
-  "Disable display MODE temporarily in minibuffer."
+(defun vertico-multiform--ensure ()
+  "Ensure that multiform mode is enabled."
   (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"))
-  (when (and (boundp mode) (symbol-value mode))
-    (funcall mode -1)
-    (setcar vertico-multiform--stack
-            (remove mode (car vertico-multiform--stack)))))
+    (user-error "`vertico-multiform-mode' is not enabled")))
 
-(defun vertico-multiform--display-enable (mode)
-  "Enable display MODE temporarily in minibuffer."
-  (unless (and (boundp mode) (symbol-value mode))
-    (funcall mode 1)
-    (push mode (car vertico-multiform--stack))))
+(defun vertico-multiform--temporary-set (mode arg)
+  "Set MODE temporarily in minibuffer to ARG."
+  (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)
+    (let ((modes (car vertico-multiform--stack))
+          (not-mode (cons :not mode)))
+      (when (= arg 1)
+        (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--display-disable m)))
-  (if (and (boundp mode) (symbol-value mode))
-      (vertico-multiform--display-disable mode)
-    (vertico-multiform--display-enable mode)))
+      (vertico-multiform--temporary-set m -1)))
+  (vertico-multiform--temporary-toggle mode))
 
-(defmacro vertico-multiform--display-define-toggle (name)
+(defmacro vertico-multiform--define-display-toggle (name)
   "Define toggle for display mode NAME."
   (let ((sym (intern (format "vertico-multiform-%s" name))))
     `(progn
@@ -193,10 +202,10 @@ APP is the original function call."
          (vertico-multiform--display-toggle ',(intern (format 
"vertico-%s-mode" name))))
        (put ',sym 'completion-predicate #'vertico--command-p))))
 
-(vertico-multiform--display-define-toggle grid)
-(vertico-multiform--display-define-toggle flat)
-(vertico-multiform--display-define-toggle reverse)
-(vertico-multiform--display-define-toggle unobtrusive)
+(vertico-multiform--define-display-toggle grid)
+(vertico-multiform--define-display-toggle flat)
+(vertico-multiform--define-display-toggle reverse)
+(vertico-multiform--define-display-toggle unobtrusive)
 
 (provide 'vertico-multiform)
 ;;; vertico-multiform.el ends here



reply via email to

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