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
|
(with-selected-window wnd
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(goto-char beg)
|
(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 len (car len-and-str))
|
||||||
(setq str (cdr len-and-str))
|
(setq str (cdr len-and-str))
|
||||||
(setq end (if (= beg (line-end-position))
|
(setq end (if (= beg lep)
|
||||||
(1+ beg)
|
(1+ beg)
|
||||||
(min (+ beg
|
(min (+ beg
|
||||||
(if (eq (char-after) ?\t)
|
(if (eq (char-after) ?\t)
|
||||||
1
|
1
|
||||||
len))
|
len))
|
||||||
(line-end-position)))))))
|
lep))))))
|
||||||
(avy--overlay
|
(avy--overlay
|
||||||
str beg end wnd
|
str beg end wnd
|
||||||
(lambda (str old-str)
|
(lambda (str old-str)
|
||||||
@ -782,11 +787,12 @@ LEAF is normally ((BEG . END) . WND)."
|
|||||||
(avy-candidate-end leaf) nil
|
(avy-candidate-end leaf) nil
|
||||||
(avy-candidate-wnd leaf))))
|
(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.
|
"Recalculate the length of the new overlay at point.
|
||||||
|
|
||||||
OFFSET is the previous overlay length.
|
OFFSET is the previous overlay length.
|
||||||
STR is the overlay string that we wish to add.
|
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.
|
We want to add an overlay between point and END=point+OFFSET.
|
||||||
When other overlays already exist between point and END, set
|
When other overlays already exist between point and END, set
|
||||||
@ -802,8 +808,7 @@ exist."
|
|||||||
(and (eq (overlay-get o 'category) 'avy)
|
(and (eq (overlay-get o 'category) 'avy)
|
||||||
(eq (overlay-get o 'window) wnd)
|
(eq (overlay-get o 'window) wnd)
|
||||||
(overlay-start o)))
|
(overlay-start o)))
|
||||||
(overlays-in beg (min (+ beg offset)
|
(overlays-in beg (min (+ beg offset) lep))))))
|
||||||
(line-end-position)))))))
|
|
||||||
(when oov
|
(when oov
|
||||||
(setq offset (- (apply #'min oov) beg))
|
(setq offset (- (apply #'min oov) beg))
|
||||||
(setq str (substring str 0 offset)))
|
(setq str (substring str 0 offset)))
|
||||||
@ -812,8 +817,7 @@ exist."
|
|||||||
(and (eq (overlay-get o 'category) 'avy)
|
(and (eq (overlay-get o 'category) 'avy)
|
||||||
(eq (overlay-start o) beg)
|
(eq (overlay-start o) beg)
|
||||||
(not (eq (overlay-get o 'window) wnd))))
|
(not (eq (overlay-get o 'window) wnd))))
|
||||||
(overlays-in (point) (min (+ (point) offset)
|
(overlays-in (point) (min (+ (point) offset) lep)))))
|
||||||
(line-end-position))))))
|
|
||||||
(when (and other-ov
|
(when (and other-ov
|
||||||
(> (overlay-end other-ov)
|
(> (overlay-end other-ov)
|
||||||
(+ beg offset)))
|
(+ beg offset)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user