]> code.delx.au - gnu-emacs-elpa/blobdiff - packages/ace-window/avy-jump.el
Merge commit 'd592e36f33ac7e1fece462c5b7157f330c732630' from ace-window
[gnu-emacs-elpa] / packages / ace-window / avy-jump.el
index b83f7a8bd7aee6db3dafa46faf3473a252564e85..50c7fce03f6e3792d04d22bcd029e1cec55b743b 100644 (file)
@@ -75,9 +75,10 @@ POS is either a position or (BEG . END)."
                       #'aw--remove-leading-chars))))
     (aw--done)))
 
-(defun avi--regex-candidates (regex &optional wnd beg end)
+(defun avi--regex-candidates (regex &optional wnd beg end pred)
   "Return all elements that match REGEX in WND.
-Each element of the list is ((BEG . END) . WND)."
+Each element of the list is ((BEG . END) . WND)
+When PRED is non-nil, it's a filter for matching point positions."
   (setq wnd (or wnd (selected-window)))
   (let ((we (or end (window-end (selected-window) t)))
         candidates)
@@ -86,16 +87,22 @@ Each element of the list is ((BEG . END) . WND)."
       (save-excursion
         (goto-char (or beg (window-start)))
         (while (re-search-forward regex we t)
-          (push (cons (cons (match-beginning 0)
-                            (match-end 0))
-                      wnd) candidates)))
+          (when (or (null pred)
+                    (funcall pred))
+            (push (cons (cons (match-beginning 0)
+                              (match-end 0))
+                        wnd) candidates))))
       (nreverse candidates))))
 
+(defvar avi--overlay-offset 0
+  "The offset to apply in `avi--overlay'.")
+
 (defun avi--overlay (str pt wnd)
   "Create an overlay with STR at PT in WND."
-  (let ((ol (make-overlay pt (1+ pt) (window-buffer wnd)))
-        (old-str (with-selected-window wnd
-                   (buffer-substring pt (1+ pt)))))
+  (let* ((pt (+ pt avi--overlay-offset))
+         (ol (make-overlay pt (1+ pt) (window-buffer wnd)))
+         (old-str (with-selected-window wnd
+                    (buffer-substring pt (1+ pt)))))
     (when avi-background
       (setq old-str (propertize
                      old-str 'face 'aw-background-face)))
@@ -115,6 +122,28 @@ LEAF is ((BEG . END) . WND)."
      (car leaf))
    (cdr leaf)))
 
+(defun avi--overlay-at (path leaf)
+  "Create an overlay with STR at LEAF.
+PATH is a list of keys from tree root to LEAF.
+LEAF is ((BEG . END) . WND)."
+  (let ((str (propertize
+              (string (car (last path)))
+              'face 'avi-lead-face))
+        (pt (if (consp (car leaf))
+                (caar leaf)
+              (car leaf)))
+        (wnd (cdr leaf)))
+    (let ((ol (make-overlay pt (1+ pt)
+                            (window-buffer wnd)))
+          (old-str (with-selected-window wnd
+                     (buffer-substring pt (1+ pt)))))
+      (when avi-background
+        (setq old-str (propertize
+                       old-str 'face 'aw-background-face)))
+      (overlay-put ol 'window wnd)
+      (overlay-put ol 'display str)
+      (push ol aw-overlays-lead))))
+
 (defun avi--overlay-post (path leaf)
   "Create an overlay with STR at LEAF.
 PATH is a list of keys from tree root to LEAF.