From: Dmitry Gutov <dgutov@yandex.ru>
To: Juri Linkov <juri@linkov.net>, Eli Zaretskii <eliz@gnu.org>
Cc: alan@idiocy.org, mattiase@acm.org, homeros.misasa@gmail.com,
tkk@misasa.okayama-u.ac.jp, larsi@gnus.org,
50067@debbugs.gnu.org
Subject: bug#50067: Context menus
Date: Tue, 24 Aug 2021 20:59:40 +0300 [thread overview]
Message-ID: <b4f6c1fb-f322-4a59-55aa-f60932b996c9@yandex.ru> (raw)
In-Reply-To: <871r6ki6aw.fsf@mail.linkov.net>
[-- Attachment #1: Type: text/plain, Size: 610 bytes --]
On 23.08.2021 19:02, Juri Linkov wrote:
>>> We could add an option, at the very least.
>> An option to display the first match right away will be most
>> appreciated, thanks.
> Like compilation-auto-jump-to-first-error.
So we even have a precedent, very good.
Could you both check out the attached patch?
Together with (setq xref-auto-jump-to-first-definition t)
Questions for feedback:
1. Does the new behavior work okay window management-wise (it does
occupy +1 window, after all)?
2. Should this setting also extend to other commands like
xref-find-references? Asking for personal preferences here.
[-- Attachment #2: xref-auto-jump-to-first-definition.diff --]
[-- Type: text/x-patch, Size: 3183 bytes --]
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index d004a0c32c..ca055a36af 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -416,6 +416,12 @@ xref-after-update-hook
:version "28.1"
:package-version '(xref . "1.0.4"))
+(defcustom xref-auto-jump-to-first-definition nil
+ "If non-nil, `xref-find-definitions' always jumps to the first result."
+ :type 'boolean
+ :version "28.1"
+ :package-version '(xref . "1.2.0"))
+
(defvar xref--marker-ring (make-ring xref-marker-ring-length)
"Ring of markers to implement the marker stack.")
@@ -1060,19 +1066,30 @@ xref-revert-buffer
(error-message-string err)
'face 'error)))))))
+(defun xref--auto-jump-first (buf)
+ (select-window (get-buffer-window buf))
+ (goto-char (point-min))
+ (xref-next-line-no-show)
+ (xref-goto-xref))
+
(defun xref-show-definitions-buffer (fetcher alist)
"Show the definitions list in a regular window.
When only one definition found, jump to it right away instead."
- (let ((xrefs (funcall fetcher)))
+ (let ((xrefs (funcall fetcher))
+ buf)
(cond
((not (cdr xrefs))
(xref-pop-to-location (car xrefs)
(assoc-default 'display-action alist)))
(t
- (xref--show-xref-buffer fetcher
- (cons (cons 'fetched-xrefs xrefs)
- alist))))))
+ (setq buf
+ (xref--show-xref-buffer fetcher
+ (cons (cons 'fetched-xrefs xrefs)
+ alist)))
+ (when (assoc-default 'auto-jump alist)
+ (xref--auto-jump-first buf))
+ buf))))
(define-obsolete-function-alias
'xref--show-defs-buffer #'xref-show-definitions-buffer "28.1")
@@ -1088,7 +1105,8 @@ xref-show-definitions-buffer-at-bottom
;; XXX: Make percentage customizable maybe?
(max-height (/ (window-height) 2))
(size-fun (lambda (window)
- (fit-window-to-buffer window max-height))))
+ (fit-window-to-buffer window max-height)))
+ buf)
(cond
((not (cdr xrefs))
(xref-pop-to-location (car xrefs)
@@ -1101,7 +1119,10 @@ xref-show-definitions-buffer-at-bottom
(pop-to-buffer (current-buffer)
`(display-buffer-in-direction . ((direction . below)
(window-height . ,size-fun))))
- (current-buffer))))))
+ (setq buf (current-buffer)))
+ (when (assoc-default 'auto-jump alist)
+ (xref--auto-jump-first buf))
+ buf))))
(define-obsolete-function-alias 'xref--show-defs-buffer-at-bottom
#'xref-show-definitions-buffer-at-bottom "28.1")
@@ -1236,7 +1257,8 @@ xref--show-defs
(xref--push-markers)
(funcall xref-show-definitions-function xrefs
`((window . ,(selected-window))
- (display-action . ,display-action))))
+ (display-action . ,display-action)
+ (auto-jump . ,xref-auto-jump-to-first-definition))))
(defun xref--push-markers ()
(unless (region-active-p) (push-mark nil t))
next prev parent reply other threads:[~2021-08-24 17:59 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
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 [this message]
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=b4f6c1fb-f322-4a59-55aa-f60932b996c9@yandex.ru \
--to=dgutov@yandex.ru \
--cc=50067@debbugs.gnu.org \
--cc=alan@idiocy.org \
--cc=eliz@gnu.org \
--cc=homeros.misasa@gmail.com \
--cc=juri@linkov.net \
--cc=larsi@gnus.org \
--cc=mattiase@acm.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).