[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 13377d9 51/78: avy.el (avy--update-offset-and-str): Split
From: |
Oleh Krehel |
Subject: |
[elpa] master 13377d9 51/78: avy.el (avy--update-offset-and-str): Split from avy--overlay-at-full |
Date: |
Sat, 23 Jan 2016 14:00:10 +0000 |
branch: master
commit 13377d92b2d6e47200ef17101a718e687717b2e3
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>
avy.el (avy--update-offset-and-str): Split from avy--overlay-at-full
* avy.el (avy--update-offset-and-str): New defun.
(avy--overlay-at-full): Update.
---
avy.el | 76 +++++++++++++++++++++++++++++++++++++++------------------------
1 files changed, 47 insertions(+), 29 deletions(-)
diff --git a/avy.el b/avy.el
index c321482..ac862d9 100644
--- a/avy.el
+++ b/avy.el
@@ -725,8 +725,7 @@ LEAF is normally ((BEG . END) . WND)."
'face 'avy-lead-face))
(len (length path))
(beg (avy-candidate-beg leaf))
- (wnd (cdr leaf))
- oov)
+ (wnd (cdr leaf)))
(dotimes (i len)
(set-text-properties (- len i 1) (- len i)
`(face ,(nth i avy-lead-faces))
@@ -740,33 +739,10 @@ LEAF is normally ((BEG . END) . WND)."
(with-selected-window wnd
(save-excursion
(goto-char beg)
- (when (setq oov
- (delq nil
- (mapcar
- (lambda (o)
- (and (eq (overlay-get o 'category) 'avy)
- (eq (overlay-get o 'window) wnd)
- (overlay-start o)))
- (overlays-in (point) (min (+ (point) len)
- (line-end-position))))))
- (setq len (- (apply #'min oov) beg))
- (setq str (substring str 0 len)))
- (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))
+ (let* ((len-and-str (avy--update-offset-and-str len str))
+ (len (car len-and-str))
+ (str (cdr len-and-str))
+ (end (if (= beg (line-end-position))
(1+ beg)
(min (+ beg
(if (eq (char-after) ?\t)
@@ -809,6 +785,48 @@ LEAF is normally ((BEG . END) . WND)."
(avy-candidate-end leaf)
(avy-candidate-wnd leaf))))
+(defun avy--update-offset-and-str (offset str)
+ "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.
+
+We want to add an overlay between point and END=point+OFFSET.
+When other overlays already exist between point and END, set
+OFFSET to be the difference between the start of the first
+overlay and point. This is equivalent to truncating our new
+overlay, so that it doesn't intersect with overlays that already
+exist."
+ (let* ((wnd (selected-window))
+ (beg (point))
+ (oov (delq nil
+ (mapcar
+ (lambda (o)
+ (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)))))))
+ (when oov
+ (setq offset (- (apply #'min oov) beg))
+ (setq str (substring str 0 offset)))
+ (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) offset)
+ (line-end-position))))))
+ (when (and other-ov
+ (> (overlay-end other-ov)
+ (+ beg offset)))
+ (setq str (concat str (buffer-substring
+ (+ beg offset)
+ (overlay-end other-ov))))
+ (setq offset (- (overlay-end other-ov)
+ beg))))
+ (cons offset str)))
+
(defun avy--style-fn (style)
"Transform STYLE symbol to a style function."
(cl-case style
- [elpa] master df181f1 44/78: avy.el (avy--read-candidates): Use avy-window-list, (continued)
- [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, 2016/01/23
- [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 <=
- [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
- [elpa] master edf1259 58/78: avy.el (avy--read-candidates): Use avy-dowindows, Oleh Krehel, 2016/01/23
- [elpa] master 9ae4413 56/78: Fix overlays at end-of-line with visual-line-mode, Oleh Krehel, 2016/01/23
- [elpa] master f341c2f 59/78: avy.el (avy--find-visible-regions): Add bounds safety, Oleh Krehel, 2016/01/23
- [elpa] master a041429 62/78: avy.el (avy-copy-region): Obey avy-line-insert-style, Oleh Krehel, 2016/01/23
- [elpa] master 54074c7 65/78: avy.el (avy-all-windows-alt): New defcustom, Oleh Krehel, 2016/01/23