branch: externals/vertico commit 35edcd7de4f9c995e2d8fa92035677a897d04ca0 Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
Add vertico-indexed extension --- README.org | 1 + extensions/vertico-indexed.el | 73 +++++++++++++++++++++++++++++++++++++++++++ extensions/vertico-quick.el | 4 +-- 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/README.org b/README.org index 8fe0bf3..ed8773c 100644 --- a/README.org +++ b/README.org @@ -156,6 +156,7 @@ - [[https://github.com/minad/vertico/blob/main/extensions/vertico-buffer.el][vertico-buffer.el]]: Enable =vertico-buffer-mode= to display Vertico in a separate buffer - [[https://github.com/minad/vertico/blob/main/extensions/vertico-directory.el][vertico-directory.el]]: Commands for Ido-like directory navigation - [[https://github.com/minad/vertico/blob/main/extensions/vertico-flat.el][vertico-flat.el]]: Enable =vertico-flat-mode= to enable a flat, horizontal display + - [[https://github.com/minad/vertico/blob/main/extensions/vertico-indexed.el][vertico-indexed.el]]: Select indexed candidates with prefix arguments - [[https://github.com/minad/vertico/blob/main/extensions/vertico-quick.el][vertico-quick.el]]: Select using Avy-style quick keys - [[https://github.com/minad/vertico/blob/main/extensions/vertico-repeat.el][vertico-repeat.el]]: The command =vertico-repeat= repeats the last completion session - [[https://github.com/minad/vertico/blob/main/extensions/vertico-reverse.el][vertico-reverse.el]]: Enable =vertico-reverse-mode= to reverse the display diff --git a/extensions/vertico-indexed.el b/extensions/vertico-indexed.el new file mode 100644 index 0000000..cbd8298 --- /dev/null +++ b/extensions/vertico-indexed.el @@ -0,0 +1,73 @@ +;;; vertico-indexed.el --- Select indexed candidates -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Free Software Foundation, Inc. + +;; Author: Daniel Mendler <m...@daniel-mendler.de> +;; Maintainer: Daniel Mendler <m...@daniel-mendler.de> +;; Created: 2021 +;; Version: 0.1 +;; Package-Requires: ((emacs "27.1")) +;; Homepage: https://github.com/minad/vertico + +;; This file is part of GNU Emacs. + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This package is a Vertico extension, which prefixes candidates with +;; indices and allows selection using prefix arguments. + +;;; Code: + +(require 'vertico) + +(defface vertico-indexed + '((t :height 0.75 :inherit font-lock-comment-face)) + "Face used for the candidate index prefix." + :group 'vertico + :group 'faces) + +(defvar-local vertico-indexed--start 0) + +(defun vertico-indexed--format-candidate (orig cand prefix suffix index start) + "Format candidate, see `vertico--format-candidate' for arguments." + (setq-local vertico-indexed--start start) + (funcall orig cand + (concat (propertize (format "%-2s " (- index start)) + 'face 'vertico-indexed) + prefix) + suffix index start)) + +(defun vertico-indexed--goto () + "Goto candidate given by `current-prefix-arg'." + (when current-prefix-arg + (vertico--goto (+ vertico-indexed--start (prefix-numeric-value current-prefix-arg))))) + +;;;###autoload +(define-minor-mode vertico-indexed-mode + "Prefix candidates with indices." + :global t + (cond + (vertico-indexed-mode + (advice-add #'vertico--format-candidate :around #'vertico-indexed--format-candidate) + (advice-add #'vertico-insert :before #'vertico-indexed--goto) + (advice-add #'vertico-exit :before #'vertico-indexed--goto)) + (t + (advice-remove #'vertico--format-candidate #'vertico-indexed--format-candidate) + (advice-remove #'vertico-insert #'vertico-indexed--goto) + (advice-remove #'vertico-exit #'vertico-indexed--goto)))) + +(provide 'vertico-indexed) +;;; vertico-indexed.el ends here diff --git a/extensions/vertico-quick.el b/extensions/vertico-quick.el index a1ec63c..2d9e7a5 100644 --- a/extensions/vertico-quick.el +++ b/extensions/vertico-quick.el @@ -36,13 +36,13 @@ (defface vertico-quick1 '((t :weight bold :background "#d5baff" :foreground "black")) - "First quick key." + "Face used for the first quick key." :group 'vertico :group 'faces) (defface vertico-quick2 '((t :weight bold :background "#8ae4f2" :foreground "black")) - "Second quick key." + "Face used for the second quick key." :group 'vertico :group 'faces)