Each window remembers in a list the buffers it has previously
displayed, and the order in which these buffers were removed from it.
This history is used, for example, by replace-buffer-in-windows
(see Buffers and Windows), and when quitting windows
(see Quitting Windows). The list is automatically maintained by
Emacs, but you can use the following functions to explicitly inspect
or alter it:
This function returns a list specifying the previous contents of window. The optional argument window should be a live window and defaults to the selected one.
Each list element has the form (buffer window-start
window-pos)
, where buffer is a buffer previously shown in
the window, window-start is the window start position
(see The Window Start and End Positions) when that buffer was last shown, and
window-pos is the point position (see Windows and Point) when
that buffer was last shown in window.
The list is ordered so that earlier elements correspond to more recently-shown buffers, and the first element usually corresponds to the buffer most recently removed from the window.
This function sets window’s previous buffers to the value of
prev-buffers. The argument window must be a live window
and defaults to the selected one. The argument prev-buffers
should be a list of the same form as that returned by
window-prev-buffers
.
In addition, each window maintains a list of next buffers, which
is a list of buffers re-shown by switch-to-prev-buffer
(see
below). This list is mainly used by switch-to-prev-buffer
and
switch-to-next-buffer
for choosing buffers to switch to.
This function returns the list of buffers recently re-shown in
window via switch-to-prev-buffer
. The window
argument must denote a live window or nil
(meaning the selected
window).
This function sets the next buffer list of window to
next-buffers. The window argument should be a live window
or nil
(meaning the selected window). The argument
next-buffers should be a list of buffers.
The following commands can be used to cycle through the global buffer
list, much like bury-buffer
and unbury-buffer
. However,
they cycle according to the specified window’s history list, rather
than the global buffer list. In addition, they restore
window-specific window start and point positions, and may show a
buffer even if it is already shown in another window. The
switch-to-prev-buffer
command, in particular, is used by
replace-buffer-in-windows
, bury-buffer
and
quit-window
to find a replacement buffer for a window.
This command displays the previous buffer in window. The
argument window should be a live window or nil
(meaning
the selected window). If the optional argument bury-or-kill is
non-nil
, this means that the buffer currently shown in
window is about to be buried or killed and consequently should
not be switched to in future invocations of this command.
The previous buffer is usually the buffer shown before the buffer
currently shown in window. However, a buffer that has been buried
or killed, or has been already shown by a recent invocation of
switch-to-prev-buffer
, does not qualify as previous buffer.
If repeated invocations of this command have already shown all buffers previously shown in window, further invocations will show buffers from the buffer list of the frame window appears on (see The Buffer List).
The option switch-to-prev-buffer-skip
described below can be
used to inhibit switching to certain buffers, for example, to those
already shown in another window. Also, if window’s frame has a
buffer-predicate
parameter (see Buffer Parameters), that
predicate may inhibit switching to certain buffers.
This command switches to the next buffer in window, thus undoing
the effect of the last switch-to-prev-buffer
command in
window. The argument window must be a live window and
defaults to the selected one.
If there is no recent invocation of switch-to-prev-buffer
that
can be undone, this function tries to show a buffer from the buffer list
of the frame window appears on (see The Buffer List).
The option switch-to-prev-buffer-skip
and the
buffer-predicate
(see Buffer Parameters) of window’s
frame affect this command as they do for switch-to-prev-buffer
.
By default switch-to-prev-buffer
and
switch-to-next-buffer
can switch to a buffer that is already
shown in another window. The following option can be used to override
this behavior.
If this variable is nil
, switch-to-prev-buffer
may
switch to any buffer, including those already shown in other windows.
If this variable is non-nil
, switch-to-prev-buffer
will
refrain from switching to certain buffers. The following values can
be used:
this
means do not switch to a buffer shown on the frame that
hosts the window switch-to-prev-buffer
is acting upon.
visible
means do not switch to a buffer shown on any visible
frame.
t
means do not switch to a buffer shown on any live frame.
switch-to-prev-buffer
, a buffer switch-to-prev-buffer
intends to switch to and the bury-or-kill argument of
switch-to-prev-buffer
. If that function returns
non-nil
, switch-to-prev-buffer
will refrain from
switching to the buffer specified by the second argument.
The command switch-to-next-buffer
obeys this option in a
similar way. If this option specifies a function,
switch-to-next-buffer
will call that function with the third
argument always nil
.
Note that since switch-to-prev-buffer
is called by
bury-buffer
, replace-buffer-in-windows
and
quit-restore-window
as well, customizing this option may also
affect the behavior of Emacs when a window is quit or a buffer gets
buried or killed.
Note also that under certain circumstances
switch-to-prev-buffer
and switch-to-next-buffer
may
ignore this option, for example, when there is only one buffer left
these functions can switch to.
This user option should be either a regular expression or a list of
regular expressions. Buffers whose names match one of those regular
expressions will be ignored by switch-to-prev-buffer
and
switch-to-next-buffer
(except when there’s no other buffer to
switch to).