unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* xref call project-current in correct buffer
@ 2022-11-15 18:49 Stephen Leake
  2022-11-15 20:10 ` Eli Zaretskii
  2022-11-15 21:37 ` Stephen Leake
  0 siblings, 2 replies; 5+ messages in thread
From: Stephen Leake @ 2022-11-15 18:49 UTC (permalink / raw)
  To: emacs-devel

I ran into a situation where xref failed because
xref-show-definitions-buffer-at-bottom calls project-current in the
*xref* buffer, not the original source buffer, and the project in that
buffer is different from the one in the *xref* buffer.

The attached patch fixes it, but there are other possible ways to do it;
pass the project to xref--analyze, or set a local variable containing
the project.

In addition, refresh-buffer in the *xref* buffer will have the same
problem, so setting the original project in a local variable might be
the best way.

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: xref call project-current in correct buffer
  2022-11-15 18:49 xref call project-current in correct buffer Stephen Leake
@ 2022-11-15 20:10 ` Eli Zaretskii
  2022-11-15 21:37 ` Stephen Leake
  1 sibling, 0 replies; 5+ messages in thread
From: Eli Zaretskii @ 2022-11-15 20:10 UTC (permalink / raw)
  To: Stephen Leake; +Cc: emacs-devel

> From: Stephen Leake <stephen_leake@stephe-leake.org>
> Date: Tue, 15 Nov 2022 10:49:53 -0800
> 
> I ran into a situation where xref failed because
> xref-show-definitions-buffer-at-bottom calls project-current in the
> *xref* buffer, not the original source buffer, and the project in that
> buffer is different from the one in the *xref* buffer.
> 
> The attached patch fixes it

ENOPATCH



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: xref call project-current in correct buffer
  2022-11-15 18:49 xref call project-current in correct buffer Stephen Leake
  2022-11-15 20:10 ` Eli Zaretskii
@ 2022-11-15 21:37 ` Stephen Leake
  2022-11-15 21:48   ` Dmitry Gutov
  1 sibling, 1 reply; 5+ messages in thread
From: Stephen Leake @ 2022-11-15 21:37 UTC (permalink / raw)
  To: emacs-devel

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

Actually attach the patch

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: xref.diff --]
[-- Type: text/x-patch, Size: 990 bytes --]

diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index bb36688ef8..2d73ab82b8 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1243,10 +1243,14 @@ xref-show-definitions-buffer-at-bottom
       (xref-pop-to-location (car xrefs)
                             (assoc-default 'display-action alist)))
      (t
+      ;; xref--analyze uses (project-current), so it must be done in
+      ;; the original buffer.
+      (setq xrefs (xref--analyze xrefs))
+
       (with-current-buffer (get-buffer-create xref-buffer-name)
         (xref--ensure-default-directory dd (current-buffer))
         (xref--transient-buffer-mode)
-        (xref--show-common-initialize (xref--analyze xrefs) fetcher alist)
+        (xref--show-common-initialize xrefs fetcher alist)
         (pop-to-buffer (current-buffer)
                        `(display-buffer-in-direction . ((direction . below)
                                                         (window-height . ,size-fun))))

[-- Attachment #3: Type: text/plain, Size: 647 bytes --]


Stephen Leake <stephen_leake@stephe-leake.org> writes:

> I ran into a situation where xref failed because
> xref-show-definitions-buffer-at-bottom calls project-current in the
> *xref* buffer, not the original source buffer, and the project in that
> buffer is different from the one in the *xref* buffer.
>
> The attached patch fixes it, but there are other possible ways to do it;
> pass the project to xref--analyze, or set a local variable containing
> the project.
>
> In addition, refresh-buffer in the *xref* buffer will have the same
> problem, so setting the original project in a local variable might be
> the best way.

-- 
-- Stephe

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: xref call project-current in correct buffer
  2022-11-15 21:37 ` Stephen Leake
@ 2022-11-15 21:48   ` Dmitry Gutov
  2022-11-15 21:55     ` Dmitry Gutov
  0 siblings, 1 reply; 5+ messages in thread
From: Dmitry Gutov @ 2022-11-15 21:48 UTC (permalink / raw)
  To: Stephen Leake, emacs-devel

On 15.11.2022 23:37, Stephen Leake wrote:
> +      ;; xref--analyze uses (project-current), so it must be done in
> +      ;; the original buffer.
> +      (setq xrefs (xref--analyze xrefs))

LGTM, thanks!

Maybe change the comment from "uses" to "can use" (or "might"), because 
that only happens with the currently default value of 
xref-file-name-display. Or not. That's a very minor detail.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: xref call project-current in correct buffer
  2022-11-15 21:48   ` Dmitry Gutov
@ 2022-11-15 21:55     ` Dmitry Gutov
  0 siblings, 0 replies; 5+ messages in thread
From: Dmitry Gutov @ 2022-11-15 21:55 UTC (permalink / raw)
  To: Stephen Leake, emacs-devel

On 15.11.2022 23:48, Dmitry Gutov wrote:
> On 15.11.2022 23:37, Stephen Leake wrote:
>> +      ;; xref--analyze uses (project-current), so it must be done in
>> +      ;; the original buffer.
>> +      (setq xrefs (xref--analyze xrefs))
> 
> LGTM, thanks!
> 
> Maybe change the comment from "uses" to "can use" (or "might"), because 
> that only happens with the currently default value of 
> xref-file-name-display. Or not. That's a very minor detail.

Actually, how about this one?

The difference is slight, but we don't reuse a variable for a value with 
different structure, and it mirrors the same variable in related/similar 
functions in this package.

diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 0213ab3cc5..3e04291bc3 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1230,16 +1230,20 @@ xref-show-definitions-buffer-at-bottom
           (max-height (/ (window-height) 2))
           (size-fun (lambda (window)
                       (fit-window-to-buffer window max-height)))
+         xref-alist
           buf)
      (cond
       ((not (cdr xrefs))
        (xref-pop-to-location (car xrefs)
                              (assoc-default 'display-action alist)))
       (t
+      ;; Call it here because it can call (project-current), and that
+      ;; might depend on individual buffer, not just directory.
+      (setq xref-alist (xref--analyze xrefs))
        (with-current-buffer (get-buffer-create xref-buffer-name)
          (xref--ensure-default-directory dd (current-buffer))
          (xref--transient-buffer-mode)
-        (xref--show-common-initialize (xref--analyze xrefs) fetcher alist)
+        (xref--show-common-initialize xref-alist fetcher alist)
          (pop-to-buffer (current-buffer)
                         `(display-buffer-in-direction . ((direction . 
below)
                                                          (window-height 
. ,size-fun))))




^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-11-15 21:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-15 18:49 xref call project-current in correct buffer Stephen Leake
2022-11-15 20:10 ` Eli Zaretskii
2022-11-15 21:37 ` Stephen Leake
2022-11-15 21:48   ` Dmitry Gutov
2022-11-15 21:55     ` Dmitry Gutov

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).