all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
To: Ingo Lohmar <i.lohmar@gmail.com>, 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: Tue, 26 Jan 2016 11:05:12 +0100	[thread overview]
Message-ID: <56A744D8.6040205@gmx.at> (raw)
In-Reply-To: <87fuxla27x.fsf@acer.localhost.com>

 >>>    ------------
 >>> |   O |   X  |
 >>> |     |------|
 >>> |     |      |
 >>> |     |   T  |
 >>>    ------------
 >
 >> This is no good layout for IDEs.  Source/code windows like O and T
 >> should always form a rectangle.  Auxiliary windows like X should be
 >> arranged around that rectangle.
 >
 > FWIW, I love the overall direction of extending Emacs' IDE-related
 > facilities, *but* I do not think that it should strive to emulate all
 > their behavior, particularly not in this respect.  AFAICT, you have not
 > given any argument for *why* these should be guidelines for a window
 > layout, except that IDEs do it that way.

I'm no expert in IDEs, I don't use them and I don't advocate their
concepts.  So I'm certainly not qualified to give you an adequate
response.  Anyway.

Years ago proposals were made how to turn Emacs into an IDE.  You will
find a remnant in the

   Perspectives work well even if you do the equivalent of C-x 4 C-f
   because of the distinction between view windows vs file windows.  In
   Emacs this is more or less the "dedicated window" feature, but we have
   never really made it work for this.

entry of etc/TODO.  Now first we have to agree that in our example above
O and T behave as "file windows" and X is a "view window".  ECB calls
view windows "informational windows".  Emacs-IDE IIUC calls file windows
"source window" and subdivides view windows into "menu windows" and
"output windows".  I'm not sure whether X would classify as a menu or
output window, maybe it's both.  In any case X is not a source window.

Keeping file and view windows in a way that file windows form an inner
rectangular area and view windows are arranged around that area has the
following advantages:

- View windows can be easily made persistent (which is what the current
   thread is about).  Creating a file window does not remove them.
   Displaying a buffer in an existing file window does not affect them.

- View windows can be arranged in a predictable way so that the user
   always finds them in a specified part of the frame.  Compare this with
   the placement of X in the horizontal and vertical variations of our
   example.

- Most IDEs implicitly dedicate view windows to their buffers.  So we
   would not have to worry about how to do that with our X window.

- Orthogonally to the before, view windows can be shared by different
   but related buffers in a predictable way.  This means that you can
   switch view windows' buffers en bloc when switching, for example, from
   editing to debugging mode and back.

- It's easy to switch from a navigational mode where you show view
   windows, to an editing mode where you expand the file windows area to
   fill the entire frame and back.  Try that with the layout on the top
   of this reply or your layout below.

- View windows can be easily arranged according to their orientation:
   Vertically oriented windows (like the speedbar, browsers for files,
   buffers, tags and bookmarks) on the left or right, horizontally
   oriented ones (like compilation output or the eshell window) at the
   top or bottom.  This minimizes space and is the reason why I asked
   about the orientation of the *xref* window.

- If you have at most one view window on each side of a frame, you can
   easily fit them to their buffers to additionally minimze space.
   Fitting windows in the file windows area is much more tricky and may
   have unwanted side-effects.

 > I regularly curse at the braindead window management of any IDE I have
 > had to work with so far.  Emacs shines in the flexibility with which I
 > can use all its features the way *I* want, and with the window layout I
 > deem suitable.  And for me, that's literally *never* a rectangular area
 > for source files.  In the above example, I find the displayed window
 > layout not only acceptable, but perfectly fine, just like
 >   ------------
 > |   T |   X  |
 > |     |------|
 > |     |      |
 > |     |   O  |
 >   ------------
 > would be fine for me (not as a result of the described workflow, but as
 > a layout resulting from any kind of workflow).

Just that such layout is quite tricky to set up.  You have to

(setq X (split-window O nil 'above))

followed by

(setq T (split-window (window-parent O) nil 'left))

Most Emacs developers wouldn't even know that such a possibility exist.

 > I think that it would be more useful if the present elaborate window
 > management would become more accessible (maybe it's only a matter of
 > documentation and a few variable settings) to fix a certain layout (or
 > layout-related guidelines like you described) *should the user want
 > that*.  Wouldn't this eliminate most of the need to code such decisions
 > into very general features like xref?

Personally, I prefer chaos.  So I usually split the selected window to
display a buffer and when my frame is crowded by too many small windows
I kill them off in one rush.  I certainly would not recommed this
practice to anyone.  So all I can do is to refer to layout decisions
that have been made and tested elsewhere.

martin



  reply	other threads:[~2016-01-26 10:05 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
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 [this message]
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=56A744D8.6040205@gmx.at \
    --to=rudalics@gmx.at \
    --cc=dgutov@yandex.ru \
    --cc=eliz@gnu.org \
    --cc=eller.helmut@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=i.lohmar@gmail.com \
    /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.