[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/vertico 8232ad2 1/3: Add vertico-next/previous-group (F
From: |
ELPA Syncer |
Subject: |
[elpa] externals/vertico 8232ad2 1/3: Add vertico-next/previous-group (Fix #47) |
Date: |
Sat, 29 May 2021 16:57:18 -0400 (EDT) |
branch: externals/vertico
commit 8232ad29cf99d1bb93fcad9658e89636c3d2e0a7
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Add vertico-next/previous-group (Fix #47)
Bound to forward/backward-paragraph
---
vertico.el | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/vertico.el b/vertico.el
index d5d7516..19f3019 100644
--- a/vertico.el
+++ b/vertico.el
@@ -96,6 +96,8 @@
(define-key map [remap previous-line] #'vertico-previous)
(define-key map [remap next-line-or-history-element] #'vertico-next)
(define-key map [remap previous-line-or-history-element]
#'vertico-previous)
+ (define-key map [remap backward-paragraph] #'vertico-previous-group)
+ (define-key map [remap forward-paragraph] #'vertico-next-group)
(define-key map [remap exit-minibuffer] #'vertico-exit)
(define-key map [remap kill-ring-save] #'vertico-save)
(define-key map [C-return] #'vertico-exit-input)
@@ -559,6 +561,32 @@
(exit-minibuffer)
(message "Match required"))))
+(defun vertico--goto-group (next)
+ "Move to next group if NEXT is non-nil, otherwise move to previous group."
+ (let* ((end (minibuffer-prompt-end))
+ (metadata (completion-metadata (buffer-substring end (max end
(point)))
+ minibuffer-completion-table
+ minibuffer-completion-predicate))
+ (group-fun (or (completion-metadata-get metadata 'group-function)
#'ignore))
+ (orig-index vertico--index))
+ (while (let ((last-index vertico--index))
+ (if next (vertico-next) (vertico-previous))
+ (if (or (= vertico--index orig-index) (= vertico--index
last-index))
+ (and (vertico--goto orig-index) nil)
+ (and (> vertico--index 0)
+ (equal (funcall group-fun (nth (1- vertico--index)
vertico--candidates) nil)
+ (funcall group-fun (nth vertico--index
vertico--candidates) nil))))))))
+
+(defun vertico-next-group ()
+ "Move to next group."
+ (interactive)
+ (vertico--goto-group 'next))
+
+(defun vertico-previous-group ()
+ "Move to previous group."
+ (interactive)
+ (vertico--goto-group nil))
+
(defun vertico-exit-input ()
"Exit minibuffer with input."
(interactive)