From be74714fd465383f5fcdf0f1951413c201e6628d Mon Sep 17 00:00:00 2001 From: Oleh Krehel Date: Mon, 18 May 2015 20:38:20 +0200 Subject: [PATCH] avy.el (avy--overlay-at-full): Work-around 20607 * avy.el (avy--overlay-at-full): There's a problem when there are two overlays at the same point in the same buffer, but in different windows, *only if* they are of different length. Make them the same length to work-around this bug. See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20607 Fixes #47 --- avy.el | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/avy.el b/avy.el index da5f537..423d5d2 100644 --- a/avy.el +++ b/avy.el @@ -466,6 +466,21 @@ LEAF is normally ((BEG . END) . WND)." (line-end-position)))) (setq str (substring str 0 1)) (setq len 1)) + (let ((other-ov (cl-find-if + (lambda (o) + (and (eq (overlay-get o 'category) 'avy) + (eq (overlay-start o) beg) + (not (eq (overlay-get o 'window) wnd)))) + (overlays-in (point) (min (+ (point) len) + (line-end-position)))))) + (when (and other-ov + (> (overlay-end other-ov) + (+ beg len))) + (setq str (concat str (buffer-substring + (+ beg len) + (overlay-end other-ov)))) + (setq len (- (overlay-end other-ov) + beg)))) (let* ((end (if (= beg (line-end-position)) (1+ beg) (min (+ beg