mirror of
https://github.com/abo-abo/avy.git
synced 2025-10-13 21:33:05 +00:00
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.
This commit is contained in:
parent
0756c0b48a
commit
567570af41
20
avy.el
20
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)))
|
||||
|
Loading…
x
Reference in New Issue
Block a user