After a command uses
display-buffer to put a buffer on the
screen, the user may decide to hide it and return to the previous
configuration of the Emacs display. We call that quitting the
window. The way to do this is to call
quit-window while the
window used by
display-buffer is the selected window.
The right way to restore the previous configuration of the display depends on what was done to the window where the buffer now appears. It might be right to delete that window, or delete its frame, or just display another buffer in that window. One complication is that the user may have changed the window configuration since the act of displaying that buffer, and it would be undesirable to undo the user’s explicitly requested changes.
quit-window to do the right thing,
display-buffer saves information about what it did in the
quit-restore parameter (see Window Parameters).
This command quits window and buries its buffer. The argument
window must be a live window and defaults to the selected one.
With prefix argument kill non-
nil, it kills the buffer
instead of burying it.
quit-window first runs
Then it calls the function
quit-restore-window, described next,
which does the hard work.
You can get more control by calling
This function handles window and its buffer after quitting. The
optional argument window must be a live window and defaults to
the selected one. The function takes account of the window’s
The optional argument bury-or-kill specifies how to deal with window’s buffer. The following values are meaningful:
This means to not deal with the buffer in any particular way. As a
consequence, if window is not deleted, invoking
switch-to-prev-buffer will usually show the buffer again.
This means that if window is not deleted, its buffer is moved to
the end of window’s list of previous buffers (see Window History), so it’s less likely that future invocations of
switch-to-prev-buffer will switch to it. Also, it moves the
buffer to the end of the frame’s buffer list (see The Buffer List).
This means that if window is not deleted, its buffer is removed
from window’s list of previous buffers. Also, it moves the
buffer to the end of the frame’s buffer list. This is the most
reliable way to prevent
switch-to-prev-buffer from switching to
this buffer again, short of killing the buffer.
This means to kill window’s buffer.
The argument bury-or-kill also specifies what to do with
window’s frame when window should be deleted, if it is the
only window on its frame, and there are other frames on that frame’s
terminal. If bury-or-kill equals
kill, it means to
delete the frame. Otherwise, the fate of the frame is determined by
frame-auto-hide-function (see below) with that frame as
This function always sets window’s
nil unless it deletes the window.
The window window’s
quit-restore parameter (see Window Parameters) should be
nil or a list of four elements:
(method obuffer owindow this-buffer)
The first element, method, is one of the four symbols
window control how to delete window,
other control displaying some other
buffer in it.
window means that the window has been specially
frame means that a separate
frame has been created;
same, that the window has only ever
displayed this buffer;
other, that the window showed another
The second element, obuffer, is either one of the symbols
frame, or a list of the form
(prev-buffer prev-window-start prev-window-point height)
which says which buffer was shown in window before, that buffer’s window start (see The Window Start and End Positions) and window point (see Windows and Point) positions at that time, and window’s height at that time. If prev-buffer is still live when quitting window, quitting the window may reuse window to display prev-buffer.
The third element, owindow, is the window that was selected just before the displaying was done. If quitting deletes window, it tries to select owindow.
The fourth element, this-buffer, is the buffer whose displaying
quit-restore parameter. Quitting window may delete
that window only if it still shows that buffer.
Quitting window tries to delete it if and only if (1)
method is either
frame, (2) the window
has no history of previously-displayed buffers and (3)
this-buffer equals the buffer currently displayed in
window. If window is part of an atomic window
(see Atomic Windows), quitting will try to delete the root of that
atomic window instead. In either case, it tries to avoid signaling an
error when window cannot be deleted.
If obuffer is a list, and prev-buffer is still live, quitting displays prev-buffer in window according to the rest of the elements of obuffer. This includes resizing the window to height if it was temporarily resized to display this-buffer.
Otherwise, if window was previously used for displaying other buffers (see Window History), the most recent buffer in that history will be displayed.
The following option specifies a function to do the right thing with a frame containing one window when quitting that window.
The function specified by this option is called to automatically hide frames. This function is called with one argument—a frame.
The function specified here is called by
(see The Buffer List) when the selected window is dedicated and shows
the buffer to bury. It is also called by
(see above) when the frame of the window to quit has been specially
created for displaying that window’s buffer and the buffer is not
The default is to call
iconify-frame (see Visibility of Frames). Alternatively, you may specify either
(see Deleting Frames) to remove the frame from its display,
make-frame-invisible to make the frame invisible,
to leave the frame unchanged, or any other function that can take a
frame as its sole argument.
Note that the function specified by this option is called only if the specified frame contains just one live window and there is at least one other frame on the same terminal.
For a particular frame, the value specified here may be overridden by
auto-hide-function frame parameter (see Frame Interaction Parameters).