From: martin rudalics <rudalics@gmx.at>
To: Dmitry Gutov <dgutov@yandex.ru>, Eli Zaretskii <eliz@gnu.org>
Cc: Helmut Eller <eller.helmut@gmail.com>, emacs-devel@gnu.org
Subject: Re: xref and displaying locations in appropriate window or frame
Date: Mon, 25 Jan 2016 10:50:38 +0100 [thread overview]
Message-ID: <56A5EFEE.2080607@gmx.at> (raw)
In-Reply-To: <56A51FA4.5020807@yandex.ru>
> Could we decouple temp-buffer-resize-mode from the "write to
> standard-output" mode of operation? Can I just call
> resize-temp-buffer-window once after the xref buffer is displayed?
Hopefully. Just add
(when temp-buffer-resize-mode (resize-temp-buffer-window window))
at some suitable place.
> If won't make any difference if *xref* is tall enough (like when we
> display Grep results in it).
If the *xref* buffer usually fills its window in both dimensions there's
no need to do anything.
> And anyway, *xref* window getting split is not a problem, as far as
> I'm concerned. Keeping *xref* buffer visible is the goal.
So the main problem is that showing the target buffer uses the *xref*
window and you want to avoid that. In the following let's assume that
"O" is the originally selected window, "X" is the *xref* window, "T" is
the target window that shows the defined object and "N" is some other
non-selected window.
Suppose O is the sole window on its frame. In a "vertically oriented"
frame you would go from
-----
| O |
| |
| |
| |
| |
-----
via
-----
| O |
| |
| |
|-----|
| X |
-----
to
-----
| O |
|-----|
| T |
|-----|
| X |
-----
and subsequently T should be reused for the remaining targets. This
will work when the user has customized ‘split-height-threshold’
appropriately - otherwise O will be used for showing T.
In a "horizontally" orientd frame you would go from
------------
| O |
| |
| |
| |
------------
via
------------
| O |
| |
|------------|
| X |
------------
to
------------
| O | T |
| | |
|------------|
| X |
------------
This will usually work with the default ‘split-width-threshold’,
otherwise O gets used for showing T.
Now suppose that both O and N exist. In this case you would, in the
vertically oriented case, go from
-----
| O |
| |
|-----|
| N |
| |
-----
via
-----
| O |
|-----|
| N |
|-----|
| X |
-----
to
-----
| O |
|-----|
| T |
|-----|
| X |
-----
Horizontally from
------------
| O | N |
| | |
| | |
| | |
------------
via
------------
| O | N |
| | |
|------------|
| X |
------------
to
------------
| O | T |
| | |
|------------|
| X |
------------
One tricky case is to set up X when O and N exist already. If you reuse
N for showing X you will find it difficult to subsequently show T
without reusing X. That's why I would try to always create a new,
hopefully smaller, window for X.
The second tricky case is to make sure that for a new target always the
previous T window gets used via ‘display-buffer-use-some-window’. To
make this happen you will either have to mark the O and X windows as
dedicated or make sure the T window is the LRU window when displaying
the next target. (I silently assumed that N will be automatically used
for displaying T initially because O was selected and X would have to be
selected by you when it's created.)
Hopefully, this covers the most common cases we will see in the wild.
> Maybe the actual solution is indeed to use a different display
> mechanism for xref-find-definitions with several options. Then it
> could use an actual temporary electric window at the bottom of the
> current window that gets deleted as soon as we're done.
At least that's how I would customize the display of *xref*. Whatever
you choose for the default might be entirely different based on the
needs of a majority of users.
> We don't use temp-buffer-resize-mode in Compilation or Grep buffers,
> right? Even though Grep likewise might return only a few matches.
IIUC these buffers get filled asynchronously. How should
‘temp-buffer-resize-mode’ work with such buffers? Do you produce *xref*
asynchronously?
> Were the Help windows actually _temporary_ sometime?
Depends on the semantics of "temporary".
> If I have a frame with two full-height windows side-by-side, and I'm
> calling project-find-regexp which returns a lot of results, I'd want
> it to be displayed in the "other" window, rather than necessarily
> split the current one.
I thought the other window is where you eventually wanted to show the
target buffer.
> Or, if I have just one window in a maximized frame, and do the search,
> and I've customized the split thresholds appropriately, I want
> split-window-right to be called, and see *xref* to the right.
Once more: Where would you show the target buffer then? I think what
you say makes perfect sense in a setup where the *xref* buffer is
replaced by the target buffer. But we're talking about the scenario
where the *xref* buffer should remain visible after displaying the
target buffer.
> Instead of having the "split below" performed, and seeing *xref* use
> full width, and only half the height of the current frame.
Hopefully less than half the height when you fit the window to its
buffer.
>> Yes. But the one-window-per-frame user might get a new frame then.
>> She's not your target (because of the assumption that the original
>> window and the *xref* window are already there when you want to display
>> the other buffer).
>
> Wouldn't she want a new frame anyway?
I thought about people who work with one and only one window. We
shouldn't create a no-way-out situation for them.
>> But even softly (that's all you need here) dedicated
>> windows sometimes behave erratically.
>
> Can we fix that? So far using dedicated buffers sounds like the most
> appropriate solution.
One problem with dedicated windows is that if an application and the
user both start dedicating the same window to its buffer there might be
conflicts. I doubt that such conflicts can be "fixed" easily.
>> If the other window is the *xref* window and the *xref* window was
>> "used" later. You might have to "touch" it from time to time ;-)
>
> That doesn't sound like something a display-buffer consumer should
> do. Should it?
It's a hack, indeed.
>> A threshold that is more than twice as large as the default value?
>
> (frame-height) evaluates to 58 here.
Less than 80, still.
> Maybe it does make sense, maybe it doesn't. I'm fine with it, though,
> because I don't mind doing doing my vertical splits manually.
‘display-buffer’ can't split it. The very first example above will work
only if the user has customized ‘split-height-threshold’. Otherwise, T
will be shown in the O window.
> But *Grep* works fine in that situation, doesn't it?
I never use it. My grep hits appear in a side window where I just list
the files where at least one hit occurred. Selecting a file shows all
hits in that file. Selecting a particular hit shows that hit in the
window on the right.
> quit-window is different, and it works as expected anyway, I'd say: if
> the window configuration hasn't changed too much, it will undo the
> action that displayed it. If the window configuration did change too
> much, it will just bury the current buffer. Everybody happy.
Did you try it after manually switching to such a buffer?
>> Maybe
>> some command to "bring back" the *xref* buffer would be more useful than
>> simply switching to it.
>
> I can easily imagine having several *xref* buffers at the same time
> (we'll just have to add more coherent naming).
Then I'd say: Maybe some prefixed command to "bring back" an existing
*xref* buffer would be more useful than simply switching to it.
martin
next prev parent reply other threads:[~2016-01-25 9:50 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-09 19:36 tags-loop-continue Eli Zaretskii
2016-01-09 19:59 ` tags-loop-continue Ingo Lohmar
2016-01-09 20:22 ` tags-loop-continue Dmitry Gutov
2016-01-09 20:42 ` tags-loop-continue Eli Zaretskii
2016-01-09 20:49 ` tags-loop-continue Dmitry Gutov
2016-01-09 20:52 ` tags-loop-continue Dmitry Gutov
2016-01-09 21:19 ` tags-loop-continue Dmitry Gutov
2016-01-10 3:45 ` tags-loop-continue Eli Zaretskii
2016-01-10 4:00 ` tags-loop-continue Dmitry Gutov
2016-01-10 6:29 ` tags-loop-continue Drew Adams
2016-01-10 14:35 ` tags-loop-continue Dmitry Gutov
2016-01-10 15:26 ` tags-loop-continue Ingo Lohmar
2016-01-10 16:09 ` tags-loop-continue Eli Zaretskii
2016-01-10 16:08 ` tags-loop-continue Eli Zaretskii
2016-01-10 16:18 ` tags-loop-continue Dmitry Gutov
2016-01-10 17:53 ` tags-loop-continue Drew Adams
2016-01-10 18:12 ` tags-loop-continue Dmitry Gutov
2016-01-11 7:21 ` tags-loop-continue Eric Abrahamsen
2016-01-10 15:54 ` tags-loop-continue Eli Zaretskii
2016-01-10 16:14 ` tags-loop-continue Dmitry Gutov
2016-01-10 17:08 ` tags-loop-continue Eli Zaretskii
2016-01-10 18:19 ` tags-loop-continue Dmitry Gutov
2016-01-10 19:01 ` tags-loop-continue Eli Zaretskii
2016-01-14 0:41 ` tags-loop-continue Dmitry Gutov
2016-01-14 16:00 ` tags-loop-continue Eli Zaretskii
2016-01-14 16:07 ` tags-loop-continue Dmitry Gutov
2016-01-14 17:17 ` tags-loop-continue Eli Zaretskii
2016-01-14 17:26 ` tags-loop-continue Dmitry Gutov
2016-01-14 17:39 ` tags-loop-continue Dmitry Gutov
2016-01-14 18:36 ` tags-loop-continue Eli Zaretskii
2016-01-14 18:46 ` tags-loop-continue Dmitry Gutov
2016-01-14 18:31 ` tags-loop-continue Eli Zaretskii
2016-01-14 18:44 ` tags-loop-continue Dmitry Gutov
2016-01-14 19:02 ` tags-loop-continue Eli Zaretskii
2016-01-14 19:15 ` tags-loop-continue Dmitry Gutov
2016-01-14 19:18 ` tags-loop-continue Dmitry Gutov
2016-01-14 19:41 ` tags-loop-continue Eli Zaretskii
2016-01-14 20:09 ` tags-loop-continue Dmitry Gutov
2016-01-14 20:21 ` tags-loop-continue Eli Zaretskii
2016-01-18 19:19 ` tags-loop-continue Dmitry Gutov
2016-01-20 11:19 ` tags-loop-continue Eli Zaretskii
2016-01-21 4:59 ` tags-loop-continue Dmitry Gutov
2016-01-21 17:02 ` tags-loop-continue Eli Zaretskii
2016-01-21 17:12 ` tags-loop-continue Dmitry Gutov
2016-01-21 17:47 ` tags-loop-continue Eli Zaretskii
2016-01-21 18:58 ` tags-loop-continue Dmitry Gutov
2016-01-21 19:02 ` tags-loop-continue Eli Zaretskii
2016-01-21 19:11 ` tags-loop-continue Dmitry Gutov
2016-01-21 19:56 ` tags-loop-continue Eli Zaretskii
2016-01-21 20:15 ` tags-loop-continue Dmitry Gutov
2016-01-21 20:36 ` tags-loop-continue Eli Zaretskii
2016-01-21 21:17 ` tags-loop-continue Dmitry Gutov
2016-01-21 21:26 ` tags-loop-continue Dmitry Gutov
2016-01-22 6:59 ` tags-loop-continue Eli Zaretskii
2016-01-22 10:13 ` tags-loop-continue Dmitry Gutov
2016-01-22 14:08 ` tags-loop-continue Eli Zaretskii
2016-01-22 17:51 ` tags-loop-continue John Wiegley
2016-01-22 18:35 ` tags-loop-continue Dmitry Gutov
2016-01-24 1:26 ` next-error-function integration in xref removed Dmitry Gutov
2016-01-26 17:34 ` John Wiegley
2016-01-22 1:54 ` tags-loop-continue John Wiegley
2016-01-22 2:00 ` tags-loop-continue Dmitry Gutov
2016-01-22 5:34 ` tags-loop-continue John Wiegley
2016-01-21 5:15 ` tags-loop-continue Dmitry Gutov
2016-01-21 17:07 ` tags-loop-continue Eli Zaretskii
2016-01-24 2:19 ` xref and displaying locations in appropriate window or frame Dmitry Gutov
2016-01-24 10:55 ` martin rudalics
2016-01-24 13:02 ` Dmitry Gutov
2016-01-24 14:38 ` martin rudalics
2016-01-24 14:53 ` martin rudalics
2016-01-24 17:08 ` Dmitry Gutov
2016-01-24 18:12 ` martin rudalics
2016-01-24 19:01 ` Dmitry Gutov
2016-01-25 9:50 ` martin rudalics [this message]
2016-01-25 17:04 ` Dmitry Gutov
2016-01-25 18:18 ` martin rudalics
2016-01-25 19:28 ` Ingo Lohmar
2016-01-26 10:05 ` martin rudalics
2016-01-26 23:31 ` Dmitry Gutov
2016-01-27 9:10 ` martin rudalics
2016-01-27 17:33 ` Dmitry Gutov
2016-01-27 18:08 ` martin rudalics
2016-01-27 18:35 ` Dmitry Gutov
2016-01-27 22:45 ` Juri Linkov
2016-01-27 23:13 ` Dmitry Gutov
2016-01-28 9:42 ` martin rudalics
2016-01-28 15:03 ` Drew Adams
2016-01-29 0:05 ` Juri Linkov
2016-01-29 7:27 ` martin rudalics
2016-01-29 23:36 ` Juri Linkov
2016-01-29 1:57 ` Dmitry Gutov
2016-01-29 7:27 ` martin rudalics
2016-01-29 13:59 ` Dmitry Gutov
2016-01-29 23:40 ` Juri Linkov
2016-01-25 22:39 ` Dmitry Gutov
2016-01-26 10:05 ` martin rudalics
2016-01-27 1:00 ` Dmitry Gutov
2016-01-27 9:10 ` martin rudalics
2016-01-27 18:43 ` Dmitry Gutov
2016-01-24 15:43 ` Eli Zaretskii
2016-01-24 17:27 ` Dmitry Gutov
2016-01-24 17:58 ` Eli Zaretskii
2016-01-24 18:03 ` Dmitry Gutov
2016-02-21 0:24 ` Dmitry Gutov
2016-02-21 23:49 ` tags-loop-continue Dmitry Gutov
2016-02-22 17:20 ` tags-loop-continue Eli Zaretskii
2016-01-17 23:12 ` tags-loop-continue Stefan Monnier
2016-01-18 1:37 ` tags-loop-continue Dmitry Gutov
2016-01-18 2:20 ` tags-loop-continue Stefan Monnier
2016-01-18 2:28 ` tags-loop-continue Dmitry Gutov
2016-01-18 2:48 ` tags-loop-continue Stefan Monnier
2016-01-18 2:57 ` tags-loop-continue Dmitry Gutov
2016-01-18 15:46 ` tags-loop-continue Eli Zaretskii
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56A5EFEE.2080607@gmx.at \
--to=rudalics@gmx.at \
--cc=dgutov@yandex.ru \
--cc=eliz@gnu.org \
--cc=eller.helmut@gmail.com \
--cc=emacs-devel@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.