Change avy--process to accept cleanup function

Renamed to `avy-process' to indicate that it is used from another packages.

Fixes #255
Fixes #266
This commit is contained in:
Ivan Yonchovski 2019-02-17 09:10:27 +02:00 committed by Oleh Krehel
parent e80251056d
commit 8db2759adf

18
avy.el
View File

@ -764,7 +764,7 @@ Set `avy-style' according to COMMMAND as well."
(select-frame-set-input-focus frame)) (select-frame-set-input-focus frame))
(select-window window)))) (select-window window))))
(defun avy--process-1 (candidates overlay-fn) (defun avy--process-1 (candidates overlay-fn &optional cleanup-fn)
(let ((len (length candidates))) (let ((len (length candidates)))
(cond ((= len 0) (cond ((= len 0)
nil) nil)
@ -784,7 +784,7 @@ Set `avy-style' according to COMMMAND as well."
(t (t
(avy-read (avy-tree candidates avy-keys) (avy-read (avy-tree candidates avy-keys)
overlay-fn overlay-fn
#'avy--remove-leading-chars)))) (or cleanup-fn #'avy--remove-leading-chars)))))
(avy--done)))))) (avy--done))))))
(defvar avy-last-candidates nil (defvar avy-last-candidates nil
@ -821,10 +821,13 @@ Set `avy-style' according to COMMMAND as well."
(when (< pos (1- (length lst))) (when (< pos (1- (length lst)))
(goto-char (caar (nth (1+ pos) lst))))))) (goto-char (caar (nth (1+ pos) lst)))))))
(defun avy--process (candidates &optional overlay-fn) (defun avy-process (candidates &optional overlay-fn cleanup-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.
CLEANUP-FN should take no arguments and remove the effects of
multiple OVERLAY-FN invocations."
(setq overlay-fn (or overlay-fn (avy--style-fn avy-style))) (setq overlay-fn (or overlay-fn (avy--style-fn avy-style)))
(setq cleanup-fn (or cleanup-fn #'avy--remove-leading-chars))
(unless (and (consp (car candidates)) (unless (and (consp (car candidates))
(windowp (cdar candidates))) (windowp (cdar candidates)))
(setq candidates (setq candidates
@ -832,13 +835,13 @@ Use OVERLAY-FN to visualize the decision overlay."
candidates))) candidates)))
(setq avy-last-candidates (copy-sequence 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 cleanup-fn)))
(cond (cond
((null res) ((null res)
(message "zero candidates") (message "zero candidates")
t) t)
((eq res 'restart) ((eq res 'restart)
(avy--process original-cands overlay-fn)) (avy--process original-cands overlay-fn cleanup-fn))
;; ignore exit from `avy-handler-function' ;; ignore exit from `avy-handler-function'
((eq res 'exit)) ((eq res 'exit))
(t (t
@ -849,6 +852,9 @@ Use OVERLAY-FN to visualize the decision overlay."
(car res) (car res)
res)))))) res))))))
(define-obsolete-function-alias 'avy--process 'avy-process
"0.4.0")
(defvar avy--overlays-back nil (defvar avy--overlays-back nil
"Hold overlays for when `avy-background' is t.") "Hold overlays for when `avy-background' is t.")