Go to the first, previous, next, last section, table of contents.


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. See section Frame Configurations.

Function: current-window-configuration
This function returns a new object representing the selected 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.

Function: set-window-configuration configuration
This function restores the configuration of windows and buffers as specified by configuration. 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 (see section Hooks for Window Scrolling and Changes), 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.


Go to the first, previous, next, last section, table of contents.