diff options
Diffstat (limited to 'lisp/progmodes/xref.el')
-rw-r--r-- | lisp/progmodes/xref.el | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index b393b8d0f1a..b6778de807d 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -663,6 +663,12 @@ means to first quit the *xref* buffer." (interactive) (xref-goto-xref t)) +(defun xref-quit-and-pop-marker-stack () + "Quit *xref* buffer, then pop the xref marker stack." + (interactive) + (quit-window) + (xref-pop-marker-stack)) + (defun xref-query-replace-in-results (from to) "Perform interactive replacement of FROM with TO in all displayed xrefs. @@ -793,6 +799,7 @@ references displayed in the current *xref* buffer." (define-key map (kbd ".") #'xref-next-line) (define-key map (kbd ",") #'xref-prev-line) (define-key map (kbd "g") #'xref-revert-buffer) + (define-key map (kbd "M-,") #'xref-quit-and-pop-marker-stack) map)) (define-derived-mode xref--xref-buffer-mode special-mode "XREF" @@ -928,8 +935,10 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (or (assoc-default 'fetched-xrefs alist) (funcall fetcher))) - (xref-alist (xref--analyze xrefs))) + (xref-alist (xref--analyze xrefs)) + (dd default-directory)) (with-current-buffer (get-buffer-create xref-buffer-name) + (setq default-directory dd) (xref--xref-buffer-mode) (xref--show-common-initialize xref-alist fetcher alist) (pop-to-buffer (current-buffer)) @@ -992,13 +1001,15 @@ When only one definition found, jump to it right away instead." When there is more than one definition, split the selected window and show the list in a small window at the bottom. And use a local keymap that binds `RET' to `xref-quit-and-goto-xref'." - (let ((xrefs (funcall fetcher))) + (let ((xrefs (funcall fetcher)) + (dd default-directory)) (cond ((not (cdr xrefs)) (xref-pop-to-location (car xrefs) (assoc-default 'display-action alist))) (t (with-current-buffer (get-buffer-create xref-buffer-name) + (setq default-directory dd) (xref--transient-buffer-mode) (xref--show-common-initialize (xref--analyze xrefs) fetcher alist) (pop-to-buffer (current-buffer) |