branch: master
commit 567570af41c343b8a0e80308016de1be884cf9a2
Author: Oleh Krehel <[email protected]>
Commit: Oleh Krehel <[email protected]>
Fix 'at-full moving text when visual-line-mode is on
* avy.el (avy--overlay-at-full): Compute line-end-position according to
`visual-line-mode'.
(avy--update-offset-and-str): Add one more arg.
Note that `visual-line-mode' is actually extremely slow. If you have a
lot of candidates, you'll get a perceptible slowdown.
---
avy.el | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/avy.el b/avy.el
index 1afba66..32fd3c6 100644
--- a/avy.el
+++ b/avy.el
@@ -741,16 +741,21 @@ LEAF is normally ((BEG . END) . WND)."
(with-selected-window wnd
(save-excursion
(goto-char beg)
- (let ((len-and-str (avy--update-offset-and-str len str)))
+ (let* ((lep (if (bound-and-true-p visual-line-mode)
+ (save-excursion
+ (end-of-visual-line)
+ (point))
+ (line-end-position)))
+ (len-and-str (avy--update-offset-and-str len str lep)))
(setq len (car len-and-str))
(setq str (cdr len-and-str))
- (setq end (if (= beg (line-end-position))
+ (setq end (if (= beg lep)
(1+ beg)
(min (+ beg
(if (eq (char-after) ?\t)
1
len))
- (line-end-position)))))))
+ lep))))))
(avy--overlay
str beg end wnd
(lambda (str old-str)
@@ -782,11 +787,12 @@ LEAF is normally ((BEG . END) . WND)."
(avy-candidate-end leaf) nil
(avy-candidate-wnd leaf))))
-(defun avy--update-offset-and-str (offset str)
+(defun avy--update-offset-and-str (offset str lep)
"Recalculate the length of the new overlay at point.
OFFSET is the previous overlay length.
STR is the overlay string that we wish to add.
+LEP is the line end position.
We want to add an overlay between point and END=point+OFFSET.
When other overlays already exist between point and END, set
@@ -802,8 +808,7 @@ exist."
(and (eq (overlay-get o 'category) 'avy)
(eq (overlay-get o 'window) wnd)
(overlay-start o)))
- (overlays-in beg (min (+ beg offset)
- (line-end-position)))))))
+ (overlays-in beg (min (+ beg offset) lep))))))
(when oov
(setq offset (- (apply #'min oov) beg))
(setq str (substring str 0 offset)))
@@ -812,8 +817,7 @@ exist."
(and (eq (overlay-get o 'category) 'avy)
(eq (overlay-start o) beg)
(not (eq (overlay-get o 'window) wnd))))
- (overlays-in (point) (min (+ (point) offset)
- (line-end-position))))))
+ (overlays-in (point) (min (+ (point) offset) lep)))))
(when (and other-ov
(> (overlay-end other-ov)
(+ beg offset)))