mirror of
https://github.com/abo-abo/avy.git
synced 2025-10-14 05:43:04 +00:00
avy.el (avy-next): New command to go to the next candidate after avy-read
Example config: (defhydra hydra-avy-cycle () ("j" avy-next "next") ("k" avy-prev "prev") ("q" nil "quit")) (global-set-key (kbd "C-M-'") 'hydra-avy-cycle/body) After e.g. `avy-goto-char' or `avy-goto-char-timer', use the above hydra to cycle between the last candidates. Fixes #254
This commit is contained in:
parent
74501e1235
commit
5b3676f1a4
35
avy.el
35
avy.el
@ -787,6 +787,40 @@ Set `avy-style' according to COMMMAND as well."
|
|||||||
#'avy--remove-leading-chars))))
|
#'avy--remove-leading-chars))))
|
||||||
(avy--done))))))
|
(avy--done))))))
|
||||||
|
|
||||||
|
(defvar avy-last-candidates nil
|
||||||
|
"Store the last candidate list.")
|
||||||
|
|
||||||
|
(defun avy--last-candidates-cycle (advancer)
|
||||||
|
(let* ((avy-last-candidates
|
||||||
|
(cl-remove-if-not
|
||||||
|
(lambda (x) (equal (cdr x) (selected-window)))
|
||||||
|
avy-last-candidates))
|
||||||
|
(min-dist
|
||||||
|
(apply #'min
|
||||||
|
(mapcar (lambda (x) (abs (- (caar x) (point)))) avy-last-candidates)))
|
||||||
|
(pos
|
||||||
|
(cl-position-if
|
||||||
|
(lambda (x)
|
||||||
|
(= (- (caar x) (point)) min-dist))
|
||||||
|
avy-last-candidates)))
|
||||||
|
(funcall advancer pos avy-last-candidates)))
|
||||||
|
|
||||||
|
(defun avy-prev ()
|
||||||
|
"Go to the previous candidate of the last `avy-read'."
|
||||||
|
(interactive)
|
||||||
|
(avy--last-candidates-cycle
|
||||||
|
(lambda (pos lst)
|
||||||
|
(when (> pos 0)
|
||||||
|
(goto-char (caar (nth (1- pos) lst)))))))
|
||||||
|
|
||||||
|
(defun avy-next ()
|
||||||
|
"Go to the next candidate of the last `avy-read'."
|
||||||
|
(interactive)
|
||||||
|
(avy--last-candidates-cycle
|
||||||
|
(lambda (pos lst)
|
||||||
|
(when (< pos (1- (length lst)))
|
||||||
|
(goto-char (caar (nth (1+ pos) lst)))))))
|
||||||
|
|
||||||
(defun avy--process (candidates &optional overlay-fn)
|
(defun avy--process (candidates &optional overlay-fn)
|
||||||
"Select one of CANDIDATES using `avy-read'.
|
"Select one of CANDIDATES using `avy-read'.
|
||||||
Use OVERLAY-FN to visualize the decision overlay."
|
Use OVERLAY-FN to visualize the decision overlay."
|
||||||
@ -796,6 +830,7 @@ Use OVERLAY-FN to visualize the decision overlay."
|
|||||||
(setq candidates
|
(setq candidates
|
||||||
(mapcar (lambda (x) (cons x (selected-window)))
|
(mapcar (lambda (x) (cons x (selected-window)))
|
||||||
candidates)))
|
candidates)))
|
||||||
|
(setq avy-last-candidates (copy-sequence candidates))
|
||||||
(let ((original-cands (copy-sequence candidates))
|
(let ((original-cands (copy-sequence candidates))
|
||||||
(res (avy--process-1 candidates overlay-fn)))
|
(res (avy--process-1 candidates overlay-fn)))
|
||||||
(cond
|
(cond
|
||||||
|
Loading…
x
Reference in New Issue
Block a user