24.5 Operating on Several Buffers
The buffer-menu facility is like a “Dired for buffers”; it allows
you to request operations on various Emacs buffers by editing an Emacs
buffer containing a list of them. You can save buffers, kill them
(here called deleting them, for consistency with Dired), or display
- M-x buffer-menu
- Begin editing a buffer listing all Emacs buffers.
- M-x buffer-menu-other-window.
- Similar, but do it in another window.
buffer-menu writes a list of all Emacs
buffers1 into the
buffer ‘*Buffer List*’, and selects that buffer in Buffer Menu
The buffer is read-only, and can be
changed only through the special commands described in this section.
The usual Emacs cursor motion commands can be used in the ‘*Buffer
List*’ buffer. The following commands apply to the buffer described on
the current line.
- Request to delete (kill) the buffer, then move down. The request
shows as a ‘D’ on the line, before the buffer name. Requested
deletions take place when you type the x command.
- Like d but move up afterwards instead of down.
- Request to save the buffer. The request shows as an ‘S’ on the
line. Requested saves take place when you type the x command.
You may request both saving and deletion for the same buffer.
- Perform previously requested deletions and saves.
- Remove any request made for the current line, and move down.
- Move to previous line and remove any request made for that line.
The d, C-d, s and u commands to add or remove
flags also move down (or up) one line. They accept a numeric argument
as a repeat count.
These commands operate immediately on the buffer listed on the current
- Mark the buffer “unmodified.” The command ~ does this
immediately when you type it.
- Toggle the buffer's read-only flag. The command % does
this immediately when you type it.
- Visit the buffer as a tags table. See Select Tags Table.
There are also commands to select another buffer or buffers:
- Quit the buffer menu—immediately display the most recent formerly
visible buffer in its place.
- Immediately select this line's buffer in place of the ‘*Buffer
- Immediately select this line's buffer in another window as if by
C-x 4 b, leaving ‘*Buffer List*’ visible.
- Immediately display this line's buffer in another window, but don't
select the window.
- Immediately select this line's buffer in a full-screen window.
- Immediately set up two windows, with this line's buffer selected in
one, and the previously current buffer (aside from the buffer
‘*Buffer List*’) displayed in the other.
- Bury the buffer listed on this line.
- Mark this line's buffer to be displayed in another window if you exit
with the v command. The request shows as a ‘>’ at the
beginning of the line. (A single buffer may not have both a delete
request and a display request.)
- Immediately select this line's buffer, and also display in other windows
any buffers previously marked with the m command. If you have not
marked any buffers, this command is equivalent to 1.
There is also a command that affects the entire buffer list:
- Delete, or reinsert, lines for non-file buffers. This command toggles
the inclusion of such buffers in the buffer list.
buffer-menu actually does is create and switch to a
suitable buffer, and turn on Buffer Menu mode in it. Everything else
described above is implemented by the special commands provided in
Buffer Menu mode. One consequence of this is that you can switch from
the ‘*Buffer List*’ buffer to another Emacs buffer, and edit
there. You can reselect the ‘*Buffer List*’ buffer later, to
perform the operations already requested, or you can kill it, or pay
no further attention to it.
The list in the ‘*Buffer List*’ buffer looks exactly like the
buffer list described in List Buffers, because they really are
the same. The only difference between
list-buffers is that
buffer-menu switches to the
‘*Buffer List*’ buffer in the selected window;
list-buffers displays the same buffer in another window. If
list-buffers (that is, type C-x C-b) and select
the buffer list manually, you can use all of the commands described
Normally, the buffer ‘*Buffer List*’ is not updated automatically when
buffers are created and killed; its contents are just text. If you have
created, deleted or renamed buffers, the way to update ‘*Buffer
List*’ to show what you have done is to type g
revert-buffer) or repeat the
The ‘*Buffer List*’ buffer does automatically update every
auto-revert-interval seconds if you enable Auto Revert mode in
it. (As long as it is not marked modified.) Global Auto Revert mode
does not update the ‘*Buffer List*’ buffer by default, but it
global-auto-revert-non-file-buffers is non-
see Autorevert, for details.
buffer-menu-other-window works the same as
buffer-menu, except that it displays the buffers list in