From 17bd039539d22a0a2da792d3921f2c603cc2d460 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Mon, 11 Jan 2021 00:44:38 +0200 Subject: [PATCH] New command xref-quit-and-pop-marker-stack * lisp/progmodes/xref.el (xref-quit-and-pop-marker-stack): New command. (xref--xref-buffer-mode-map): Binding for it. --- etc/NEWS | 5 +++++ lisp/progmodes/xref.el | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index a7a872d9791..7e84d695089 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1343,6 +1343,11 @@ have been renamed to have "proper" public names and documented ('xref-show-definitions-buffer' and 'xref-show-definitions-buffer-at-bottom'). +*** New command 'xref-quit-and-pop-marker-stack' and a binding for it +in Xref buffers ('M-,'). This combination is easy to press +semi-accidentally if the user wants to go back in the middle of +choosing the exact definition to go to, and this should do TRT. + --- *** New value 'project-relative' for 'xref-file-name-display' If chosen, file names in *xref* buffers will be displayed relative diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index d3b6ae71a0a..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" -- 2.39.5