branch: externals/vertico commit c82f09f9dc1d90aa22728792836551aa4827fb60 Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
vertico-multiform-mode: Add context menu to change display mode First enable `vertico-multiform-mode' and `context-menu-mode'. The menu will appear with a right click in the Vertico minibuffer. --- CHANGELOG.org | 6 ++++++ extensions/vertico-mouse.el | 1 + extensions/vertico-multiform.el | 33 ++++++++++++++++++++------------- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index 29a60a1021..6314d23ac2 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -2,6 +2,12 @@ #+author: Daniel Mendler #+language: en +* Development + +- =vertico-multiform-mode=: Add context menu to change display mode. First enable + =vertico-multiform-mode= and =context-menu-mode=. The menu will appear with a + right click in the Vertico minibuffer. + * Version 2.2 (2025-05-26) - Guard Vertico hooks to automatically print stack traces in order to ease diff --git a/extensions/vertico-mouse.el b/extensions/vertico-mouse.el index b4218272b1..6a39e984de 100644 --- a/extensions/vertico-mouse.el +++ b/extensions/vertico-mouse.el @@ -56,6 +56,7 @@ (defvar-keymap vertico-mouse-map :doc "Additional keymap activated in mouse mode." "<mouse-1>" (vertico-mouse--click "RET") + "<mouse-2>" (vertico-mouse--click "TAB") "<mouse-3>" (vertico-mouse--click "TAB")) (fset 'vertico-mouse-map vertico-mouse-map) diff --git a/extensions/vertico-multiform.el b/extensions/vertico-multiform.el index 87d7f67ec7..6e62e098cb 100644 --- a/extensions/vertico-multiform.el +++ b/extensions/vertico-multiform.el @@ -146,14 +146,26 @@ The keys in LIST can be symbols or regexps." "Configure Vertico in various forms per command." :global t :group 'vertico (when (/= (recursion-depth) 0) - (warn "vertico-multiform must not be toggled from recursive minibuffers")) + (warn "Vertico multiform must not be toggled from recursive minibuffers")) (when vertico-multiform--stack - (warn "vertico-multiform state is inconsistent") + (warn "Vertico multiform state is inconsistent") (setq vertico-multiform--stack nil)) + (remove-hook 'context-menu-functions #'vertico-multiform--display-menu) (cl-callf2 rassq-delete-all vertico-multiform-map minor-mode-map-alist) (when vertico-multiform-mode + (add-hook 'context-menu-functions #'vertico-multiform--display-menu) (push `(vertico--input . ,vertico-multiform-map) minor-mode-map-alist))) +(defvar vertico-multiform--display-modes nil) +(defvar-local vertico-multiform--display-last nil) + +(defun vertico-multiform--display-menu (menu _event) + "Add Vertico display modes to MENU." + (when vertico--input + (define-key menu [vertico-multiform--display-menu] + `(menu-item "Vertico Display" ,vertico-multiform-map))) + menu) + (cl-defmethod vertico--advice (&context (vertico-multiform-mode (eql t)) &rest app) (unwind-protect (progn @@ -183,9 +195,6 @@ 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 nil) -(defvar-local vertico-multiform--display-last nil) - (defun vertico-multiform-vertical (&optional mode) "Toggle to display MODE temporarily in minibuffer. MODE defaults to the vertical display." @@ -201,13 +210,10 @@ MODE defaults to the vertical display." (vertico-multiform--temporary-mode mode 1)) (setq vertico-multiform--display-last last))) -(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)))) +;; unobtrusive must come after flat +(dolist (name '(buffer flat grid reverse unobtrusive vertical)) + (let ((toggle (intern (format "vertico-multiform-%s" name))) + (label (capitalize (symbol-name name)))) (unless (eq name 'vertical) (let ((mode (intern (format "vertico-%s-mode" name)))) (defalias toggle @@ -215,7 +221,8 @@ MODE defaults to the vertical display." (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))) + (define-key vertico-multiform-map (vector toggle) (cons label toggle)) + (keymap-set vertico-multiform-map (format "M-%c" (aref label 0)) toggle))) (provide 'vertico-multiform) ;;; vertico-multiform.el ends here