unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "Mattias Engdegård" <mattiase@acm.org>
To: Juri Linkov <juri@linkov.net>
Cc: Alan Third <alan@idiocy.org>,
	Tak Kunihiro <homeros.misasa@gmail.com>,
	tkk@misasa.okayama-u.ac.jp, Dmitry Gutov <dgutov@yandex.ru>,
	Lars Ingebrigtsen <larsi@gnus.org>,
	50067@debbugs.gnu.org
Subject: bug#50067: Context menus
Date: Fri, 20 Aug 2021 19:06:20 +0200	[thread overview]
Message-ID: <254C8F2C-423D-4DBE-9836-A92BD63827D7@acm.org> (raw)
In-Reply-To: <87h7fkh8z8.fsf@mail.linkov.net>

[-- Attachment #1: Type: text/plain, Size: 1068 bytes --]

20 aug. 2021 kl. 09.31 skrev Juri Linkov <juri@linkov.net>:

> If the existing `xref-backend-identifier-at-point` can't be reused
> by adding a new optional arg `click`, then a cleaner solution
> would be to add `xref-backend-identifier-at-mouse` indeed.

`xref-backend-identifier-at-point` is a generic function implemented by each backend; a new function appears cleaner. Suggested patch attached!

More discoveries and questions:

* If I start emacs -Q and enable context-menu-mode, right-clicking on an identifier in an elisp buffer still doesn't produce the Find Definition entry, presumably because xref hasn't been loaded. Shouldn't it be arranged to be autoloaded somehow, which is how xref works when invoked by keystrokes?

* `xref-make-match` requires (contrary to its doc string) its LOCATION argument to be of type `xref-file-location`, but some backends may only be able to make an `xref-buffer-location`. Would anyone object to changing the :location slot of `xref-match-item` to have type `xref-location`? I don't see how it could hurt.


[-- Attachment #2: 0001-Add-Find-References-to-context-menu.patch --]
[-- Type: application/octet-stream, Size: 3167 bytes --]

From 8001c94088d1ee8418001e7fc1875f9cb2ec84f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mattias=20Engdeg=C3=A5rd?= <mattiase@acm.org>
Date: Fri, 20 Aug 2021 18:19:43 +0200
Subject: [PATCH] Add "Find References" to context menu

The new entry appears next to "Find Definition" and like it only
appears when the context menu was invoked on an identifier.

* lisp/progmodes/prog-mode.el (prog-context-menu): New menu entry.
* lisp/progmodes/xref.el (xref-find-references-at-mouse): New
function, analogous to `xref-find-definitions-at-mouse`.
---
 lisp/progmodes/prog-mode.el | 15 ++++++++++++---
 lisp/progmodes/xref.el      | 14 ++++++++++++++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index a8b608b018..89e2eb54d6 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -51,14 +51,23 @@ prog-context-menu
       '(menu-item "Find Definition" xref-find-definitions-at-mouse
                   :visible (save-excursion
                              (mouse-set-point last-input-event)
-                             (xref-backend-identifier-at-point (xref-find-backend)))
-                  :help "Find definition of function or variable")
+                             (xref-backend-identifier-at-point
+                              (xref-find-backend)))
+                  :help "Find definition of identifier")
       'prog-separator)
+    (define-key-after menu [xref-find-ref]
+      '(menu-item "Find References" xref-find-references-at-mouse
+                  :visible (save-excursion
+                             (mouse-set-point last-input-event)
+                             (xref-backend-identifier-at-point
+                              (xref-find-backend)))
+                  :help "Find references to identifier")
+      'xref-find-def)
     (define-key-after menu [xref-pop]
       '(menu-item "Back Definition" xref-pop-marker-stack
                   :visible (not (xref-marker-stack-empty-p))
                   :help "Back to the position of the last search")
-      'xref-find-def))
+      'xref-find-ref))
   menu)
 
 (defvar prog-mode-map
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index b6ad485407..254d00e722 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1349,6 +1349,20 @@ xref-find-definitions-at-mouse
         (xref-find-definitions identifier)
       (user-error "No identifier here"))))
 
+;;;###autoload
+(defun xref-find-references-at-mouse (event)
+  "Find references to the identifier at or around mouse click.
+This command is intended to be bound to a mouse event."
+  (interactive "e")
+  (let ((identifier
+         (save-excursion
+           (mouse-set-point event)
+           (xref-backend-identifier-at-point (xref-find-backend)))))
+    (if identifier
+        (let ((xref-prompt-for-identifier nil))
+          (xref-find-references identifier))
+      (user-error "No identifier here"))))
+
 (declare-function apropos-parse-pattern "apropos" (pattern))
 
 ;;;###autoload
-- 
2.21.1 (Apple Git-122.3)


  reply	other threads:[~2021-08-20 17:06 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <74BC00E9-2509-47DA-9428-1523FF7F3B33@acm.org>
2021-08-18 16:42 ` bug#50067: Context menus Juri Linkov
2021-08-18 17:46   ` Mattias Engdegård
2021-08-18 17:53     ` Eli Zaretskii
2021-08-19 14:22     ` Mattias Engdegård
2021-08-20  7:31       ` Juri Linkov
2021-08-20 17:06         ` Mattias Engdegård [this message]
2021-08-20 23:31           ` Dmitry Gutov
2021-08-21  4:43         ` Tak Kunihiro
2021-08-21  6:33           ` Tak Kunihiro
2021-08-22  8:28           ` Juri Linkov
2021-08-23  3:11             ` Tak Kunihiro
2021-08-23  7:24               ` Juri Linkov
2021-08-24 10:12                 ` Tak Kunihiro
2021-08-24 17:23                   ` Juri Linkov
2021-08-24 23:43                     ` Tak Kunihiro
2021-08-25 17:45                       ` Juri Linkov
2021-08-26  6:13                         ` Juri Linkov
2021-08-27  6:24                           ` Juri Linkov
2021-08-28  5:18                             ` Tak Kunihiro
2021-08-31 17:37                 ` Juri Linkov
2021-08-31 17:43               ` Juri Linkov
2021-08-31 18:58                 ` Eli Zaretskii
2021-09-01  7:12                   ` Juri Linkov
2021-08-18 17:46   ` Eli Zaretskii
2021-08-18 18:01     ` Mattias Engdegård
2021-08-18 18:11       ` Eli Zaretskii
2021-08-18 18:06     ` Juri Linkov
2021-08-18 18:12       ` Eli Zaretskii
2021-08-18 18:39         ` Eli Zaretskii
2021-08-19  1:31           ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-08-19  6:44             ` Eli Zaretskii
2021-08-18 18:40         ` Juri Linkov
2021-08-18 18:59           ` Eli Zaretskii
2021-08-19  7:12             ` Juri Linkov
2021-08-19  7:57               ` Eli Zaretskii
2021-08-20  7:29                 ` Juri Linkov
2021-08-20 10:29                   ` Mattias Engdegård
2021-08-20 10:53                     ` Eli Zaretskii
2021-08-20 11:32                       ` Mattias Engdegård
2021-08-20 16:50                         ` Juri Linkov
2021-08-20 17:11                           ` Mattias Engdegård
2021-08-20 11:32                   ` Eli Zaretskii
2021-08-20 16:36                     ` Juri Linkov
2021-08-20 17:59                       ` Eli Zaretskii
2021-08-20 19:29                         ` Mattias Engdegård
2021-08-21  9:42                           ` Alan Third
2021-08-21 10:57                             ` Mattias Engdegård
2021-08-21 11:17                               ` Eli Zaretskii
2021-08-21 11:45                                 ` Mattias Engdegård
2021-08-21 12:16                                   ` Eli Zaretskii
2021-08-22 19:11                                     ` Dmitry Gutov
2021-08-22 19:22                                       ` Eli Zaretskii
2021-08-22 19:54                                         ` Dmitry Gutov
2021-08-23  2:21                                           ` Eli Zaretskii
2021-08-23 11:18                                             ` Dmitry Gutov
2021-08-23 11:40                                               ` Eli Zaretskii
2021-08-23 16:02                                                 ` Juri Linkov
2021-08-24 17:59                                                   ` Dmitry Gutov
2021-08-25 14:15                                                     ` Dmitry Gutov
2021-08-25 15:59                                                       ` Eli Zaretskii
2021-08-26 13:01                                                     ` Eli Zaretskii
2021-08-26 21:05                                                       ` Dmitry Gutov
2021-08-26 21:07                                                         ` Dmitry Gutov
2021-08-27  6:13                                                           ` Juri Linkov
2021-08-27  6:26                                                         ` Eli Zaretskii
2021-08-30  2:45                                                           ` Dmitry Gutov
2021-08-30 11:57                                                             ` Eli Zaretskii
2021-08-31  7:05                                                               ` Juri Linkov
2021-08-31 12:24                                                                 ` Dmitry Gutov
2021-08-31 16:56                                                                   ` Juri Linkov
2021-08-31 20:23                                                                     ` Dmitry Gutov
2021-09-01  7:08                                                                       ` Juri Linkov
2021-09-01 19:03                                                                         ` Dmitry Gutov
2021-09-05  0:55                                                                         ` Dmitry Gutov
2021-09-05  8:37                                                                           ` Juri Linkov
2021-09-05 19:25                                                                             ` Dmitry Gutov
2021-08-22  8:46                         ` Juri Linkov
2021-08-15  8:48 Juri Linkov
2021-08-15 11:56 ` Lars Ingebrigtsen
2021-08-15 16:12   ` Juri Linkov
2021-08-16 11:31     ` Lars Ingebrigtsen
2021-08-17  8:12       ` Juri Linkov
2021-08-18  4:38         ` Tak Kunihiro
2021-08-18  7:47           ` Juri Linkov
2021-08-28  9:08 ` Naoya Yamashita
2021-08-28 18:50   ` Juri Linkov
2021-09-27 15:30 ` Juri Linkov
2021-09-27 15:50   ` Lars Ingebrigtsen
2021-09-28 18:49     ` Juri Linkov
2021-09-29  7:00       ` Juri Linkov
2021-09-27 18:41   ` Eli Zaretskii
2021-09-28 18:54     ` Juri Linkov
2021-09-28 19:31       ` Eli Zaretskii
2021-09-27 15:33 ` Juri Linkov
2021-10-20 16:59 ` Juri Linkov
2021-11-08 20:05   ` Juri Linkov
2021-11-18 18:38     ` Juri Linkov
2021-11-25  7:50       ` Juri Linkov
2021-11-25  8:38         ` Eli Zaretskii
2021-11-25 19:28           ` Juri Linkov
2021-11-30 18:12             ` Juri Linkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=254C8F2C-423D-4DBE-9836-A92BD63827D7@acm.org \
    --to=mattiase@acm.org \
    --cc=50067@debbugs.gnu.org \
    --cc=alan@idiocy.org \
    --cc=dgutov@yandex.ru \
    --cc=homeros.misasa@gmail.com \
    --cc=juri@linkov.net \
    --cc=larsi@gnus.org \
    --cc=tkk@misasa.okayama-u.ac.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).