Subject: Re: bug#20487: 25.0.50; Format and behavior of *xref* buffer is non-standard

From: Dmitry Gutov <[email-masked]>
Date: Sun, 3 May 2015 17:30:43 +0300

On 05/03/2015 01:20 AM, Vitalie Spinu wrote:

>    - on RET *xref* is buried. That's not that other modes do and it's
>      rather inconvenient IMO.

That's valid complaint, but it's very convenient to bury the xref buffer 
upon jumping to a location, if the list was displayed by 
`xref-find-definitions', primarily because "jump to definition" usually 
means we only want to visit one location.

Further, on more than one occasion I needed to only jump to one location 
in *grep* and *compile* buffers, preferably in the same window, in order 
to hide the said *grep* or *compile* buffer. We don't have an easy way 
to do that.

I'd welcome suggestions taking this into account.

>    - Display is inneficient. Currently two lines are used to display one
>      item:
>
>         /home/vspinu/bin/r-source/src/library/stats/src/port.c
>           nlminb_iterate(double b[], double d[], double fx, double g[], double h[],
>         /home/vspinu/bin/r-source/src/include/R_ext/stats_stubs.h
>           S_nlminb_iterate(double b[], double d[], double fx, double g[], double	h[],
>
>      I would rather prefer the way *grep* does that.

So, you'd call displaying the same file name over and over for each 
location inside it, "efficient"? Do you favor vertical splits?

Someone can implement a different rendering method for xref buffer (and 
set xref-show-xrefs-function to it), but I'm against making it default.

That rendering method will also encounter difficulties if xref groups 
will sometimes have 2 levels of nesting (or more?).

> As we are on this, would be nice if *grep* and *xref* cold abbreviate
> file-names by replacing home directory with ~/.

Grep would probably have to do it with font-lock (patch welcome, I guess).

In xref, currently it falls on the shoulders of each backend, because 
the location groups are simply strings, and as far as UI is concerned, 
they can contain anything. This can change if groups become proper objects.