branch: master commit 70e384aee57fecc9ac58bb99a7de192d16b28733 Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
avy.el (avy--process-1): Extract --- avy.el | 89 +++++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/avy.el b/avy.el index 8dd73e2..df4ad49 100644 --- a/avy.el +++ b/avy.el @@ -725,6 +725,29 @@ Set `avy-style' according to COMMMAND as well." (when (looking-at-p "\\b") (ispell-word))))))) +(defun avy--process-1 (candidates overlay-fn) + (let ((len (length candidates))) + (cond ((= len 0) + nil) + ((= len 1) + (car candidates)) + (t + (unwind-protect + (progn + (avy--make-backgrounds + (avy-window-list)) + (cond ((eq avy-style 'de-bruijn) + (avy-read-de-bruijn + candidates avy-keys)) + ((eq avy-style 'words) + (avy-read-words + candidates avy-words)) + (t + (avy-read (avy-tree candidates avy-keys) + overlay-fn + #'avy--remove-leading-chars)))) + (avy--done)))))) + (defun avy--process (candidates overlay-fn) "Select one of CANDIDATES using `avy-read'. Use OVERLAY-FN to visualize the decision overlay." @@ -733,48 +756,30 @@ Use OVERLAY-FN to visualize the decision overlay." (setq candidates (mapcar (lambda (x) (cons x (selected-window))) candidates))) - (let ((len (length candidates)) - res) - (if (= len 0) - (progn - (message "zero candidates") - t) - (if (= len 1) - (setq res (car candidates)) - (unwind-protect - (progn - (avy--make-backgrounds - (avy-window-list)) - (setq res (cond ((eq avy-style 'de-bruijn) - (avy-read-de-bruijn - candidates avy-keys)) - ((eq avy-style 'words) - (avy-read-words - candidates avy-words)) - (t - (avy-read (avy-tree candidates avy-keys) - overlay-fn - #'avy--remove-leading-chars))))) - (avy--done))) - (cond ((eq res 'restart) - (avy--process candidates overlay-fn)) - ;; ignore exit from `avy-handler-function' - ((eq res 'exit)) - (t - (avy-push-mark) - (when (and (consp res) - (windowp (cdr res))) - (let* ((window (cdr res)) - (frame (window-frame window))) - (unless (equal frame (selected-frame)) - (select-frame-set-input-focus frame)) - (select-window window)) - (setq res (car res))) - - (funcall (or avy-action 'avy-action-goto) - (if (consp res) - (car res) - res))))))) + (let ((res (avy--process-1 candidates overlay-fn))) + (cond + ((null res) + (message "zero candidates") + t) + ((eq res 'restart) + (avy--process candidates overlay-fn)) + ;; ignore exit from `avy-handler-function' + ((eq res 'exit)) + (t + (avy-push-mark) + (when (and (consp res) + (windowp (cdr res))) + (let* ((window (cdr res)) + (frame (window-frame window))) + (unless (equal frame (selected-frame)) + (select-frame-set-input-focus frame)) + (select-window window)) + (setq res (car res))) + + (funcall (or avy-action 'avy-action-goto) + (if (consp res) + (car res) + res)))))) (defvar avy--overlays-back nil "Hold overlays for when `avy-background' is t.")