[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 2313410 42/78: Optimize avy-goto-char-timer
From: |
Oleh Krehel |
Subject: |
[elpa] master 2313410 42/78: Optimize avy-goto-char-timer |
Date: |
Sat, 23 Jan 2016 13:59:59 +0000 |
branch: master
commit 2313410bd78e611f750acfd576a8dc0a939dd9bf
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>
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
---
avy.el | 49 +++++++++++++++++++++++++++----------------------
1 files changed, 27 insertions(+), 22 deletions(-)
diff --git a/avy.el b/avy.el
index 8296def..b1c9326 100644
--- a/avy.el
+++ b/avy.el
@@ -1093,24 +1093,27 @@ ARG lines can be used."
(defcustom avy-timeout-seconds 0.5
"How many seconds to wait for the second char.")
-(defun avy--read-string-timer ()
- "Read as many chars as possible and return them as string.
+(defun avy--read-candidates ()
+ "Read as many chars as possible and return their occurences.
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'
deletes the last char entered, and `RET' exits with the currently
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)
(unwind-protect
(progn
(while (and (not break)
- (setq char (read-char (format "char%s: "
- (if (string= str "")
- str
- (format " (%s)" str)))
- t
- (and (not (string= str ""))
- avy-timeout-seconds))))
+ (setq char
+ (read-char (format "char%s: "
+ (if (string= str "")
+ str
+ (format " (%s)" str)))
+ t
+ (and (not (string= str ""))
+ avy-timeout-seconds))))
;; Unhighlight
(dolist (ov overlays)
(delete-overlay ov))
@@ -1140,11 +1143,17 @@ read string immediately instead of waiting for another
char for
(setq regex (regexp-quote str))
(while (re-search-forward regex (cdr pair) t)
(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)
(overlay-put ov 'window (selected-window))
(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)
(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.
The window scope is determined by `avy-all-windows' (ARG negates it)."
(interactive "P")
- (let ((str
- (let ((avy-all-windows
- (if arg
- (not avy-all-windows)
- avy-all-windows)))
- (avy--read-string-timer))))
+ (let ((avy-all-windows (if arg
+ (not avy-all-windows)
+ avy-all-windows)))
(avy-with avy-goto-char-timer
- (avy--generic-jump
- (regexp-quote str)
- arg
- avy-style))))
+ (avy--process
+ (avy--read-candidates)
+ (avy--style-fn avy-style)))))
(defvar avy-ring (make-ring 20)
"Hold the window and point history.")
- [elpa] master 248bff0 37/78: avy.el (avy--regex-candidates): Simplify, (continued)
- [elpa] master 248bff0 37/78: avy.el (avy--regex-candidates): Simplify, Oleh Krehel, 2016/01/23
- [elpa] master d439b9d 34/78: avy.el (avy--overlay-at-full): Avoid negative length, Oleh Krehel, 2016/01/23
- [elpa] master 70bd6ce 36/78: Search only in the visible region, Oleh Krehel, 2016/01/23
- [elpa] master f7ddd4b 39/78: Fix jumping to the last char of a folded Org outline, Oleh Krehel, 2016/01/23
- [elpa] master 528125e 40/78: avy.el (avy--process): Add window to candidates if not present, Oleh Krehel, 2016/01/23
- [elpa] master df181f1 44/78: avy.el (avy--read-candidates): Use avy-window-list, Oleh Krehel, 2016/01/23
- [elpa] master 964664c 45/78: Fix jumping to the last char of a folded Org outline, Oleh Krehel, 2016/01/23
- [elpa] master 0a18a45 43/78: avy.el (avy--read-candidates): Fix reverse order, Oleh Krehel, 2016/01/23
- [elpa] master 513c429 41/78: Make avy-goto-char-timer faster for org-mode, Oleh Krehel, 2016/01/23
- [elpa] master f28d238 46/78: Fix for combined org-indent-mode and visual-line-mode, Oleh Krehel, 2016/01/23
- [elpa] master 2313410 42/78: Optimize avy-goto-char-timer,
Oleh Krehel <=
- [elpa] master 0166808 47/78: Beep when there are no matches, Oleh Krehel, 2016/01/23
- [elpa] master 2d07a49 50/78: Make avy--overlay-at use avy--overlay, Oleh Krehel, 2016/01/23
- [elpa] master cf36a59 48/78: avy.el (avy--old-str): New defun., Oleh Krehel, 2016/01/23
- [elpa] master 3257d81 49/78: Add avy-candidate-* helper functions, Oleh Krehel, 2016/01/23
- [elpa] master 13377d9 51/78: avy.el (avy--update-offset-and-str): Split from avy--overlay-at-full, Oleh Krehel, 2016/01/23
- [elpa] master d4b693f 52/78: avy.el (avy--overlay): Take BEG END, instead of only BEG, Oleh Krehel, 2016/01/23
- [elpa] master 567570a 54/78: Fix 'at-full moving text when visual-line-mode is on, Oleh Krehel, 2016/01/23
- [elpa] master 0756c0b 53/78: avy.el (avy--overlay-at-full): Use avy--overlay, Oleh Krehel, 2016/01/23
- [elpa] master 1b78fb0 57/78: Improve the faces for the last change, Oleh Krehel, 2016/01/23
- [elpa] master dddce37 55/78: Fix 'at-full moving text for chars near end of visual line, Oleh Krehel, 2016/01/23