Window Configurations
=====================
A "window configuration" records the entire layout of one frame--all
windows, their sizes, which buffers they contain, what part of each
buffer is displayed, and the values of point and the mark. You can
bring back an entire previous layout by restoring a window
configuration previously saved.
If you want to record all frames instead of just one, use a frame
configuration instead of a window configuration. Note:Frame
Configurations.
- Function: current-window-configuration &optional frame
This function returns a new object representing FRAME's current
window configuration, including the number of windows, their sizes
and current buffers, which window is the selected window, and for
each window the displayed buffer, the display-start position, and
the positions of point and the mark. It also includes the values
of `window-min-height', `window-min-width' and
`minibuffer-scroll-window'. An exception is made for point in the
current buffer, whose value is not saved.
If FRAME is omitted, the selected frame is used.
- Function: set-window-configuration configuration
This function restores the configuration of windows and buffers as
specified by CONFIGURATION, for the frame that CONFIGURATION was
created for.
The argument CONFIGURATION must be a value that was previously
returned by `current-window-configuration'. This configuration is
restored in the frame from which CONFIGURATION was made, whether
that frame is selected or not. This always counts as a window size
change and triggers execution of the `window-size-change-functions'
(Note:Window Hooks), because `set-window-configuration' doesn't
know how to tell whether the new configuration actually differs
from the old one.
If the frame which CONFIGURATION was saved from is dead, all this
function does is restore the three variables `window-min-height',
`window-min-width' and `minibuffer-scroll-window'.
Here is a way of using this function to get the same effect as
`save-window-excursion':
(let ((config (current-window-configuration)))
(unwind-protect
(progn (split-window-vertically nil)
...)
(set-window-configuration config)))
- Special Form: save-window-excursion forms...
This special form records the window configuration, executes FORMS
in sequence, then restores the earlier window configuration. The
window configuration includes the value of point and the portion
of the buffer that is visible. It also includes the choice of
selected window. However, it does not include the value of point
in the current buffer; use `save-excursion' also, if you wish to
preserve that.
Don't use this construct when `save-selected-window' is all you
need.
Exit from `save-window-excursion' always triggers execution of the
`window-size-change-functions'. (It doesn't know how to tell
whether the restored configuration actually differs from the one in
effect at the end of the FORMS.)
The return value is the value of the final form in FORMS. For
example:
(split-window)
=> #<window 25 on control.texi>
(setq w (selected-window))
=> #<window 19 on control.texi>
(save-window-excursion
(delete-other-windows w)
(switch-to-buffer "foo")
'do-something)
=> do-something
;; The screen is now split again.
- Function: window-configuration-p object
This function returns `t' if OBJECT is a window configuration.
- Function: compare-window-configurations config1 config2
This function compares two window configurations as regards the
structure of windows, but ignores the values of point and mark and
the saved scrolling positions--it can return `t' even if those
aspects differ.
The function `equal' can also compare two window configurations; it
regards configurations as unequal if they differ in any respect,
even a saved point or mark.
Primitives to look inside of window configurations would make sense,
but none are implemented. It is not clear they are useful enough to be
worth implementing.