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

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

[elpa] externals/vertico 5065bd6781 3/5: vertico-multiform: Add commands


From: ELPA Syncer
Subject: [elpa] externals/vertico 5065bd6781 3/5: vertico-multiform: Add commands to temporarily toggle flat/grid display
Date: Sun, 2 Jan 2022 10:58:00 -0500 (EST)

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

    vertico-multiform: Add commands to temporarily toggle flat/grid display
---
 extensions/vertico-flat.el      | 15 +++++-------
 extensions/vertico-grid.el      | 15 +++++-------
 extensions/vertico-multiform.el | 52 +++++++++++++++++++++++++++++++++++++----
 3 files changed, 59 insertions(+), 23 deletions(-)

diff --git a/extensions/vertico-flat.el b/extensions/vertico-flat.el
index 6d0a3ca6fd..a738da57cb 100644
--- a/extensions/vertico-flat.el
+++ b/extensions/vertico-flat.el
@@ -29,10 +29,10 @@
 ;; This package is a Vertico extension providing a horizontal display.
 ;;
 ;; The mode can be enabled globally or via `vertico-multiform-mode' per
-;; command or completion category. Alternatively the mode can be bound
-;; to a key to toggle to the flat display:
+;; command or completion category. Alternatively the flat display can be
+;; toggled temporarily if `vertico-multiform-mode' is enabled:
 ;;
-;; (define-key vertico-map "\M-F" #'vertico-flat-mode)
+;; (define-key vertico-map "\M-F" #'vertico-multiform-flat)
 ;;
 ;; The flat display can be made to look like `ido-mode' by setting
 ;; `vertico-cycle' to t. See also the `vertico-flat-format'
@@ -119,14 +119,11 @@
 (define-minor-mode vertico-flat-mode
   "Flat, horizontal display for Vertico."
   :global t :group 'vertico
+  ;; Shrink current minibuffer window
+  (when-let (win (active-minibuffer-window))
+    (window-resize win (- (window-pixel-height win)) nil nil 'pixelwise))
   (cond
    (vertico-flat-mode
-    ;; Allow toggling between flat and grid modes
-    (when (and (bound-and-true-p vertico-grid-mode) (fboundp 
'vertico-grid-mode))
-      (vertico-grid-mode -1))
-    ;; Shrink current minibuffer window
-    (when-let (win (active-minibuffer-window))
-      (window-resize win (- (window-pixel-height win)) nil nil 'pixelwise))
     (unless (eq (cadr vertico-map) vertico-flat-map)
       (setcdr vertico-map (cons vertico-flat-map (cdr vertico-map))))
     (advice-add #'vertico--arrange-candidates :override 
#'vertico-flat--arrange-candidates)
diff --git a/extensions/vertico-grid.el b/extensions/vertico-grid.el
index 38656bc7e1..c3b5f2d2b3 100644
--- a/extensions/vertico-grid.el
+++ b/extensions/vertico-grid.el
@@ -29,10 +29,10 @@
 ;; This package is a Vertico extension providing a grid display.
 ;;
 ;; The mode can be enabled globally or via `vertico-multiform-mode' per
-;; command or completion category. Alternatively the mode can be bound
-;; to a key to toggle to the grid display:
+;; command or completion category. Alternatively the grid display can be
+;; toggled temporarily if `vertico-multiform-mode' is enabled:
 ;;
-;; (define-key vertico-map "\M-G" #'vertico-grid-mode)
+;; (define-key vertico-map "\M-G" #'vertico-multiform-grid)
 
 ;;; Code:
 
@@ -144,14 +144,11 @@ When scrolling beyond this limit, candidates may be 
truncated."
 (define-minor-mode vertico-grid-mode
   "Grid display for Vertico."
   :global t :group 'vertico
+  ;; Shrink current minibuffer window
+  (when-let (win (active-minibuffer-window))
+    (window-resize win (- (window-pixel-height win)) nil nil 'pixelwise))
   (cond
    (vertico-grid-mode
-    ;; Allow toggling between flat and grid modes
-    (when (and (bound-and-true-p vertico-flat-mode) (fboundp 
'vertico-flat-mode))
-      (vertico-flat-mode -1))
-    ;; Shrink current minibuffer window
-    (when-let (win (active-minibuffer-window))
-      (window-resize win (- (window-pixel-height win)) nil nil 'pixelwise))
     (unless (eq (cadr vertico-map) vertico-grid-map)
       (setcdr vertico-map (cons vertico-grid-map (cdr vertico-map))))
     (advice-add #'vertico--arrange-candidates :override 
#'vertico-grid--arrange-candidates))
diff --git a/extensions/vertico-multiform.el b/extensions/vertico-multiform.el
index 1a355bfa65..9cd1803ba6 100644
--- a/extensions/vertico-multiform.el
+++ b/extensions/vertico-multiform.el
@@ -43,7 +43,14 @@
 ;;          '((file buffer grid)))
 ;;
 ;;    (vertico-multiform-mode)
-
+;;
+;; Temporary toggling between the different display modes is
+;; possible. Bind the following commands:
+;;
+;; (define-key vertico-map "\M-G" #'vertico-multiform-grid)
+;; (define-key vertico-map "\M-F" #'vertico-multiform-flat)
+;; (define-key vertico-map "\M-V" #'vertico-multiform-vertical)
+;;
 ;;; Code:
 
 (require 'vertico)
@@ -91,11 +98,11 @@ Has lower precedence than 
`vertico-multiform-command-settings'."
   "Lookup symbolic KEY in LIST.
 The keys in LIST can be symbols or regexps."
   (and (symbolp key)
-       (cl-loop for x in list
-                if (if (symbolp (car x))
+       (seq-find (lambda (x)
+                   (if (symbolp (car x))
                        (eq key (car x))
-                     (string-match-p (car x) (symbol-name key)))
-                return x)))
+                     (string-match-p (car x) (symbol-name key))))
+                 list)))
 
 (defun vertico-multiform--setup ()
   "Enable modes at minibuffer setup."
@@ -144,5 +151,40 @@ APP is the original function call."
       (advice-add #'vertico--advice :override #'vertico-multiform--advice)
     (advice-remove #'vertico--advice #'vertico-multiform--advice)))
 
+(defun vertico-multiform--disable-temporarily (mode)
+  "Disable MODE temporarily in minibuffer."
+  (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)
+    (setf (car vertico-multiform--stack)
+          (remove mode (car vertico-multiform--stack)))))
+
+(defun vertico-multiform--enable-temporarily (mode)
+  "Enable MODE temporarily in minibuffer."
+  (unless (and (boundp mode) (symbol-value mode))
+    (funcall mode 1)
+    (push mode (car vertico-multiform--stack))))
+
+(defun vertico-multiform--toggle-temporarily (mode)
+  "Toggle MODE temporarily in minibuffer."
+  (if (and (boundp mode) (symbol-value mode))
+      (vertico-multiform--disable-temporarily mode)
+    (vertico-multiform--enable-temporarily mode)))
+
+(defun vertico-multiform-grid ()
+  "Toggle the grid display."
+  (interactive)
+  (vertico-multiform--disable-temporarily 'vertico-flat-mode)
+  (vertico-multiform--toggle-temporarily 'vertico-grid-mode))
+
+(defun vertico-multiform-flat ()
+  "Toggle the flat display."
+  (interactive)
+  (vertico-multiform--disable-temporarily 'vertico-grid-mode)
+  (vertico-multiform--toggle-temporarily 'vertico-flat-mode))
+
 (provide 'vertico-multiform)
 ;;; vertico-multiform.el ends here



reply via email to

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