summaryrefslogtreecommitdiff
path: root/lisp/progmodes/xref.el
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2021-08-21 12:38:40 +0200
committerMattias EngdegÄrd <mattiase@acm.org>2021-08-21 12:41:54 +0200
commitd6ad208b2cea6cb78ea4427ae4715bc5e6c5c85b (patch)
tree78502b8ed3eb028b5936cb7f2482808b650af1d0 /lisp/progmodes/xref.el
parent6993d45e519ad7504adcf5a00842114ce8b25110 (diff)
downloademacs-d6ad208b2cea6cb78ea4427ae4715bc5e6c5c85b.tar.gz
emacs-d6ad208b2cea6cb78ea4427ae4715bc5e6c5c85b.tar.bz2
emacs-d6ad208b2cea6cb78ea4427ae4715bc5e6c5c85b.zip
Use overlay arrow to indicate current *xref* selection
* 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.
Diffstat (limited to 'lisp/progmodes/xref.el')
-rw-r--r--lisp/progmodes/xref.el10
1 files changed, 10 insertions, 0 deletions
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index a8bab47ea25..d004a0c32c5 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -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))