branch: externals/vertico
commit 93f709d71e8908617a21ca469fd60123f5037ae4
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>
vertico-multiform: Reduce repetition
---
extensions/vertico-multiform.el | 43 ++++++++++++++++-------------------------
1 file changed, 17 insertions(+), 26 deletions(-)
diff --git a/extensions/vertico-multiform.el b/extensions/vertico-multiform.el
index 096afd7c99..53474a86cf 100644
--- a/extensions/vertico-multiform.el
+++ b/extensions/vertico-multiform.el
@@ -139,13 +139,7 @@ The keys in LIST can be symbols or regexps."
(vertico--setup)))
(defvar-keymap vertico-multiform-map
- :doc "Additional keymap activated in multiform mode."
- "M-B" #'vertico-multiform-buffer
- "M-F" #'vertico-multiform-flat
- "M-G" #'vertico-multiform-grid
- "M-R" #'vertico-multiform-reverse
- "M-U" #'vertico-multiform-unobtrusive
- "M-V" #'vertico-multiform-vertical)
+ :doc "Additional keymap activated in multiform mode.")
;;;###autoload
(define-minor-mode vertico-multiform-mode
@@ -189,9 +183,7 @@ ARG can be nil, t, -1, 1 or toggle."
(setcar vertico-multiform--stack (remove mode modes))
(push not-mode (car vertico-multiform--stack))))))
-(defvar vertico-multiform--display-modes
- '(vertico-unobtrusive-mode vertico-flat-mode vertico-grid-mode
- vertico-reverse-mode vertico-buffer-mode))
+(defvar vertico-multiform--display-modes nil)
(defvar-local vertico-multiform--display-last nil)
(defun vertico-multiform-vertical (&optional mode)
@@ -209,22 +201,21 @@ MODE defaults to the vertical display."
(vertico-multiform--temporary-mode mode 1))
(setq vertico-multiform--display-last last)))
-(defmacro vertico-multiform--define-display-toggle (name)
- "Define toggle for display mode NAME."
- `(defun ,(intern (format "vertico-multiform-%s" name)) ()
- ,(format "Toggle the %s display." name)
- (interactive)
- (vertico-multiform-vertical ',(intern (format "vertico-%s-mode" name)))))
-
-(vertico-multiform--define-display-toggle buffer)
-(vertico-multiform--define-display-toggle grid)
-(vertico-multiform--define-display-toggle flat)
-(vertico-multiform--define-display-toggle reverse)
-(vertico-multiform--define-display-toggle unobtrusive)
-
-;; Emacs 28: Do not show display toggles in M-X
-(map-keymap (lambda (_ x) (put x 'completion-predicate #'vertico--command-p))
- (keymap-lookup vertico-multiform-map "ESC"))
+(pcase-dolist (`(,key ,name) '(("M-B" buffer)
+ ("M-F" flat)
+ ("M-G" grid)
+ ("M-R" reverse)
+ ("M-U" unobtrusive) ;; must come after flat
+ ("M-V" vertical)))
+ (let ((toggle (intern (format "vertico-multiform-%s" name))))
+ (unless (eq name 'vertical)
+ (let ((mode (intern (format "vertico-%s-mode" name))))
+ (defalias toggle
+ (lambda () (interactive) (vertico-multiform-vertical mode))
+ (format "Toggle the %s display." name))
+ (push mode vertico-multiform--display-modes)))
+ (put toggle 'completion-predicate #'vertico--command-p)
+ (keymap-set vertico-multiform-map key toggle)))
(provide 'vertico-multiform)
;;; vertico-multiform.el ends here