all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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




  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.