[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