]> git.eshelyaron.com Git - emacs.git/commitdiff
New command xref-quit-and-pop-marker-stack
authorDmitry Gutov <dgutov@yandex.ru>
Sun, 10 Jan 2021 22:44:38 +0000 (00:44 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Sun, 10 Jan 2021 22:45:21 +0000 (00:45 +0200)
* lisp/progmodes/xref.el (xref-quit-and-pop-marker-stack):
New command.
(xref--xref-buffer-mode-map): Binding for it.

etc/NEWS
lisp/progmodes/xref.el

index a7a872d9791f6faf11627966fa2e44874d37044b..7e84d695089421ea03208310b1e8606f77344b3d 100644 (file)
--- 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
index d3b6ae71a0afa840b233b8ca1072740f35704362..b6778de807df25544081e88e4772d6c449771221 100644 (file)
@@ -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"