all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
To: Drew Adams <drew.adams@oracle.com>
Cc: emacs-devel@gnu.org
Subject: Re: display-buffer cleverness - how to tame?
Date: Tue, 05 May 2009 20:55:08 +0200	[thread overview]
Message-ID: <4A008B8C.4090209@gmx.at> (raw)
In-Reply-To: <002301c9cda2$b4acf680$0200a8c0@us.oracle.com>

 >> The interpretation is "this is one of the windows Emacs 22
 >> tried to split".
 >
 > Is that the way it will be explained in the doc, by referring to Emacs 22's
 > (undocumented, magic) behavior?

No.  I can't do that because I don't completely understand the behavior
of Emacs 22 in this regard.

 > I think it should be documented that `split-window-preferred-function', if
 > non-nil, is called by `display-buffer' potentially twice, to determine the
 > window (if any) to split. The first time, it is passed the largest window. Only
 > if it returns nil is it called a second time, with the lru window as argument.
 >
 > Without this info, I don't think users will know what
 > `split-window-preferred-function' is about, hence how to code a suitable
 > function for it.

I submitted my latest version of this today to the bug#3142 thread.  The
new doc-string of `split-window-preferred-function' reads as:

(defcustom split-window-preferred-function 'split-window-sensibly
   "Function called by `display-buffer' to split a window.
The function is called with a window as single argument and is
supposed to either split that window and return the new window or
return nil if the window can (or shall) not be split.

The default is to split the window \"sensibly\".  This calls the
function `split-window-sensibly' which tries to split the window
in a way which seems most suitable.  A second standard option is
\"vertically\" to split the window into two windows one above the
other.  The third standard option is \"horizontally\" which tries
to split the window into two windows side by side.  All three
standard options examine the values of `split-height-threshold'
and/or `split-width-threshold' before they apply the split.

If you set this to any other function, bear in mind that it may
be called two times: The argument of the first call is the
largest window on its frame.  If that call fails to provide a
suitable window, it gets called again with the least recently
used window as argument.  If neither of these calls produces a
suitable window, `display-buffer' will use an existing one to
display its buffer.

The window selected at the time `display-buffer' was invoked is
selected when `split-window-preferred-function' gets called.
Hence you can compare WINDOW with the value of `selected-window'
if you always want to split the selected window instead of WINDOW
or if you never want to split the currently selected window."
   ...

 > The doc string says that if `split-window-preferred-function' returns nil both
 > times, then `display-buffer' splits the window that respects the values of
 > `split-height-threshold' and `split-width-threshold'.
 >
 > What if more than one window respects those values? Among which windows does
 > `display-buffer' choose, and how does it choose one of them, if more than one
 > respects those values? And what does it do if no window respects those values?
 > This info is missing, AFAICT.

It usually says "tries to split" so if the window can't be split it
won't be split.

 > It sounds as if no matter how `split-window-preferred-function' is defined,
 > `display-buffer' will split a window. Is that correct?

No.  There's no window splitting when `pop-up-windows' is nil.  Usually
there's no window splitting either when both `split-height-threshold'
and `split-width-threshold' are nil, but that can be overridden by
writing a `split-window-preferred-function' which simply disregards
these variables' values.

 > That's what the doc
 > string seems to say - either `split-window-preferred-function' splits a window
 > or `display-buffer' splits one that respects `split-height-threshold' and
 > `split-width-threshold'.

With the new code any splitting will be done exclusively by
`split-window-preferred-function'.

 > If that's not true, then (besides fixing the doc), how can
 > `split-window-preferred-function' prevent window splitting altogether?

With the new code by always returning nil.

martin




  reply	other threads:[~2009-05-05 18:55 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-04  7:41 display-buffer cleverness - how to tame? Drew Adams
2009-05-04  8:38 ` martin rudalics
2009-05-04 14:39   ` Drew Adams
2009-05-04 15:03     ` Miles Bader
2009-05-04 15:49       ` Drew Adams
2009-05-04 18:58         ` Samuel Bronson
2009-05-05  2:50         ` Miles Bader
2009-05-04 16:36     ` Stefan Monnier
2009-05-04 16:41     ` martin rudalics
2009-05-04 17:13       ` Drew Adams
2009-05-05  7:02         ` martin rudalics
2009-05-05 14:18           ` Drew Adams
2009-05-05 16:33             ` martin rudalics
2009-05-05 16:58               ` Drew Adams
2009-05-05 18:55                 ` martin rudalics [this message]
2009-05-05 20:20                   ` Drew Adams
2009-05-06 16:21                     ` martin rudalics
2009-05-06 17:54                       ` Drew Adams
2009-05-07  9:37                         ` martin rudalics

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=4A008B8C.4090209@gmx.at \
    --to=rudalics@gmx.at \
    --cc=drew.adams@oracle.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.