]> git.eshelyaron.com Git - emacs.git/commitdiff
Use overlay arrow to indicate current *xref* selection
authorMattias Engdegård <mattiase@acm.org>
Sat, 21 Aug 2021 10:38:40 +0000 (12:38 +0200)
committerMattias Engdegård <mattiase@acm.org>
Sat, 21 Aug 2021 10:41:54 +0000 (12:41 +0200)
* lisp/progmodes/xref.el (xref--set-arrow): New function.
(xref-show-location-at-point, xref-goto-xref)
(xref--next-error-function): Call it.
(xref--show-common-initialize): Remove arrow.

lisp/progmodes/xref.el

index a8bab47ea250d01ad18416d8d1c5b578f9e039c7..d004a0c32c5d85c854d48cc0c321ee270a44119c 100644 (file)
@@ -600,12 +600,19 @@ SELECT is `quit', also quit the *xref* window."
                   (xref--show-pos-in-buf marker buf))))))
     (user-error (message (error-message-string err)))))
 
+(defun xref--set-arrow ()
+  "Set the overlay arrow at the line at point."
+  (setq overlay-arrow-position
+        (set-marker (or overlay-arrow-position (make-marker))
+                    (line-beginning-position))))
+
 (defun xref-show-location-at-point ()
   "Display the source of xref at point in the appropriate window, if any."
   (interactive)
   (let* ((xref (xref--item-at-point))
          (xref--current-item xref))
     (when xref
+      (xref--set-arrow)
       (xref--show-location (xref-item-location xref)))))
 
 (defun xref-next-line-no-show ()
@@ -663,6 +670,7 @@ quit the *xref* buffer."
          (xref (or (xref--item-at-point)
                    (user-error "Choose a reference to visit")))
          (xref--current-item xref))
+    (xref--set-arrow)
     (xref--show-location (xref-item-location xref) (if quit 'quit t))
     (if (fboundp 'next-error-found)
         (next-error-found buffer (current-buffer))
@@ -881,6 +889,7 @@ beginning of the line."
            ;; it gets reset to that window's point from time to time).
            (let ((win (get-buffer-window (current-buffer))))
              (and win (set-window-point win (point))))
+           (xref--set-arrow)
            (let ((xref--current-item xref))
              (xref--show-location (xref-item-location xref) t)))
           (t
@@ -1026,6 +1035,7 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)."
   (let ((inhibit-read-only t)
         (buffer-undo-list t))
     (erase-buffer)
+    (setq overlay-arrow-position nil)
     (xref--insert-xrefs xref-alist)
     (add-hook 'post-command-hook 'xref--apply-truncation nil t)
     (goto-char (point-min))