emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 469f0a6 1/4: xref--show-defs-minibuffer: new "show definitions" U


From: Dmitry Gutov
Subject: master 469f0a6 1/4: xref--show-defs-minibuffer: new "show definitions" UI
Date: Fri, 4 Dec 2020 20:02:08 -0500 (EST)

branch: master
commit 469f0a65167d004ddbd7b9634c29f42079ebe963
Author: William Xu <william.xwl@gmail.com>
Commit: Dmitry Gutov <dgutov@yandex.ru>

    xref--show-defs-minibuffer: new "show definitions" UI
    
    * lisp/progmodes/xref.el (xref--show-defs-minibuffer):
    New function to use as xref-show-definitions-function
    (https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00824.html).
---
 lisp/progmodes/xref.el | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index ca14f6a..363d118 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -931,6 +931,33 @@ local keymap that binds `RET' to 
`xref-quit-and-goto-xref'."
                        '(display-buffer-in-direction . ((direction . below))))
         (current-buffer))))))
 
+(defun xref--show-defs-minibuffer (fetcher alist)
+  (let* ((xrefs (funcall fetcher))
+         (xref-alist (xref--analyze xrefs))
+         xref-alist-with-line-info
+         xref)
+
+    (cl-loop for ((group . xrefs) . more1) on xref-alist
+             do
+             (let ((show-summary (> (length xrefs) 1)))
+               (cl-loop for (xref . more2) on xrefs do
+                        (with-slots (summary location) xref
+                          (let* ((line (xref-location-line location))
+                                 (line-fmt (if line (format "%s:" line) ""))
+                                 (candidate
+                                  (if show-summary
+                                      (format "%s:%s%s" group line-fmt summary)
+                                    (format "%s" group))))
+                            (push (cons candidate xref) 
xref-alist-with-line-info))))))
+
+    (setq xref (if (not (cdr xrefs))
+                   (car xrefs)
+                 (cdr (assoc (completing-read "Jump to definition: "
+                                              (reverse 
xref-alist-with-line-info))
+                             xref-alist-with-line-info))))
+
+    (xref-pop-to-location xref (assoc-default 'display-action alist))))
+
 
 (defcustom xref-show-xrefs-function 'xref--show-xref-buffer
   "Function to display a list of search results.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]