mirror of
https://github.com/abo-abo/avy.git
synced 2025-10-13 21:33:05 +00:00
Optimize avy-goto-char-timer
Previously, the candidate list would be generated twice: by `avy--read-string-timer' and by `avy--generic-jump'. * avy.el (avy--read-string-timer): Rename to `avy--read-candidates'. (avy--read-candidates): Return the list of candidates instead of a string which the candidates match. (avy-goto-char-timer): Update. Re #100
This commit is contained in:
parent
513c42991c
commit
2313410bd7
33
avy.el
33
avy.el
@ -1093,18 +1093,21 @@ ARG lines can be used."
|
|||||||
(defcustom avy-timeout-seconds 0.5
|
(defcustom avy-timeout-seconds 0.5
|
||||||
"How many seconds to wait for the second char.")
|
"How many seconds to wait for the second char.")
|
||||||
|
|
||||||
(defun avy--read-string-timer ()
|
(defun avy--read-candidates ()
|
||||||
"Read as many chars as possible and return them as string.
|
"Read as many chars as possible and return their occurences.
|
||||||
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
|
||||||
may be read if it is entered before `avy-timeout-seconds'. `DEL'
|
may be read if it is entered before `avy-timeout-seconds'. `DEL'
|
||||||
deletes the last char entered, and `RET' exits with the currently
|
deletes the last char entered, and `RET' exits with the currently
|
||||||
read string immediately instead of waiting for another char for
|
read string immediately instead of waiting for another char for
|
||||||
`avy-timeout-seconds'."
|
`avy-timeout-seconds'.
|
||||||
|
The format of the result is the same as that of `avy--regex-candidates'.
|
||||||
|
This function obeys `avy-all-windows' setting."
|
||||||
(let ((str "") char break overlays regex)
|
(let ((str "") char break overlays regex)
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
(progn
|
(progn
|
||||||
(while (and (not break)
|
(while (and (not break)
|
||||||
(setq char (read-char (format "char%s: "
|
(setq char
|
||||||
|
(read-char (format "char%s: "
|
||||||
(if (string= str "")
|
(if (string= str "")
|
||||||
str
|
str
|
||||||
(format " (%s)" str)))
|
(format " (%s)" str)))
|
||||||
@ -1140,11 +1143,17 @@ read string immediately instead of waiting for another char for
|
|||||||
(setq regex (regexp-quote str))
|
(setq regex (regexp-quote str))
|
||||||
(while (re-search-forward regex (cdr pair) t)
|
(while (re-search-forward regex (cdr pair) t)
|
||||||
(unless (get-char-property (point) 'invisible)
|
(unless (get-char-property (point) 'invisible)
|
||||||
(let ((ov (make-overlay (match-beginning 0) (match-end 0))))
|
(let ((ov (make-overlay
|
||||||
|
(match-beginning 0)
|
||||||
|
(match-end 0))))
|
||||||
(push ov overlays)
|
(push ov overlays)
|
||||||
(overlay-put ov 'window (selected-window))
|
(overlay-put ov 'window (selected-window))
|
||||||
(overlay-put ov 'face 'avy-goto-char-timer-face))))))))))
|
(overlay-put ov 'face 'avy-goto-char-timer-face))))))))))
|
||||||
str)
|
(mapcar (lambda (ov)
|
||||||
|
(cons (cons (overlay-start ov)
|
||||||
|
(overlay-end ov))
|
||||||
|
(overlay-get ov 'window)))
|
||||||
|
overlays))
|
||||||
(dolist (ov overlays)
|
(dolist (ov overlays)
|
||||||
(delete-overlay ov)))))
|
(delete-overlay ov)))))
|
||||||
|
|
||||||
@ -1153,17 +1162,13 @@ read string immediately instead of waiting for another char for
|
|||||||
"Read one or many consecutive chars and jump to the first one.
|
"Read one or many consecutive chars and jump to the first one.
|
||||||
The window scope is determined by `avy-all-windows' (ARG negates it)."
|
The window scope is determined by `avy-all-windows' (ARG negates it)."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((str
|
(let ((avy-all-windows (if arg
|
||||||
(let ((avy-all-windows
|
|
||||||
(if arg
|
|
||||||
(not avy-all-windows)
|
(not avy-all-windows)
|
||||||
avy-all-windows)))
|
avy-all-windows)))
|
||||||
(avy--read-string-timer))))
|
|
||||||
(avy-with avy-goto-char-timer
|
(avy-with avy-goto-char-timer
|
||||||
(avy--generic-jump
|
(avy--process
|
||||||
(regexp-quote str)
|
(avy--read-candidates)
|
||||||
arg
|
(avy--style-fn avy-style)))))
|
||||||
avy-style))))
|
|
||||||
|
|
||||||
(defvar avy-ring (make-ring 20)
|
(defvar avy-ring (make-ring 20)
|
||||||
"Hold the window and point history.")
|
"Hold the window and point history.")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user