diff options
author | Chong Yidong <cyd@gnu.org> | 2011-11-21 14:05:16 +0800 |
---|---|---|
committer | Chong Yidong <cyd@gnu.org> | 2011-11-21 14:05:16 +0800 |
commit | a9b9b7f5b1513a3c1d473f07317adf8c5e257bb3 (patch) | |
tree | 521c2770be4d2ec7ebe09cee024afe066176a7f5 | |
parent | 06b08b88928b561a911454ce02ff02e27f4a9e10 (diff) | |
download | emacs-a9b9b7f5b1513a3c1d473f07317adf8c5e257bb3.tar.gz |
More updates to Windows chapter of Lisp manual.
* doc/lispref/windows.texi (Splitting Windows): Fix error in documentation of
window-combination-limit.
(Cyclic Window Ordering): Minor fixes to next-window,
one-window-p, and get-lru-window docs. Don't document
window-list-1.
(Buffers and Windows): Copyedits.
(Choosing Window): Document special handling of special-display-*.
(Choosing Window Options): Fix display-buffer-reuse-frames doc.
Don't document even-window-heights, which is going away. Clarify
which options are obeyed by which action functions.
* src/window.c (Fnext_window, Fprevious_window): Doc fix.
-rw-r--r-- | doc/lispref/ChangeLog | 13 | ||||
-rw-r--r-- | doc/lispref/windows.texi | 585 | ||||
-rw-r--r-- | src/ChangeLog | 4 | ||||
-rw-r--r-- | src/window.c | 4 |
4 files changed, 273 insertions, 333 deletions
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 3324b5dcfec..d7ca3f39bfb 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,16 @@ +2011-11-21 Chong Yidong <cyd@gnu.org> + + * windows.texi (Splitting Windows): Fix error in documentation of + window-combination-limit. + (Cyclic Window Ordering): Minor fixes to next-window, + one-window-p, and get-lru-window docs. Don't document + window-list-1. + (Buffers and Windows): Copyedits. + (Choosing Window): Document special handling of special-display-*. + (Choosing Window Options): Fix display-buffer-reuse-frames doc. + Don't document even-window-heights, which is going away. Clarify + which options are obeyed by which action functions. + 2011-11-20 Stefan Monnier <monnier@iro.umontreal.ca> * display.texi (Invisible Text): Clarify point adjustment (bug#10072). diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 4a3aff1dc46..1189eabb0ee 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -970,10 +970,10 @@ This function returns the combination limit for @var{window}. The combination limit is meaningful only for an internal window. If it is @code{nil}, then Emacs is allowed to automatically delete @var{window}, in response to a window deletion, in order to group the -child windows of @var{window} with the child windows of one of its -siblings to form a new window combination. If the combination limit -is @code{t}, the child windows of @var{window} are never automatically -re-combined with its siblings. +child windows of @var{window} with its sibling windows to form a new +window combination. If the combination limit is @code{t}, the child +windows of @var{window} are never automatically re-combined with its +siblings. @end defun To illustrate the effect of @code{window-combination-limit}, @@ -1183,7 +1183,7 @@ opposite of their meanings in those other functions. @defun select-window window &optional norecord This function makes @var{window} the selected window, as well as the window selected within its frame (@pxref{Basic Windows}). -@var{window} must be a live winow. Unless @var{window} already is the +@var{window} must be a live window. Unless @var{window} already is the selected window, its buffer becomes the current buffer (@pxref{Buffers and Windows}). The return value is @var{window}. @@ -1258,28 +1258,22 @@ nor the buffer list. @cindex ordering of windows, cyclic @cindex window ordering, cyclic -When you use the command @kbd{C-x o} (@code{other-window}) to select + When you use the command @kbd{C-x o} (@code{other-window}) to select some other window, it moves through live windows in a specific order. -For any given configuration of windows, this order never varies. It is -called the @dfn{cyclic ordering of windows}. +For any given configuration of windows, this order never varies. It +is called the @dfn{cyclic ordering of windows}. - For a particular frame, this ordering is determined by the window -tree of that frame, see @ref{Windows and Frames}. More precisely, the -ordering is obtained by a depth-first traversal of the frame's window -tree supplemented, if requested, by the frame's minibuffer window. - - If there's just one live frame, the cyclic ordering is the ordering -for that frame. Otherwise, the cyclic ordering is obtained by appending -the orderings for individual frames in order of the list of all live -frames, @ref{Finding All Frames}. In any case, the ordering is made -``cyclic'' by having the last window precede the first window in the -ordering. + The ordering is determined by a depth-first traversal of the frame's +window tree, retrieving the live windows which are the leaf nodes of +the tree (@pxref{Windows and Frames}). If the minibuffer is active, +the minibuffer window is included too. The ordering is cyclic, so the +last window in the sequence is followed by the first one. @defun next-window &optional window minibuf all-frames @cindex minibuffer window, and @code{next-window} -This function returns the window following @var{window} in the cyclic -ordering of windows. The argument @var{window} must specify a live -window and defaults to the selected one. +This function returns a live window, the one following @var{window} in +the cyclic ordering of windows. @var{window} should be a live window; +if omitted or @code{nil}, it defaults to the selected window. The optional argument @var{minibuf} specifies whether minibuffer windows shall be included in the cyclic ordering. Normally, when @var{minibuf} @@ -1293,139 +1287,100 @@ minibuffer windows. If @var{minibuf} is neither @code{t} nor @code{nil}, minibuffer windows are not included even if they are active. The optional argument @var{all-frames} specifies which frames to -consider. Here are the possible values and their meanings: +consider: @itemize @bullet @item @code{nil} -means consider all windows on @var{window}'s frame, plus the minibuffer -window used by that frame even if it lies in some other frame. If the -minibuffer counts (as determined by @var{minibuf}), then all windows on -all frames that share that minibuffer count too. +means to consider windows on @var{window}'s frame. If the minibuffer +window is considered (as specified by the @var{minibuf} argument), +then frames that share the minibuffer window are considered too. @item @code{t} -means consider all windows on all existing frames. +means to consider windows on all existing frames. @item @code{visible} -means consider all windows on all visible frames. (To get useful -results, ensure that @var{window} is on a visible frame.) +means to consider windows on all visible frames. @item 0 -means consider all windows on all visible or iconified frames. +means to consider windows on all visible or iconified frames. @item A frame -means consider all windows on that frame. +means to consider windows on that specific frame. @item Anything else -means consider the windows on @var{window}'s frame, and no others. +means to consider windows on @var{window}'s frame, and no others. @end itemize -This example assumes there are two windows, both displaying the -buffer @samp{windows.texi}: - -@example -@group -(selected-window) - @result{} #<window 56 on windows.texi> -@end group -@group -(next-window (selected-window)) - @result{} #<window 52 on windows.texi> -@end group -@group -(next-window (next-window (selected-window))) - @result{} #<window 56 on windows.texi> -@end group -@end example +If more than one frame is considered, the cyclic ordering is obtained +by appending the orderings for those frames, in the same order as the +list of all live frames (@pxref{Finding All Frames}). @end defun @defun previous-window &optional window minibuf all-frames -This function returns the window preceding @var{window} in the cyclic -ordering of windows. The other arguments specify which windows to -consider as in @code{next-window}. +This function returns a live window, the one preceding @var{window} in +the cyclic ordering of windows. The other arguments are handled like +in @code{next-window}. @end defun @deffn Command other-window count &optional all-frames -This function selects another window in the cyclic ordering of windows. -@var{count} specifies the number of windows to skip in the ordering, -starting with the selected window, before making the selection. If -@var{count} is a positive number, it skips @var{count} windows forwards. -@var{count} negative means skip @minus{}@var{count} windows backwards. -If @var{count} is zero, it does not skip any window, thus re-selecting -the selected window. In an interactive call, @var{count} is the numeric -prefix argument. +This function selects a live window, one @var{count} places from the +selected window in the cyclic ordering of windows. If @var{count} is +a positive number, it skips @var{count} windows forwards; if +@var{count} is negative, it skips @minus{}@var{count} windows +backwards; if @var{count} is zero, that simply re-selects the selected +window. When called interactively, @var{count} is the numeric prefix +argument. The optional argument @var{all-frames} has the same meaning as in -@code{next-window}, but the @var{minibuf} argument of @code{next-window} -is always effectively @code{nil}. This function returns @code{nil}. +@code{next-window}, like a @code{nil} @var{minibuf} argument to +@code{next-window}. This function does not select a window that has a non-@code{nil} @code{no-other-window} window parameter (@pxref{Window Parameters}). @end deffn -The following function returns a copy of the list of windows in the -cyclic ordering. - -@defun window-list-1 &optional window &optional minibuf &optional all_frames -This function returns a list of live windows. The optional arguments -@var{minibuf} and @var{all-frames} specify the set of windows to include -in the list. See the description of @code{next-window} for details. +@defun walk-windows fun &optional minibuf all-frames +This function calls the function @var{fun} once for each live window, +with the window as the argument. -The optional argument @var{window} specifies the first window to list -and defaults to the selected window. If @var{window} is not on the list -of windows returned, some other window will be listed first but no error -is signaled. -@end defun - -The functions described below use @code{window-list-1} for generating a -copy of the list of all relevant windows. Hence, any change of the -window configuration that occurs while one of these functions is -executed is @emph{not} reflected in the list of windows investigated. - -@defun walk-windows proc &optional minibuf all-frames -This function cycles through live windows. It calls the function -@var{proc} once for each window, with the window as its sole argument. +It follows the cyclic ordering of windows. The optional arguments +@var{minibuf} and @var{all-frames} specify the set of windows +included; these have the same arguments as in @code{next-window}. If +@var{all-frames} specifies a frame, the first window walked is the +first window on that frame (the one returned by +@code{frame-first-window}), not necessarily the selected window. -The optional arguments @var{minibuf} and @var{all-frames} specify the -set of windows to include in the walk, see @code{next-window} above. If -@var{all-frames} specifies a frame, the first window walked is the first -window on that frame as returned by @code{frame-first-window} and not -necessarily the selected window. - -If @var{proc} changes the window configuration by splitting or deleting -windows, that change is not reflected in the set of windows walked. -That set is determined entirely by the set of live windows at the time -this function was invoked. +If @var{fun} changes the window configuration by splitting or deleting +windows, that does not alter the set of windows walked, which is +determined prior to calling @var{fun} for the first time. @end defun -The following function allows to determine whether a specific window is -the only live window. - @defun one-window-p &optional no-mini all-frames -This function returns non-@code{nil} if the selected window is the only -window. +This function returns @code{t} if the selected window is the only live +window, and @code{nil} otherwise. -The optional argument @var{no-mini}, if non-@code{nil}, means don't -count the minibuffer even if it is active; otherwise, the minibuffer -window is counted when it is active. The optional argument -@var{all-frames} has the same meaning as for @code{next-window}, see -above. +If the minibuffer window is active, it is normally considered (so that +this function returns @code{nil}). However, if the optional argument +@var{no-mini} is non-@code{nil}, the minibuffer window is ignored even +if active. The optional argument @var{all-frames} has the same +meaning as for @code{next-window}. @end defun @cindex finding windows - The following functions choose (but do not select) one of the windows -on the screen, offering various criteria for the choice. + The following functions return a window which satisfies some +criterion, without selecting it: @cindex least recently used window @defun get-lru-window &optional all-frames dedicated -This function returns the window least recently ``used'' (that is, -selected). If any full-width windows are present, it only considers -these. The optional argument @var{all-frames} has the same meaning as -in @code{next-window}. +This function returns a live window which is heuristically the ``least +recently used'' window. The optional argument @var{all-frames} has +the same meaning as in @code{next-window}. -The selected window is returned if it is the only candidate. A -minibuffer window is never a candidate. A dedicated window -(@pxref{Dedicated Windows}) is never a candidate unless the optional -argument @var{dedicated} is non-@code{nil}. +If any full-width windows are present, only those windows are +considered. The selected window is never returned, unless it is the +only candidate. A minibuffer window is never a candidate. A +dedicated window (@pxref{Dedicated Windows}) is never a candidate +unless the optional argument @var{dedicated} is non-@code{nil}. @end defun @cindex largest window @@ -1439,22 +1394,23 @@ If there are two candidate windows of the same size, this function prefers the one that comes first in the cyclic ordering of windows, starting from the selected window. -The optional argument @var{all-frames} specifies which set of windows to -consider as with @code{next-window}, see above. +The optional argument @var{all-frames} specifies the windows to +search, and has the same meaning as in @code{next-window}. @end defun @cindex window that satisfies a predicate @cindex conditional selection of windows @defun get-window-with-predicate predicate &optional minibuf all-frames default -This function returns a window satisfying @var{predicate}. It cycles -through all visible windows calling @var{predicate} on each one of them -with that window as its argument. The function returns the first window -for which @var{predicate} returns a non-@code{nil} value; if that never -happens, it returns @var{default} (which defaults to @code{nil}). +This function calls the function @var{predicate} for each of the +windows in the cyclic order of windows in turn, passing it the window +as an argument. If the predicate returns non-@code{nil} for any +window, this function stops and returns that window. If no such +window is found, the return value is @var{default} (which defaults to +@code{nil}). The optional arguments @var{minibuf} and @var{all-frames} specify the -set of windows to investigate. See the description of -@code{next-window} for details. +windows to search, and have the same meanings as in +@code{next-window}. @end defun @node Buffers and Windows @@ -1463,47 +1419,41 @@ set of windows to investigate. See the description of @cindex windows, controlling precisely @cindex buffers, controlled in windows -To find out which buffer is displayed in a given window the following -function is used. + This section describes low-level functions for examining and setting +the contents of windows. @xref{Switching Buffers}, for higher-level +functions for displaying a specific buffer in a window. @defun window-buffer &optional window -This function returns the buffer that @var{window} is displaying. The -argument @var{window} can be any window and defaults to the selected -one. If @var{window} is an internal window, this function returns +This function returns the buffer that @var{window} is displaying. If +@var{window} is omitted or @code{nil} it defaults to the selected +window. If @var{window} is an internal window, this function returns @code{nil}. @end defun -The basic, low-level function to associate a window with a buffer is -@code{set-window-buffer}. Higher-level functions like -@code{switch-to-buffer} and @code{display-buffer} try to obey a number -of user customizations regulating which windows are supposed to -display which buffers. @xref{Switching Buffers}. When writing an -application, you should avoid using @code{set-window-buffer} unless -you are sure you need it. - @defun set-window-buffer window buffer-or-name &optional keep-margins -This function makes @var{window} display @var{buffer-or-name} and -returns @code{nil}. The argument @var{window} has to denote a live -window and defaults to the selected one. The argument -@var{buffer-or-name} must specify a buffer or the name of an existing -buffer. An error is signaled when @var{window} is @dfn{strongly} -dedicated to its buffer (@pxref{Dedicated Windows}) and does not already -display @var{buffer-or-name}. - -Normally, displaying @var{buffer-or-name} in @var{window} resets the -window's position, display margins, fringe widths, and scroll bar -settings based on the local variables of the specified buffer. However, -if the optional argument @var{keep-margins} is non-@code{nil}, display -margins and fringe widths of @var{window} remain unchanged. -@xref{Fringes}. - -This function is the fundamental primitive for changing which buffer is -displayed in a window, and all ways of doing that call this function. -Neither the selected window nor the current buffer are changed by this -function. +This function makes @var{window} display @var{buffer-or-name}. +@var{window} should be a live window; if @code{nil}, it defaults to +the selected window. @var{buffer-or-name} should be a buffer, or the +name of an existing buffer. This function does not change which +window is selected, nor does it directly change which buffer is +current (@pxref{Current Buffer}). Its return value is @code{nil}. + +If @var{window} is @dfn{strongly dedicated} to a buffer and +@var{buffer-or-name} does not specify that buffer, this function +signals an error. @xref{Dedicated Windows}. + +By default, this function resets @var{window}'s position, display +margins, fringe widths, and scroll bar settings, based on the local +variables in the specified buffer. However, if the optional argument +@var{keep-margins} is non-@code{nil}, it leaves the display margins +and fringe widths unchanged. -This function runs @code{window-scroll-functions} before running -@code{window-configuration-change-hook}, see @ref{Window Hooks}. +When writing an application, you should normally use the higher-level +functions described in @ref{Switching Buffers}, instead of calling +@code{set-window-buffer} directly. + +This function runs @code{window-scroll-functions}, followed by +@code{window-configuration-change-hook}. @xref{Window Hooks}. @end defun @defvar buffer-display-count @@ -1513,28 +1463,26 @@ displayed in a window. It is incremented each time @end defvar @defvar buffer-display-time -This variable records the time at which a buffer was last made visible -in a window. It is always local in each buffer; each time -@code{set-window-buffer} is called, it sets this variable to -@code{(current-time)} in the specified buffer (@pxref{Time of Day}). -When a buffer is first created, @code{buffer-display-time} starts out -with the value @code{nil}. +This buffer-local variable records the time at which a buffer was last +displayed in a window. The value is @code{nil} if the buffer has +never been displayed. It is updated each time +@code{set-window-buffer} is called for the buffer, with the value +returned by @code{current-time} (@pxref{Time of Day}). @end defvar @defun get-buffer-window &optional buffer-or-name all-frames -This function returns a window displaying @var{buffer-or-name}, or -@code{nil} if there is none. If there are several such windows, then -the function returns the first one in the cyclic ordering of windows, -starting from the selected window, @xref{Cyclic Window Ordering}. +This function returns the first window displaying @var{buffer-or-name} +in the cyclic ordering of windows, starting from the selected window +(@pxref{Cyclic Window Ordering}). If no such window exists, the +return value is @code{nil}. -The argument @var{buffer-or-name} may be a buffer or a buffer name and -defaults to the current buffer. The optional argument @var{all-frames} -specifies which windows to consider: +@var{buffer-or-name} should be a buffer or the name of a buffer; if +omitted or @code{nil}, it defaults to the current buffer. The +optional argument @var{all-frames} specifies which windows to +consider: @itemize @bullet @item -@code{nil} means consider windows on the selected frame. -@item @code{t} means consider windows on all existing frames. @item @code{visible} means consider windows on all visible frames. @@ -1542,44 +1490,45 @@ specifies which windows to consider: 0 means consider windows on all visible or iconified frames. @item A frame means consider windows on that frame only. +@item +Any other value means consider windows on the selected frame. @end itemize -Observe that the behavior of @code{get-buffer-window} may differ from -that of @code{next-window} (@pxref{Cyclic Window Ordering}) when -@var{all-frames} equals @code{nil} or any value not listed here. -Perhaps we will change @code{get-buffer-window} in the future to make it -compatible with the other functions. +Note that these meanings differ slightly from those of the +@var{all-frames} argument to @code{next-window} (@pxref{Cyclic Window +Ordering}). This function may be changed in a future version of Emacs +to eliminate this discrepancy. @end defun @defun get-buffer-window-list &optional buffer-or-name minibuf all-frames This function returns a list of all windows currently displaying -@var{buffer-or-name}. The argument @var{buffer-or-name} may be a buffer -or the name of an existing buffer and defaults to the current buffer. +@var{buffer-or-name}. @var{buffer-or-name} should be a buffer or the +name of an existing buffer. If omitted or @code{nil}, it defaults to +the current buffer. -The two remaining arguments work like the same-named arguments of -@code{next-window} (@pxref{Cyclic Window Ordering}); they are @emph{not} -like the optional arguments of @code{get-buffer-window}. +The arguments @var{minibuf} and @var{all-frames} have the same +meanings as in the function @code{next-window} (@pxref{Cyclic Window +Ordering}). Note that the @var{all-frames} argument does @emph{not} +behave exactly like in @code{get-buffer-window}. @end defun @deffn Command replace-buffer-in-windows &optional buffer-or-name This command replaces @var{buffer-or-name} with some other buffer, in -all windows displaying it. For each such window, it choose another -buffer using @code{switch-to-prev-buffer} (@pxref{Window History}). - -The argument @var{buffer-or-name} may be a buffer, or the name of an -existing buffer; it defaults to the current buffer. - -If a window displaying @var{buffer-or-name} is dedicated -(@pxref{Dedicated Windows}) and is not the only window on its frame, -that window is deleted. If that window is the only window on its frame -and there are other frames on the frame's terminal, that frame is dealt -with by the function specified by @code{frame-auto-hide-function} -(@pxref{Quitting Windows}). Otherwise, the buffer provided by the -function @code{switch-to-prev-buffer} (@pxref{Window History}) is -displayed in the window instead. +all windows displaying it. @var{buffer-or-name} should be a buffer, +or the name of an existing buffer; if omitted or @code{nil}, it +defaults to the current buffer. + +The replacement buffer in each window is chosen via +@code{switch-to-prev-buffer} (@pxref{Window History}). Any dedicated +window displaying @var{buffer-or-name} is deleted (@pxref{Dedicated +Windows}), unless it is the only window on its frame---if it is the +only window, and that frame is not the only frame on its terminal, the +frame is ``dismissed'' by calling the function specified by +@code{frame-auto-hide-function} (@pxref{Quitting Windows}). If the +dedicated window is the only window on the only frame on its terminal, +the buffer is replaced anyway. @end deffn - @node Switching Buffers @section Switching to a Buffer in a Window @cindex switching to a buffer @@ -1655,9 +1604,12 @@ The @var{buffer-or-name} and @var{norecord} arguments have the same meanings as in @code{switch-to-buffer}. @end deffn -The above commands use @code{pop-to-buffer}, which is the function -used by Lisp programs to flexibly display a buffer in some window and -select that window for editing: +The above commands use the function @code{pop-to-buffer}, which +flexibly displays a buffer in some window and selects that window for +editing. In turn, @code{pop-to-buffer} uses @code{display-buffer} for +displaying the buffer. Hence, all the variables affecting +@code{display-buffer} will affect it as well. @xref{Choosing Window}, +for the documentation of @code{display-buffer}. @defun pop-to-buffer buffer-or-name &optional action norecord This function makes @var{buffer-or-name} the current buffer and @@ -1667,10 +1619,6 @@ on a different graphical frame, that frame is given input focus if possible (@pxref{Input Focus}). The return value is the buffer that was switched to. -This function uses @code{display-buffer} to display the buffer, so all -the variables affecting @code{display-buffer} will affect it as well. -@xref{Choosing Window}. - If @var{buffer-or-name} is @code{nil}, it defaults to the buffer returned by @code{other-buffer} (@pxref{The Buffer List}). If @var{buffer-or-name} is a string that is not the name of any existing @@ -1699,8 +1647,8 @@ used as a subroutine by many functions and commands, including Buffers}). @cindex display action -@cindex action function, for display-buffer -@cindex action alist, for display-buffer +@cindex action function, for @code{display-buffer} +@cindex action alist, for @code{display-buffer} This command performs several complex steps to find a window to display in. These steps are described by means of @dfn{display actions}, which have the form @code{(@var{function} . @var{alist})}. @@ -1739,6 +1687,11 @@ The variable @code{display-buffer-overriding-action}. The user option @code{display-buffer-alist}. @item +A special action for handling @code{special-display-buffer-names} and +@code{special-display-regexps}, if either of those variables is +non-@code{nil}. @xref{Choosing Window Options}. + +@item The @var{action} argument. @item @@ -1810,10 +1763,9 @@ This function tries to ``display'' @var{buffer} by finding a window that is already displaying it. If @var{alist} has a non-@code{nil} @code{inhibit-same-window} entry, -the selected window is not eligible for reuse. - -If @var{alist} contains a @code{reusable-frames} entry, its value -determines which frames to search for a reusable window: +the selected window is not eligible for reuse. If @var{alist} +contains a @code{reusable-frames} entry, its value determines which +frames to search for a reusable window: @itemize @bullet @item @@ -1834,17 +1786,28 @@ normally searches just the selected frame; however, if either the variable @code{display-buffer-reuse-frames} or the variable @code{pop-up-frames} is non-@code{nil}, it searches all frames on the current terminal. @xref{Choosing Window Options}. + +If this function chooses a window on another frame, it makes that +frame visible and raises it if necessary. @end defun @defun display-buffer-pop-up-frame buffer alist This function creates a new frame, and displays the buffer in that -frame's window. +frame's window. It actually performs the frame creation by calling +the function specified in @code{pop-up-frame-function} +(@pxref{Choosing Window Options}). @end defun @defun display-buffer-pop-up-window buffer alist This function tries to display @var{buffer} by splitting the largest -or least recently-used window. It uses @code{split-window-sensibly} -as a subroutine (@pxref{Choosing Window Options}). +or least recently-used window (typically one on the selected frame). +It actually performs the split by calling the function specified in +@code{split-window-preferred-function} (@pxref{Choosing Window +Options}). + +It can fail if no window splitting can be performed for some reason +(e.g. if there is just one frame and it has an @code{unsplittable} +frame parameter; @pxref{Buffer Parameters}). @end defun @defun display-buffer-use-some-window buffer alist @@ -1861,142 +1824,108 @@ The behavior of the standard display actions of @code{display-buffer} options. @defopt display-buffer-reuse-frames -If this variable is non-@code{nil}, @code{display-buffer} searches -visible and iconified frames for a window displaying -@var{buffer-or-name}. If there is such a window, @code{display-buffer} -makes that window's frame visible and raises it if necessary, and -returns the window. If there is no such window or -@code{display-buffer-reuse-frames} is @code{nil}, the behavior of -@code{display-buffer} is determined by the variables described next. +If the value of this variable is non-@code{nil}, @code{display-buffer} +may search all frames on the current terminal when looking for a +window already displaying the specified buffer. The default is +@code{nil}. This variable is consulted by the action function +@code{display-buffer-reuse-window} (@pxref{Display Action Functions}). @end defopt @defopt pop-up-windows -This variable specifies whether @code{display-buffer} is allowed to -split (@pxref{Splitting Windows}) an existing window. If this variable -is non-@code{nil}, @code{display-buffer} tries to split the largest or -least recently used window on the selected frame. (If the selected -frame is a minibuffer-only frame, @code{display-buffer} tries to split a -window on another frame instead.) If this variable is @code{nil} or the -variable @code{pop-up-frames} (see below) is non-@code{nil}, -@code{display-buffer} does not split any window. +If the value of this variable is non-@code{nil}, @code{display-buffer} +is allowed to split an existing window to make a new window for +displaying in. This is the default. + +This variable is provided mainly for backward compatibility. It is +obeyed by @code{display-buffer} via a special mechanism in +@code{display-buffer-fallback-action}, which only calls the action +function @code{display-buffer-pop-up-window} (@pxref{Display Action +Functions}) when the value is @code{nil}. It is not consulted by +@code{display-buffer-pop-up-window} itself, which the user may specify +directly in @code{display-buffer-alist} etc. @end defopt @defopt split-window-preferred-function -This variable must specify a function with one argument, which is a -window. The @code{display-buffer} routines will call this function with -one or more candidate windows when they look for a window to split. The -function is expected to split that window and return the new window. If -the function returns @code{nil}, this means that the argument window -cannot (or shall not) be split. - -The default value of @code{split-window-preferred-function} is the -function @code{split-window-sensibly} described below. If you -customize this option, bear in mind that the @code{display-buffer} -routines may call your function up to two times when trying to split a -window. The argument of the first call is the largest window on the -chosen frame (as returned by @code{get-largest-window}). If that call -fails to return a live window, your function is called a second time -with the least recently used window on that frame (as returned by -@code{get-lru-window}). - -The function specified by this option may try to split any other window -instead of the argument window. Note that the window selected at the -time @code{display-buffer} was invoked is still selected when your -function is called. Hence, you can split the selected window (instead -of the largest or least recently used one) by simply ignoring the window -argument in the body of your function. You can even choose to not split -any window as long as the return value of your function specifies a live -window or @code{nil}, but you are not encouraged to do so -unconditionally. If you want @code{display-buffer} to never split any -windows, set @code{pop-up-windows} to @code{nil}. +This variable specifies a function for splitting a window, in order to +make a new window for displaying a buffer. It is used by the +@code{display-buffer-pop-up-window} action function to actually split +the window (@pxref{Display Action Functions}). + +The default value is @code{split-window-sensibly}, which is documented +below. The value must be a function that takes one argument, a +window, and return either a new window (which is used to display the +desired buffer) or @code{nil} (which means the splitting failed). @end defopt @defun split-window-sensibly window -This function takes a window as argument and tries to split that window -in a suitable way. The two variables described next are useful for -tuning the behavior of this function. +This function tries to split @code{window}, and return the newly +created window. If @code{window} cannot be split, it returns +@code{nil}. + +This function obeys the usual rules that determine when a window may +be split (@pxref{Splitting Windows}). It first tries to split by +placing the new window below, subject to the restriction imposed by +@code{split-height-threshold} (see below) in addition to any other +restrictions. If that fails, it tries to split by placing the new +window to the right, subject to @code{split-width-threshold} (see +below). If that fails, and the window is the only window on its +frame, this function again tries to split and place the new window +below, disregarding @code{split-height-threshold}. If this fails as +well, this function gives up and returns @code{nil}. @end defun @defopt split-height-threshold -This variable specifies whether @code{split-window-sensibly} may split -windows vertically. If it is an integer, @code{split-window-sensibly} -tries to vertically split a window only if it has at least this many -lines. If the window has less lines, splitting fails, or the value of -this variable is @code{nil}, @code{split-window-sensibly} will try to -split the window horizontally, subject to restrictions of -@code{split-width-threshold} (see below). If splitting horizontally -fails too and the window is the only window on its frame, -@code{split-window-sensibly} will try to split the window vertically -disregarding the value of @code{split-height-threshold}. If this fails -as well, @code{split-window-sensibly} returns @code{nil}. - -@code{split-window-sensibly} does not split vertically a window whose -height is fixed (@pxref{Resizing Windows}). Also, it vertically splits -a window only if the space taken up by that window can accommodate two -windows one above the other that are both at least -@code{window-min-height} lines tall. Moreover, if the window that shall -be split has a mode line, @code{split-window-sensibly} does not split -the window unless the new window can accommodate a mode line too. +This variable, used by @code{split-window-sensibly}, specifies whether +to split the window placing the new window below. If it is an +integer, that means to split only if the original window has at least +that many lines. If it is @code{nil}, that means not to split this +way. @end defopt @defopt split-width-threshold -This variable specifies whether @code{split-window-sensibly} may split -windows horizontally. If it is an integer, @code{split-window-sensibly} -tries to horizontally split a window only if it has at least this many -columns. If it is @code{nil}, @code{split-window-sensibly} will not -split the window horizontally. (It still might split the window -vertically, though, see above.) - -@code{split-window-sensibly} does not split horizontally a window if -that window's width is fixed (@pxref{Resizing Windows}). Also, it -horizontally splits a window only if the space that window takes up can -accommodate two windows side by side that are both at least -@code{window-min-width} columns wide. -@end defopt - -@defopt even-window-heights -This variable specifies whether @code{display-buffer} should even out -window heights if the buffer gets displayed in an existing window, above -or beneath another window. If @code{even-window-heights} is -non-@code{nil}, the default, window heights will be evened out. If -either of the involved window has fixed height (@pxref{Resizing -Windows}) or @code{even-window-heights} is @code{nil}, the original -window heights will be left alone. +This variable, used by @code{split-window-sensibly}, specifies whether +to split the window placing the new window to the right. If the value +is an integer, that means to split only if the original window has at +least that many columns. If the value is @code{nil}, that means not +to split this way. @end defopt -@c Emacs 19 feature @defopt pop-up-frames -This variable specifies whether @code{display-buffer} should make new -frames. If it is non-@code{nil}, @code{display-buffer} looks for a -window already displaying @var{buffer-or-name} on any visible or -iconified frame. If it finds such a window, it makes that window's -frame visible and raises it if necessary, and returns the window. -Otherwise it makes a new frame, unless the variable's value is -@code{graphic-only} and the selected frame is not on a graphic display. -@xref{Frames}, for more information. - -Note that the value of @code{pop-up-windows} does not matter if -@code{pop-up-frames} is non-@code{nil}. If @code{pop-up-frames} is -@code{nil}, then @code{display-buffer} either splits a window or reuses -one. +If the value of this variable is non-@code{nil}, that means +@code{display-buffer} may display buffers by making new frames. The +default is @code{nil}. + +A non-@code{nil} value also means that when @code{display-buffer} is +looking for a window already displaying @var{buffer-or-name}, it can +search any visible or iconified frame, not just the selected frame. + +This variable is provided mainly for backward compatibility. It is +obeyed by @code{display-buffer} via a special mechanism in +@code{display-buffer-fallback-action}, which calls the action function +@code{display-buffer-pop-up-frame} (@pxref{Display Action Functions}) +if the value is non-@code{nil}. (This is done before attempting to +split a window.) This variable is not consulted by +@code{display-buffer-pop-up-frame} itself, which the user may specify +directly in @code{display-buffer-alist} etc. @end defopt -@c Emacs 19 feature @defopt pop-up-frame-function -This variable specifies how to make a new frame if @code{pop-up-frames} -is non-@code{nil}. - -The value of this variable must be a function of no arguments. When -@code{display-buffer} makes a new frame, it does so by calling that -function, which should return a frame. The default value of this -variable is a function that creates a frame using the parameters -specified by @code{pop-up-frame-alist} described next. +This variable specifies a function for creating a new frame, in order +to make a new window for displaying a buffer. It is used by the +@code{display-buffer-pop-up-frame} action function (@pxref{Display +Action Functions}). + +The value should be a function that takes no arguments and returns a +frame, or @code{nil} if no frame could be created. The default value +is a function that creates a frame using the parameters specified by +@code{pop-up-frame-alist} (see below). @end defopt @defopt pop-up-frame-alist -This variable holds an alist specifying frame parameters used by the -default value of @code{pop-up-frame-function} for making new frames. -@xref{Frame Parameters}, for more information about frame parameters. +This variable holds an alist of frame parameters (@pxref{Frame +Parameters}), which is used by the default function in +@code{pop-up-frame-function} to make a new frame. The default is +@code{nil}. @end defopt @defopt special-display-buffer-names @@ -2117,12 +2046,6 @@ This variable takes precedence over all the other options described above. @end defopt -If all options described above fail to produce a suitable window, -@code{display-buffer} tries to reuse an existing window. As a last -resort, it will try to display @var{buffer-or-name} on a separate frame. -In that case, the value of @code{pop-up-frames} is disregarded. - - @node Window History @section Window History @cindex window history diff --git a/src/ChangeLog b/src/ChangeLog index 56404765059..e732df52729 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2011-11-21 Chong Yidong <cyd@gnu.org> + + * window.c (Fnext_window, Fprevious_window): Doc fix. + 2011-11-20 Stefan Monnier <monnier@iro.umontreal.ca> * window.c (get_phys_cursor_glyph): Fix Lisp_Object/int mixup. diff --git a/src/window.c b/src/window.c index 21c0cea5d14..dd354b0ceea 100644 --- a/src/window.c +++ b/src/window.c @@ -2181,7 +2181,7 @@ next_window (Lisp_Object window, Lisp_Object minibuf, Lisp_Object all_frames, in DEFUN ("next-window", Fnext_window, Snext_window, 0, 3, 0, - doc: /* Return window following WINDOW in cyclic ordering of windows. + doc: /* Return live window after WINDOW in the cyclic ordering of windows. WINDOW must be a live window and defaults to the selected one. The optional arguments MINIBUF and ALL-FRAMES specify the set of windows to consider. @@ -2220,7 +2220,7 @@ windows, eventually ending up back at the window you started with. DEFUN ("previous-window", Fprevious_window, Sprevious_window, 0, 3, 0, - doc: /* Return window preceding WINDOW in cyclic ordering of windows. + doc: /* Return live window before WINDOW in the cyclic ordering of windows. WINDOW must be a live window and defaults to the selected one. The optional arguments MINIBUF and ALL-FRAMES specify the set of windows to consider. |