mirror of
https://github.com/abo-abo/avy.git
synced 2025-10-13 05:23:05 +00:00
parent
aa35412375
commit
509471bad0
29
avy.el
29
avy.el
@ -2028,6 +2028,9 @@ newline."
|
|||||||
"Whether enter exits avy-goto-char-timer early. If nil it matches newline"
|
"Whether enter exits avy-goto-char-timer early. If nil it matches newline"
|
||||||
:type 'boolean)
|
:type 'boolean)
|
||||||
|
|
||||||
|
(defvar avy-text ""
|
||||||
|
"Store the input read by `avy--read-candidates'.")
|
||||||
|
|
||||||
(defun avy--read-candidates (&optional re-builder)
|
(defun avy--read-candidates (&optional re-builder)
|
||||||
"Read as many chars as possible and return their occurrences.
|
"Read as many chars as possible and return their occurrences.
|
||||||
At least one char must be read, and then repeatedly one next char
|
At least one char must be read, and then repeatedly one next char
|
||||||
@ -2041,8 +2044,8 @@ RE-BUILDER is a function that takes a string and returns a regex.
|
|||||||
When nil, `regexp-quote' is used.
|
When nil, `regexp-quote' is used.
|
||||||
If a group is captured, the first group is highlighted.
|
If a group is captured, the first group is highlighted.
|
||||||
Otherwise, the whole regex is highlighted."
|
Otherwise, the whole regex is highlighted."
|
||||||
(let ((str "")
|
(setq avy-text "")
|
||||||
(re-builder (or re-builder #'regexp-quote))
|
(let ((re-builder (or re-builder #'regexp-quote))
|
||||||
char break overlays regex)
|
char break overlays regex)
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
(progn
|
(progn
|
||||||
@ -2052,11 +2055,11 @@ Otherwise, the whole regex is highlighted."
|
|||||||
(setq char
|
(setq char
|
||||||
(read-char (format "%d char%s: "
|
(read-char (format "%d char%s: "
|
||||||
(length overlays)
|
(length overlays)
|
||||||
(if (string= str "")
|
(if (string= avy-text "")
|
||||||
str
|
avy-text
|
||||||
(format " (%s)" str)))
|
(format " (%s)" avy-text)))
|
||||||
t
|
t
|
||||||
(and (not (string= str ""))
|
(and (not (string= avy-text ""))
|
||||||
avy-timeout-seconds))))
|
avy-timeout-seconds))))
|
||||||
;; Unhighlight
|
;; Unhighlight
|
||||||
(dolist (ov overlays)
|
(dolist (ov overlays)
|
||||||
@ -2067,21 +2070,21 @@ Otherwise, the whole regex is highlighted."
|
|||||||
((= char 13)
|
((= char 13)
|
||||||
(if avy-enter-times-out
|
(if avy-enter-times-out
|
||||||
(setq break t)
|
(setq break t)
|
||||||
(setq str (concat str (list ?\n)))))
|
(setq avy-text (concat avy-text (list ?\n)))))
|
||||||
;; Handle C-h, DEL
|
;; Handle C-h, DEL
|
||||||
((memq char avy-del-last-char-by)
|
((memq char avy-del-last-char-by)
|
||||||
(let ((l (length str)))
|
(let ((l (length avy-text)))
|
||||||
(when (>= l 1)
|
(when (>= l 1)
|
||||||
(setq str (substring str 0 (1- l))))))
|
(setq avy-text (substring avy-text 0 (1- l))))))
|
||||||
;; Handle ESC
|
;; Handle ESC
|
||||||
((= char 27)
|
((= char 27)
|
||||||
(keyboard-quit))
|
(keyboard-quit))
|
||||||
(t
|
(t
|
||||||
(setq str (concat str (list char)))))
|
(setq avy-text (concat avy-text (list char)))))
|
||||||
;; Highlight
|
;; Highlight
|
||||||
(when (>= (length str) 1)
|
(when (>= (length avy-text) 1)
|
||||||
(let ((case-fold-search
|
(let ((case-fold-search
|
||||||
(or avy-case-fold-search (string= str (downcase str))))
|
(or avy-case-fold-search (string= avy-text (downcase avy-text))))
|
||||||
found)
|
found)
|
||||||
(avy-dowindows current-prefix-arg
|
(avy-dowindows current-prefix-arg
|
||||||
(dolist (pair (avy--find-visible-regions
|
(dolist (pair (avy--find-visible-regions
|
||||||
@ -2089,7 +2092,7 @@ Otherwise, the whole regex is highlighted."
|
|||||||
(window-end (selected-window) t)))
|
(window-end (selected-window) t)))
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(goto-char (car pair))
|
(goto-char (car pair))
|
||||||
(setq regex (funcall re-builder str))
|
(setq regex (funcall re-builder avy-text))
|
||||||
(while (re-search-forward regex (cdr pair) t)
|
(while (re-search-forward regex (cdr pair) t)
|
||||||
(unless (not (avy--visible-p (1- (point))))
|
(unless (not (avy--visible-p (1- (point))))
|
||||||
(let* ((idx (if (= (length (match-data)) 4) 1 0))
|
(let* ((idx (if (= (length (match-data)) 4) 1 0))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user