emacs-elpa-diffs
[Top][All Lists]
Advanced

[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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]