| 1 |
@c This is part of the Emacs manual. |
|---|
| 2 |
@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, |
|---|
| 3 |
@c 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
|---|
| 4 |
@c See file emacs.texi for copying conditions. |
|---|
| 5 |
@node Buffers, Windows, Files, Top |
|---|
| 6 |
@chapter Using Multiple Buffers |
|---|
| 7 |
|
|---|
| 8 |
@cindex buffers |
|---|
| 9 |
The text you are editing in Emacs resides in an object called a |
|---|
| 10 |
@dfn{buffer}. Each time you visit a file, a buffer is created to hold the |
|---|
| 11 |
file's text. Each time you invoke Dired, a buffer is created to hold the |
|---|
| 12 |
directory listing. If you send a message with @kbd{C-x m}, a buffer named |
|---|
| 13 |
@samp{*mail*} is used to hold the text of the message. When you ask for a |
|---|
| 14 |
command's documentation, that appears in a buffer called @samp{*Help*}. |
|---|
| 15 |
|
|---|
| 16 |
@cindex selected buffer |
|---|
| 17 |
@cindex current buffer |
|---|
| 18 |
At any time, one and only one buffer is @dfn{current}. It is also |
|---|
| 19 |
called the @dfn{selected buffer}. Often we say that a command operates on |
|---|
| 20 |
``the buffer'' as if there were only one; but really this means that the |
|---|
| 21 |
command operates on the current buffer (most commands do). |
|---|
| 22 |
|
|---|
| 23 |
When Emacs has multiple windows, each window has its own chosen |
|---|
| 24 |
buffer and displays it; at any time, only one of the windows is |
|---|
| 25 |
selected, and its chosen buffer is the current buffer. Each window's |
|---|
| 26 |
mode line normally displays the name of the window's chosen buffer |
|---|
| 27 |
(@pxref{Windows}). |
|---|
| 28 |
|
|---|
| 29 |
Each buffer has a name, which can be of any length, and you can select |
|---|
| 30 |
any buffer by giving its name. Most buffers are made by visiting files, |
|---|
| 31 |
and their names are derived from the files' names. But you can also create |
|---|
| 32 |
an empty buffer with any name you want. A newly started Emacs has a buffer |
|---|
| 33 |
named @samp{*scratch*} which can be used for evaluating Lisp expressions in |
|---|
| 34 |
Emacs. The distinction between upper and lower case matters in buffer |
|---|
| 35 |
names. |
|---|
| 36 |
|
|---|
| 37 |
Each buffer records individually what file it is visiting, whether it is |
|---|
| 38 |
modified, and what major mode and minor modes are in effect in it |
|---|
| 39 |
(@pxref{Major Modes}). Any Emacs variable can be made @dfn{local to} a |
|---|
| 40 |
particular buffer, meaning its value in that buffer can be different from |
|---|
| 41 |
the value in other buffers. @xref{Locals}. |
|---|
| 42 |
|
|---|
| 43 |
@cindex buffer size, maximum |
|---|
| 44 |
A buffer's size cannot be larger than some maximum, which is defined |
|---|
| 45 |
by the largest buffer position representable by the @dfn{Emacs integer} |
|---|
| 46 |
data type. This is because Emacs tracks buffer positions using that |
|---|
| 47 |
data type. For 32-bit machines, the largest buffer size is 256 |
|---|
| 48 |
megabytes. |
|---|
| 49 |
|
|---|
| 50 |
@menu |
|---|
| 51 |
* Select Buffer:: Creating a new buffer or reselecting an old one. |
|---|
| 52 |
* List Buffers:: Getting a list of buffers that exist. |
|---|
| 53 |
* Misc Buffer:: Renaming; changing read-onlyness; copying text. |
|---|
| 54 |
* Kill Buffer:: Killing buffers you no longer need. |
|---|
| 55 |
* Several Buffers:: How to go through the list of all buffers |
|---|
| 56 |
and operate variously on several of them. |
|---|
| 57 |
* Indirect Buffers:: An indirect buffer shares the text of another buffer. |
|---|
| 58 |
* Buffer Convenience:: Convenience and customization features for |
|---|
| 59 |
buffer handling. |
|---|
| 60 |
@end menu |
|---|
| 61 |
|
|---|
| 62 |
@node Select Buffer |
|---|
| 63 |
@section Creating and Selecting Buffers |
|---|
| 64 |
@cindex change buffers |
|---|
| 65 |
@cindex switch buffers |
|---|
| 66 |
|
|---|
| 67 |
@table @kbd |
|---|
| 68 |
@item C-x b @var{buffer} @key{RET} |
|---|
| 69 |
Select or create a buffer named @var{buffer} (@code{switch-to-buffer}). |
|---|
| 70 |
@item C-x 4 b @var{buffer} @key{RET} |
|---|
| 71 |
Similar, but select @var{buffer} in another window |
|---|
| 72 |
(@code{switch-to-buffer-other-window}). |
|---|
| 73 |
@item C-x 5 b @var{buffer} @key{RET} |
|---|
| 74 |
Similar, but select @var{buffer} in a separate frame |
|---|
| 75 |
(@code{switch-to-buffer-other-frame}). |
|---|
| 76 |
@item C-x @key{LEFT} |
|---|
| 77 |
Select the previous buffer in the list of existing buffers. |
|---|
| 78 |
@item C-x @key{RIGHT} |
|---|
| 79 |
Select the next buffer in the list of existing buffers. |
|---|
| 80 |
@item C-u M-g M-g |
|---|
| 81 |
@itemx C-u M-g g |
|---|
| 82 |
Read a number @var{n} and move to line @var{n} in the most recently |
|---|
| 83 |
selected buffer other than the current buffer. |
|---|
| 84 |
@end table |
|---|
| 85 |
|
|---|
| 86 |
@kindex C-x b |
|---|
| 87 |
@findex switch-to-buffer |
|---|
| 88 |
To select the buffer named @var{bufname}, type @kbd{C-x b @var{bufname} |
|---|
| 89 |
@key{RET}}. This runs the command @code{switch-to-buffer} with argument |
|---|
| 90 |
@var{bufname}. You can use completion to enter the buffer |
|---|
| 91 |
name (@pxref{Completion}). An empty argument to @kbd{C-x b} |
|---|
| 92 |
specifies the buffer that was current most recently among those not |
|---|
| 93 |
now displayed in any window. |
|---|
| 94 |
|
|---|
| 95 |
@kindex C-x @key{LEFT} |
|---|
| 96 |
@kindex C-x @key{RIGHT} |
|---|
| 97 |
@findex next-buffer |
|---|
| 98 |
@findex previous-buffer |
|---|
| 99 |
For conveniently switching between a few buffers, use the commands |
|---|
| 100 |
@kbd{C-x @key{LEFT}} and @kbd{C-x @key{RIGHT}}. @kbd{C-x @key{RIGHT}} |
|---|
| 101 |
(@code{previous-buffer}) selects the previous buffer (following the order |
|---|
| 102 |
of most recent selection in the current frame), while @kbd{C-x @key{LEFT}} |
|---|
| 103 |
(@code{next-buffer}) moves through buffers in the reverse direction. |
|---|
| 104 |
|
|---|
| 105 |
@kindex C-x 4 b |
|---|
| 106 |
@findex switch-to-buffer-other-window |
|---|
| 107 |
@vindex even-window-heights |
|---|
| 108 |
To select a buffer in a window other than the current one, type |
|---|
| 109 |
@kbd{C-x 4 b @var{bufname} @key{RET}}. This runs the command |
|---|
| 110 |
@code{switch-to-buffer-other-window} which displays the buffer |
|---|
| 111 |
@var{bufname} in another window. By default, if displaying the buffer |
|---|
| 112 |
causes two vertically adjacent windows to be displayed, the heights of |
|---|
| 113 |
those windows are evened out; to countermand that and preserve the |
|---|
| 114 |
window configuration, set the variable @code{even-window-heights} to |
|---|
| 115 |
@code{nil}. |
|---|
| 116 |
|
|---|
| 117 |
@kindex C-x 5 b |
|---|
| 118 |
@findex switch-to-buffer-other-frame |
|---|
| 119 |
Similarly, @kbd{C-x 5 b @var{buffer} @key{RET}} runs the command |
|---|
| 120 |
@code{switch-to-buffer-other-frame} which selects a buffer in another |
|---|
| 121 |
frame. |
|---|
| 122 |
|
|---|
| 123 |
@vindex display-buffer-reuse-frames |
|---|
| 124 |
You can control how certain buffers are handled by these commands by |
|---|
| 125 |
customizing the variables @code{special-display-buffer-names}, |
|---|
| 126 |
@code{special-display-regexps}, @code{same-window-buffer-names}, and |
|---|
| 127 |
@code{same-window-regexps}. See @ref{Force Same Window}, and |
|---|
| 128 |
@ref{Special Buffer Frames}, for more about these variables. In |
|---|
| 129 |
addition, if the value of @code{display-buffer-reuse-frames} is |
|---|
| 130 |
non-@code{nil}, and the buffer you want to switch to is already |
|---|
| 131 |
displayed in some frame, Emacs will just raise that frame. |
|---|
| 132 |
|
|---|
| 133 |
Most buffers are created by visiting files, or by Emacs commands that |
|---|
| 134 |
want to display some text, but you can also create a buffer explicitly |
|---|
| 135 |
by typing @kbd{C-x b @var{bufname} @key{RET}}. This makes a new, empty |
|---|
| 136 |
buffer that is not visiting any file, and selects it for editing. Such |
|---|
| 137 |
buffers are used for making notes to yourself. If you try to save one, |
|---|
| 138 |
you are asked for the file name to use. The new buffer's major mode is |
|---|
| 139 |
determined by the value of @code{default-major-mode} (@pxref{Major |
|---|
| 140 |
Modes}). |
|---|
| 141 |
|
|---|
| 142 |
Note that @kbd{C-x C-f}, and any other command for visiting a file, |
|---|
| 143 |
can also be used to switch to an existing file-visiting buffer. |
|---|
| 144 |
@xref{Visiting}. |
|---|
| 145 |
|
|---|
| 146 |
@kbd{C-u M-g M-g}, that is @code{goto-line} with a prefix argument |
|---|
| 147 |
of just @kbd{C-u}, reads a number @var{n} using the minibuffer, |
|---|
| 148 |
selects the most recently selected buffer other than the current |
|---|
| 149 |
buffer in another window, and then moves point to the beginning of |
|---|
| 150 |
line number @var{n} in that buffer. This is mainly useful in a buffer |
|---|
| 151 |
that refers to line numbers in another buffer: if point is on or just |
|---|
| 152 |
after a number, @code{goto-line} uses that number as the default for |
|---|
| 153 |
@var{n}. Note that prefix arguments other than just @kbd{C-u} behave |
|---|
| 154 |
differently. @kbd{C-u 4 M-g M-g} goes to line 4 in the @emph{current} |
|---|
| 155 |
buffer, without reading a number from the minibuffer. (Remember that |
|---|
| 156 |
@kbd{M-g M-g} without prefix argument reads a number @var{n} and then |
|---|
| 157 |
moves to line number @var{n} in the current buffer.) |
|---|
| 158 |
|
|---|
| 159 |
Emacs uses buffer names that start with a space for internal purposes. |
|---|
| 160 |
It treats these buffers specially in minor ways---for example, by |
|---|
| 161 |
default they do not record undo information. It is best to avoid using |
|---|
| 162 |
such buffer names yourself. |
|---|
| 163 |
|
|---|
| 164 |
@node List Buffers |
|---|
| 165 |
@section Listing Existing Buffers |
|---|
| 166 |
|
|---|
| 167 |
@table @kbd |
|---|
| 168 |
@item C-x C-b |
|---|
| 169 |
List the existing buffers (@code{list-buffers}). |
|---|
| 170 |
@end table |
|---|
| 171 |
|
|---|
| 172 |
@cindex listing current buffers |
|---|
| 173 |
@kindex C-x C-b |
|---|
| 174 |
@findex list-buffers |
|---|
| 175 |
To display a list of existing buffers, type @kbd{C-x C-b}. Each |
|---|
| 176 |
line in the list shows one buffer's name, major mode and visited file. |
|---|
| 177 |
The buffers are listed in the order that they were current; the |
|---|
| 178 |
buffers that were current most recently come first. |
|---|
| 179 |
|
|---|
| 180 |
@samp{*} in the first field of a line indicates the buffer is |
|---|
| 181 |
``modified.'' If several buffers are modified, it may be time to save |
|---|
| 182 |
some with @kbd{C-x s} (@pxref{Save Commands}). @samp{%} indicates a |
|---|
| 183 |
read-only buffer. @samp{.} marks the current buffer. Here is an |
|---|
| 184 |
example of a buffer list:@refill |
|---|
| 185 |
|
|---|
| 186 |
@smallexample |
|---|
| 187 |
CRM Buffer Size Mode File |
|---|
| 188 |
. * .emacs 3294 Emacs-Lisp ~/.emacs |
|---|
| 189 |
% *Help* 101 Help |
|---|
| 190 |
search.c 86055 C ~/cvs/emacs/src/search.c |
|---|
| 191 |
% src 20959 Dired by name ~/cvs/emacs/src/ |
|---|
| 192 |
* *mail* 42 Mail |
|---|
| 193 |
% HELLO 1607 Fundamental ~/cvs/emacs/etc/HELLO |
|---|
| 194 |
% NEWS 481184 Outline ~/cvs/emacs/etc/NEWS |
|---|
| 195 |
*scratch* 191 Lisp Interaction |
|---|
| 196 |
* *Messages* 1554 Fundamental |
|---|
| 197 |
@end smallexample |
|---|
| 198 |
|
|---|
| 199 |
@noindent |
|---|
| 200 |
Note that the buffer @samp{*Help*} was made by a help request; it is |
|---|
| 201 |
not visiting any file. The buffer @code{src} was made by Dired on the |
|---|
| 202 |
directory @file{~/cvs/emacs/src/}. You can list only buffers that are |
|---|
| 203 |
visiting files by giving the command a prefix argument, as in |
|---|
| 204 |
@kbd{C-u C-x C-b}. |
|---|
| 205 |
|
|---|
| 206 |
@code{list-buffers} omits buffers whose names begin with a space, |
|---|
| 207 |
unless they visit files: such buffers are used internally by Emacs. |
|---|
| 208 |
|
|---|
| 209 |
@need 2000 |
|---|
| 210 |
@node Misc Buffer |
|---|
| 211 |
@section Miscellaneous Buffer Operations |
|---|
| 212 |
|
|---|
| 213 |
@table @kbd |
|---|
| 214 |
@item C-x C-q |
|---|
| 215 |
Toggle read-only status of buffer (@code{toggle-read-only}). |
|---|
| 216 |
@item M-x rename-buffer @key{RET} @var{name} @key{RET} |
|---|
| 217 |
Change the name of the current buffer. |
|---|
| 218 |
@item M-x rename-uniquely |
|---|
| 219 |
Rename the current buffer by adding @samp{<@var{number}>} to the end. |
|---|
| 220 |
@item M-x view-buffer @key{RET} @var{buffer} @key{RET} |
|---|
| 221 |
Scroll through buffer @var{buffer}. |
|---|
| 222 |
@end table |
|---|
| 223 |
|
|---|
| 224 |
@kindex C-x C-q |
|---|
| 225 |
@vindex buffer-read-only |
|---|
| 226 |
@cindex read-only buffer |
|---|
| 227 |
A buffer can be @dfn{read-only}, which means that commands to change |
|---|
| 228 |
its contents are not allowed. The mode line indicates read-only |
|---|
| 229 |
buffers with @samp{%%} or @samp{%*} near the left margin. Read-only |
|---|
| 230 |
buffers are usually made by subsystems such as Dired and Rmail that |
|---|
| 231 |
have special commands to operate on the text; also by visiting a file |
|---|
| 232 |
whose access control says you cannot write it. |
|---|
| 233 |
|
|---|
| 234 |
@findex toggle-read-only |
|---|
| 235 |
If you wish to make changes in a read-only buffer, use the command |
|---|
| 236 |
@kbd{C-x C-q} (@code{toggle-read-only}). It makes a read-only buffer |
|---|
| 237 |
writable, and makes a writable buffer read-only. This |
|---|
| 238 |
works by setting the variable @code{buffer-read-only}, which has a local |
|---|
| 239 |
value in each buffer and makes the buffer read-only if its value is |
|---|
| 240 |
non-@code{nil}. If you have files under version control, you may find |
|---|
| 241 |
it convenient to bind @kbd{C-x C-q} to @code{vc-toggle-read-only} |
|---|
| 242 |
instead. Then, typing @kbd{C-x C-q} not only changes the read-only |
|---|
| 243 |
flag, but it also checks the file in or out. @xref{Version |
|---|
| 244 |
Control}. |
|---|
| 245 |
|
|---|
| 246 |
@findex rename-buffer |
|---|
| 247 |
@kbd{M-x rename-buffer} changes the name of the current buffer. You |
|---|
| 248 |
specify the new name as a minibuffer argument; there is no default. |
|---|
| 249 |
If you specify a name that is in use for some other buffer, an error |
|---|
| 250 |
happens and no renaming is done. |
|---|
| 251 |
|
|---|
| 252 |
@findex rename-uniquely |
|---|
| 253 |
@kbd{M-x rename-uniquely} renames the current buffer to a similar |
|---|
| 254 |
name with a numeric suffix added to make it both different and unique. |
|---|
| 255 |
This command does not need an argument. It is useful for creating |
|---|
| 256 |
multiple shell buffers: if you rename the @samp{*shell*} buffer, then |
|---|
| 257 |
do @kbd{M-x shell} again, it makes a new shell buffer named |
|---|
| 258 |
@samp{*shell*}; meanwhile, the old shell buffer continues to exist |
|---|
| 259 |
under its new name. This method is also good for mail buffers, |
|---|
| 260 |
compilation buffers, and most Emacs features that create special |
|---|
| 261 |
buffers with particular names. (With some of these features, such as |
|---|
| 262 |
@kbd{M-x compile}, @kbd{M-x grep} an @kbd{M-x info}, you need to |
|---|
| 263 |
switch to some other buffer before using the command, in order for it |
|---|
| 264 |
to make a different buffer.) |
|---|
| 265 |
|
|---|
| 266 |
@findex view-buffer |
|---|
| 267 |
@kbd{M-x view-buffer} is much like @kbd{M-x view-file} (@pxref{Misc |
|---|
| 268 |
File Ops}) except that it examines an already existing Emacs buffer. |
|---|
| 269 |
View mode provides commands for scrolling through the buffer |
|---|
| 270 |
conveniently but not for changing it. When you exit View mode with |
|---|
| 271 |
@kbd{q}, that switches back to the buffer (and the position) which was |
|---|
| 272 |
previously displayed in the window. Alternatively, if you exit View |
|---|
| 273 |
mode with @kbd{e}, the buffer and the value of point that resulted from |
|---|
| 274 |
your perusal remain in effect. |
|---|
| 275 |
|
|---|
| 276 |
The commands @kbd{M-x append-to-buffer} and @kbd{M-x insert-buffer} |
|---|
| 277 |
can be used to copy text from one buffer to another. @xref{Accumulating |
|---|
| 278 |
Text}. |
|---|
| 279 |
|
|---|
| 280 |
@node Kill Buffer |
|---|
| 281 |
@section Killing Buffers |
|---|
| 282 |
|
|---|
| 283 |
@cindex killing buffers |
|---|
| 284 |
If you continue an Emacs session for a while, you may accumulate a |
|---|
| 285 |
large number of buffers. You may then find it convenient to @dfn{kill} |
|---|
| 286 |
the buffers you no longer need. On most operating systems, killing a |
|---|
| 287 |
buffer releases its space back to the operating system so that other |
|---|
| 288 |
programs can use it. Here are some commands for killing buffers: |
|---|
| 289 |
|
|---|
| 290 |
@table @kbd |
|---|
| 291 |
@item C-x k @var{bufname} @key{RET} |
|---|
| 292 |
Kill buffer @var{bufname} (@code{kill-buffer}). |
|---|
| 293 |
@item M-x kill-some-buffers |
|---|
| 294 |
Offer to kill each buffer, one by one. |
|---|
| 295 |
@end table |
|---|
| 296 |
|
|---|
| 297 |
@findex kill-buffer |
|---|
| 298 |
@findex kill-some-buffers |
|---|
| 299 |
@kindex C-x k |
|---|
| 300 |
|
|---|
| 301 |
@kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you |
|---|
| 302 |
specify in the minibuffer. The default, used if you type just |
|---|
| 303 |
@key{RET} in the minibuffer, is to kill the current buffer. If you |
|---|
| 304 |
kill the current buffer, another buffer becomes current: one that was |
|---|
| 305 |
current in the recent past but is not displayed in any window now. If |
|---|
| 306 |
you ask to kill a file-visiting buffer that is modified (has unsaved |
|---|
| 307 |
editing), then you must confirm with @kbd{yes} before the buffer is |
|---|
| 308 |
killed. |
|---|
| 309 |
|
|---|
| 310 |
The command @kbd{M-x kill-some-buffers} asks about each buffer, one by |
|---|
| 311 |
one. An answer of @kbd{y} means to kill the buffer. Killing the current |
|---|
| 312 |
buffer or a buffer containing unsaved changes selects a new buffer or asks |
|---|
| 313 |
for confirmation just like @code{kill-buffer}. |
|---|
| 314 |
|
|---|
| 315 |
The buffer menu feature (@pxref{Several Buffers}) is also convenient |
|---|
| 316 |
for killing various buffers. |
|---|
| 317 |
|
|---|
| 318 |
@vindex kill-buffer-hook |
|---|
| 319 |
If you want to do something special every time a buffer is killed, you |
|---|
| 320 |
can add hook functions to the hook @code{kill-buffer-hook} (@pxref{Hooks}). |
|---|
| 321 |
|
|---|
| 322 |
@findex clean-buffer-list |
|---|
| 323 |
If you run one Emacs session for a period of days, as many people do, |
|---|
| 324 |
it can fill up with buffers that you used several days ago. The command |
|---|
| 325 |
@kbd{M-x clean-buffer-list} is a convenient way to purge them; it kills |
|---|
| 326 |
all the unmodified buffers that you have not used for a long time. An |
|---|
| 327 |
ordinary buffer is killed if it has not been displayed for three days; |
|---|
| 328 |
however, you can specify certain buffers that should never be killed |
|---|
| 329 |
automatically, and others that should be killed if they have been unused |
|---|
| 330 |
for a mere hour. |
|---|
| 331 |
|
|---|
| 332 |
@cindex Midnight mode |
|---|
| 333 |
@vindex midnight-mode |
|---|
| 334 |
@vindex midnight-hook |
|---|
| 335 |
You can also have this buffer purging done for you, every day at |
|---|
| 336 |
midnight, by enabling Midnight mode. Midnight mode operates each day at |
|---|
| 337 |
midnight; at that time, it runs @code{clean-buffer-list}, or whichever |
|---|
| 338 |
functions you have placed in the normal hook @code{midnight-hook} |
|---|
| 339 |
(@pxref{Hooks}). |
|---|
| 340 |
|
|---|
| 341 |
To enable Midnight mode, use the Customization buffer to set the |
|---|
| 342 |
variable @code{midnight-mode} to @code{t}. @xref{Easy Customization}. |
|---|
| 343 |
|
|---|
| 344 |
@node Several Buffers |
|---|
| 345 |
@section Operating on Several Buffers |
|---|
| 346 |
@cindex buffer menu |
|---|
| 347 |
|
|---|
| 348 |
The @dfn{buffer-menu} facility is like a ``Dired for buffers''; it allows |
|---|
| 349 |
you to request operations on various Emacs buffers by editing an Emacs |
|---|
| 350 |
buffer containing a list of them. You can save buffers, kill them |
|---|
| 351 |
(here called @dfn{deleting} them, for consistency with Dired), or display |
|---|
| 352 |
them. |
|---|
| 353 |
|
|---|
| 354 |
@table @kbd |
|---|
| 355 |
@item M-x buffer-menu |
|---|
| 356 |
Begin editing a buffer listing all Emacs buffers. |
|---|
| 357 |
@item M-x buffer-menu-other-window. |
|---|
| 358 |
Similar, but do it in another window. |
|---|
| 359 |
@end table |
|---|
| 360 |
|
|---|
| 361 |
@findex buffer-menu |
|---|
| 362 |
@findex buffer-menu-other-window |
|---|
| 363 |
The command @code{buffer-menu} writes a list of all Emacs |
|---|
| 364 |
buffers@footnote{Buffers which don't visit files and whose names begin |
|---|
| 365 |
with a space are omitted: these are used internally by Emacs.} into the |
|---|
| 366 |
buffer @samp{*Buffer List*}, and selects that buffer in Buffer Menu |
|---|
| 367 |
mode. |
|---|
| 368 |
|
|---|
| 369 |
The buffer is read-only, and can be |
|---|
| 370 |
changed only through the special commands described in this section. |
|---|
| 371 |
The usual Emacs cursor motion commands can be used in the @samp{*Buffer |
|---|
| 372 |
List*} buffer. The following commands apply to the buffer described on |
|---|
| 373 |
the current line. |
|---|
| 374 |
|
|---|
| 375 |
@table @kbd |
|---|
| 376 |
@item d |
|---|
| 377 |
Request to delete (kill) the buffer, then move down. The request |
|---|
| 378 |
shows as a @samp{D} on the line, before the buffer name. Requested |
|---|
| 379 |
deletions take place when you type the @kbd{x} command. |
|---|
| 380 |
@item C-d |
|---|
| 381 |
Like @kbd{d} but move up afterwards instead of down. |
|---|
| 382 |
@item s |
|---|
| 383 |
Request to save the buffer. The request shows as an @samp{S} on the |
|---|
| 384 |
line. Requested saves take place when you type the @kbd{x} command. |
|---|
| 385 |
You may request both saving and deletion for the same buffer. |
|---|
| 386 |
@item x |
|---|
| 387 |
Perform previously requested deletions and saves. |
|---|
| 388 |
@item u |
|---|
| 389 |
Remove any request made for the current line, and move down. |
|---|
| 390 |
@item @key{DEL} |
|---|
| 391 |
Move to previous line and remove any request made for that line. |
|---|
| 392 |
@end table |
|---|
| 393 |
|
|---|
| 394 |
The @kbd{d}, @kbd{C-d}, @kbd{s} and @kbd{u} commands to add or remove |
|---|
| 395 |
flags also move down (or up) one line. They accept a numeric argument |
|---|
| 396 |
as a repeat count. |
|---|
| 397 |
|
|---|
| 398 |
These commands operate immediately on the buffer listed on the current |
|---|
| 399 |
line: |
|---|
| 400 |
|
|---|
| 401 |
@table @kbd |
|---|
| 402 |
@item ~ |
|---|
| 403 |
Mark the buffer ``unmodified.'' The command @kbd{~} does this |
|---|
| 404 |
immediately when you type it. |
|---|
| 405 |
@item % |
|---|
| 406 |
Toggle the buffer's read-only flag. The command @kbd{%} does |
|---|
| 407 |
this immediately when you type it. |
|---|
| 408 |
@item t |
|---|
| 409 |
Visit the buffer as a tags table. @xref{Select Tags Table}. |
|---|
| 410 |
@end table |
|---|
| 411 |
|
|---|
| 412 |
There are also commands to select another buffer or buffers: |
|---|
| 413 |
|
|---|
| 414 |
@table @kbd |
|---|
| 415 |
@item q |
|---|
| 416 |
Quit the buffer menu---immediately display the most recent formerly |
|---|
| 417 |
visible buffer in its place. |
|---|
| 418 |
@item @key{RET} |
|---|
| 419 |
@itemx f |
|---|
| 420 |
Immediately select this line's buffer in place of the @samp{*Buffer |
|---|
| 421 |
List*} buffer. |
|---|
| 422 |
@item o |
|---|
| 423 |
Immediately select this line's buffer in another window as if by |
|---|
| 424 |
@kbd{C-x 4 b}, leaving @samp{*Buffer List*} visible. |
|---|
| 425 |
@item C-o |
|---|
| 426 |
Immediately display this line's buffer in another window, but don't |
|---|
| 427 |
select the window. |
|---|
| 428 |
@item 1 |
|---|
| 429 |
Immediately select this line's buffer in a full-screen window. |
|---|
| 430 |
@item 2 |
|---|
| 431 |
Immediately set up two windows, with this line's buffer selected in |
|---|
| 432 |
one, and the previously current buffer (aside from the buffer |
|---|
| 433 |
@samp{*Buffer List*}) displayed in the other. |
|---|
| 434 |
@item b |
|---|
| 435 |
Bury the buffer listed on this line. |
|---|
| 436 |
@item m |
|---|
| 437 |
Mark this line's buffer to be displayed in another window if you exit |
|---|
| 438 |
with the @kbd{v} command. The request shows as a @samp{>} at the |
|---|
| 439 |
beginning of the line. (A single buffer may not have both a delete |
|---|
| 440 |
request and a display request.) |
|---|
| 441 |
@item v |
|---|
| 442 |
Immediately select this line's buffer, and also display in other windows |
|---|
| 443 |
any buffers previously marked with the @kbd{m} command. If you have not |
|---|
| 444 |
marked any buffers, this command is equivalent to @kbd{1}. |
|---|
| 445 |
@end table |
|---|
| 446 |
|
|---|
| 447 |
There is also a command that affects the entire buffer list: |
|---|
| 448 |
|
|---|
| 449 |
@table @kbd |
|---|
| 450 |
@item T |
|---|
| 451 |
Delete, or reinsert, lines for non-file buffers. This command toggles |
|---|
| 452 |
the inclusion of such buffers in the buffer list. |
|---|
| 453 |
@end table |
|---|
| 454 |
|
|---|
| 455 |
What @code{buffer-menu} actually does is create and switch to a |
|---|
| 456 |
suitable buffer, and turn on Buffer Menu mode in it. Everything else |
|---|
| 457 |
described above is implemented by the special commands provided in |
|---|
| 458 |
Buffer Menu mode. One consequence of this is that you can switch from |
|---|
| 459 |
the @samp{*Buffer List*} buffer to another Emacs buffer, and edit |
|---|
| 460 |
there. You can reselect the @samp{*Buffer List*} buffer later, to |
|---|
| 461 |
perform the operations already requested, or you can kill it, or pay |
|---|
| 462 |
no further attention to it. |
|---|
| 463 |
|
|---|
| 464 |
The list in the @samp{*Buffer List*} buffer looks exactly like the |
|---|
| 465 |
buffer list described in @ref{List Buffers}, because they really are |
|---|
| 466 |
the same. The only difference between @code{buffer-menu} and |
|---|
| 467 |
@code{list-buffers} is that @code{buffer-menu} switches to the |
|---|
| 468 |
@samp{*Buffer List*} buffer in the selected window; |
|---|
| 469 |
@code{list-buffers} displays the same buffer in another window. If |
|---|
| 470 |
you run @code{list-buffers} (that is, type @kbd{C-x C-b}) and select |
|---|
| 471 |
the buffer list manually, you can use all of the commands described |
|---|
| 472 |
here. |
|---|
| 473 |
|
|---|
| 474 |
Normally, the buffer @samp{*Buffer List*} is not updated |
|---|
| 475 |
automatically when buffers are created and killed; its contents are |
|---|
| 476 |
just text. If you have created, deleted or renamed buffers, the way |
|---|
| 477 |
to update @samp{*Buffer List*} to show what you have done is to type |
|---|
| 478 |
@kbd{g} (@code{revert-buffer}). You can make this happen regularly |
|---|
| 479 |
every @code{auto-revert-interval} seconds if you enable Auto Revert |
|---|
| 480 |
mode in this buffer, as long as it is not marked modified. Global |
|---|
| 481 |
Auto Revert mode applies to the @samp{*Buffer List*} buffer only if |
|---|
| 482 |
@code{global-auto-revert-non-file-buffers} is non-@code{nil}. |
|---|
| 483 |
@iftex |
|---|
| 484 |
@inforef{Autorevert,, emacs-xtra}, for details. |
|---|
| 485 |
@end iftex |
|---|
| 486 |
@ifnottex |
|---|
| 487 |
@xref{Autorevert, global-auto-revert-non-file-buffers}, for details. |
|---|
| 488 |
@end ifnottex |
|---|
| 489 |
|
|---|
| 490 |
|
|---|
| 491 |
The command @code{buffer-menu-other-window} works the same as |
|---|
| 492 |
@code{buffer-menu}, except that it displays the buffers list in |
|---|
| 493 |
another window. |
|---|
| 494 |
|
|---|
| 495 |
@node Indirect Buffers |
|---|
| 496 |
@section Indirect Buffers |
|---|
| 497 |
@cindex indirect buffer |
|---|
| 498 |
@cindex base buffer |
|---|
| 499 |
|
|---|
| 500 |
An @dfn{indirect buffer} shares the text of some other buffer, which |
|---|
| 501 |
is called the @dfn{base buffer} of the indirect buffer. In some ways it |
|---|
| 502 |
is the analogue, for buffers, of a symbolic link between files. |
|---|
| 503 |
|
|---|
| 504 |
@table @kbd |
|---|
| 505 |
@findex make-indirect-buffer |
|---|
| 506 |
@item M-x make-indirect-buffer @key{RET} @var{base-buffer} @key{RET} @var{indirect-name} @key{RET} |
|---|
| 507 |
Create an indirect buffer named @var{indirect-name} whose base buffer |
|---|
| 508 |
is @var{base-buffer}. |
|---|
| 509 |
@findex clone-indirect-buffer |
|---|
| 510 |
@item M-x clone-indirect-buffer @key{RET} |
|---|
| 511 |
Create an indirect buffer that is a twin copy of the current buffer. |
|---|
| 512 |
@item C-x 4 c |
|---|
| 513 |
@kindex C-x 4 c |
|---|
| 514 |
@findex clone-indirect-buffer-other-window |
|---|
| 515 |
Create an indirect buffer that is a twin copy of the current buffer, and |
|---|
| 516 |
select it in another window (@code{clone-indirect-buffer-other-window}). |
|---|
| 517 |
@end table |
|---|
| 518 |
|
|---|
| 519 |
The text of the indirect buffer is always identical to the text of its |
|---|
| 520 |
base buffer; changes made by editing either one are visible immediately |
|---|
| 521 |
in the other. But in all other respects, the indirect buffer and its |
|---|
| 522 |
base buffer are completely separate. They have different names, |
|---|
| 523 |
different values of point, different narrowing, different markers, |
|---|
| 524 |
different major modes, and different local variables. |
|---|
| 525 |
|
|---|
| 526 |
An indirect buffer cannot visit a file, but its base buffer can. If |
|---|
| 527 |
you try to save the indirect buffer, that actually works by saving the |
|---|
| 528 |
base buffer. Killing the base buffer effectively kills the indirect |
|---|
| 529 |
buffer, but killing an indirect buffer has no effect on its base buffer. |
|---|
| 530 |
|
|---|
| 531 |
One way to use indirect buffers is to display multiple views of an |
|---|
| 532 |
outline. @xref{Outline Views}. |
|---|
| 533 |
|
|---|
| 534 |
A quick and handy way to make an indirect buffer is with the command |
|---|
| 535 |
@kbd{M-x clone-indirect-buffer}. It creates and selects an indirect |
|---|
| 536 |
buffer whose base buffer is the current buffer. With a numeric |
|---|
| 537 |
argument, it prompts for the name of the indirect buffer; otherwise it |
|---|
| 538 |
uses the name of the current buffer, with a @samp{<@var{n}>} suffix |
|---|
| 539 |
added. @kbd{C-x 4 c} (@code{clone-indirect-buffer-other-window}) |
|---|
| 540 |
works like @kbd{M-x clone-indirect-buffer}, but it selects the new |
|---|
| 541 |
buffer in another window. |
|---|
| 542 |
|
|---|
| 543 |
The more general way to make an indirect buffer is with the command |
|---|
| 544 |
@kbd{M-x make-indirect-buffer}. It creates an indirect buffer from |
|---|
| 545 |
buffer @var{base-buffer}, under the name @var{indirect-name}. It |
|---|
| 546 |
prompts for both @var{base-buffer} and @var{indirect-name} using the |
|---|
| 547 |
minibuffer. |
|---|
| 548 |
|
|---|
| 549 |
@node Buffer Convenience |
|---|
| 550 |
@section Convenience Features and Customization of Buffer Handling |
|---|
| 551 |
|
|---|
| 552 |
This section describes several modes and features that make it more |
|---|
| 553 |
convenient to switch between buffers. |
|---|
| 554 |
|
|---|
| 555 |
@menu |
|---|
| 556 |
* Uniquify:: Making buffer names unique with directory parts. |
|---|
| 557 |
* Iswitchb:: Switching between buffers with substrings. |
|---|
| 558 |
* Buffer Menus:: Configurable buffer menu. |
|---|
| 559 |
@end menu |
|---|
| 560 |
|
|---|
| 561 |
@node Uniquify |
|---|
| 562 |
@subsection Making Buffer Names Unique |
|---|
| 563 |
|
|---|
| 564 |
@cindex unique buffer names |
|---|
| 565 |
@cindex directories in buffer names |
|---|
| 566 |
When several buffers visit identically-named files, Emacs must give |
|---|
| 567 |
the buffers distinct names. The usual method for making buffer names |
|---|
| 568 |
unique adds @samp{<2>}, @samp{<3>}, etc. to the end of the buffer |
|---|
| 569 |
names (all but one of them). |
|---|
| 570 |
|
|---|
| 571 |
@vindex uniquify-buffer-name-style |
|---|
| 572 |
Other methods work by adding parts of each file's directory to the |
|---|
| 573 |
buffer name. To select one, customize the variable |
|---|
| 574 |
@code{uniquify-buffer-name-style} (@pxref{Easy Customization}). |
|---|
| 575 |
|
|---|
| 576 |
To begin with, the @code{forward} naming method includes part of the |
|---|
| 577 |
file's directory name at the beginning of the buffer name; using this |
|---|
| 578 |
method, buffers visiting the files @file{/u/rms/tmp/Makefile} and |
|---|
| 579 |
@file{/usr/projects/zaphod/Makefile} would be named |
|---|
| 580 |
@samp{tmp/Makefile} and @samp{zaphod/Makefile}, respectively (instead |
|---|
| 581 |
of @samp{Makefile} and @samp{Makefile<2>}). |
|---|
| 582 |
|
|---|
| 583 |
In contrast, the @code{post-forward} naming method would call the |
|---|
| 584 |
buffers @samp{Makefile|tmp} and @samp{Makefile|zaphod}, and the |
|---|
| 585 |
@code{reverse} naming method would call them @samp{Makefile\tmp} and |
|---|
| 586 |
@samp{Makefile\zaphod}. The nontrivial difference between |
|---|
| 587 |
@code{post-forward} and @code{reverse} occurs when just one directory |
|---|
| 588 |
name is not enough to distinguish two files; then @code{reverse} puts |
|---|
| 589 |
the directory names in reverse order, so that @file{/top/middle/file} |
|---|
| 590 |
becomes @samp{file\middle\top}, while @code{post-forward} puts them in |
|---|
| 591 |
forward order after the file name, as in @samp{file|top/middle}. |
|---|
| 592 |
|
|---|
| 593 |
Which rule to follow for putting the directory names in the buffer |
|---|
| 594 |
name is not very important if you are going to @emph{look} at the |
|---|
| 595 |
buffer names before you type one. But as an experienced user, if you |
|---|
| 596 |
know the rule, you won't have to look. And then you may find that one |
|---|
| 597 |
rule or another is easier for you to remember and apply quickly. |
|---|
| 598 |
|
|---|
| 599 |
@node Iswitchb |
|---|
| 600 |
@subsection Switching Between Buffers using Substrings |
|---|
| 601 |
|
|---|
| 602 |
@findex iswitchb-mode |
|---|
| 603 |
@cindex Iswitchb mode |
|---|
| 604 |
@cindex mode, Iswitchb |
|---|
| 605 |
@kindex C-x b @r{(Iswitchb mode)} |
|---|
| 606 |
@kindex C-x 4 b @r{(Iswitchb mode)} |
|---|
| 607 |
@kindex C-x 5 b @r{(Iswitchb mode)} |
|---|
| 608 |
@kindex C-x 4 C-o @r{(Iswitchb mode)} |
|---|
| 609 |
|
|---|
| 610 |
Iswitchb global minor mode provides convenient switching between |
|---|
| 611 |
buffers using substrings of their names. It replaces the normal |
|---|
| 612 |
definitions of @kbd{C-x b}, @kbd{C-x 4 b}, @kbd{C-x 5 b}, and @kbd{C-x |
|---|
| 613 |
4 C-o} with alternative commands that are somewhat ``smarter.'' |
|---|
| 614 |
|
|---|
| 615 |
When one of these commands prompts you for a buffer name, you can |
|---|
| 616 |
type in just a substring of the name you want to choose. As you enter |
|---|
| 617 |
the substring, Iswitchb mode continuously displays a list of buffers |
|---|
| 618 |
that match the substring you have typed. |
|---|
| 619 |
|
|---|
| 620 |
At any time, you can type @key{RET} to select the first buffer in |
|---|
| 621 |
the list. So the way to select a particular buffer is to make it the |
|---|
| 622 |
first in the list. There are two ways to do this. You can type more |
|---|
| 623 |
of the buffer name and thus narrow down the list, excluding unwanted |
|---|
| 624 |
buffers above the desired one. Alternatively, you can use @kbd{C-s} |
|---|
| 625 |
and @kbd{C-r} to rotate the list until the desired buffer is first. |
|---|
| 626 |
|
|---|
| 627 |
@key{TAB} while entering the buffer name performs completion on the |
|---|
| 628 |
string you have entered, based on the displayed list of buffers. |
|---|
| 629 |
|
|---|
| 630 |
To enable Iswitchb mode, type @kbd{M-x iswitchb-mode}, or customize |
|---|
| 631 |
the variable @code{iswitchb-mode} to @code{t} (@pxref{Easy |
|---|
| 632 |
Customization}). |
|---|
| 633 |
|
|---|
| 634 |
@node Buffer Menus |
|---|
| 635 |
@subsection Customizing Buffer Menus |
|---|
| 636 |
|
|---|
| 637 |
@findex bs-show |
|---|
| 638 |
@cindex buffer list, customizable |
|---|
| 639 |
@table @kbd |
|---|
| 640 |
@item M-x bs-show |
|---|
| 641 |
Make a list of buffers similarly to @kbd{M-x list-buffers} but |
|---|
| 642 |
customizable. |
|---|
| 643 |
@end table |
|---|
| 644 |
|
|---|
| 645 |
@kbd{M-x bs-show} pops up a buffer list similar to the one normally |
|---|
| 646 |
displayed by @kbd{C-x C-b} but which you can customize. If you prefer |
|---|
| 647 |
this to the usual buffer list, you can bind this command to @kbd{C-x |
|---|
| 648 |
C-b}. To customize this buffer list, use the @code{bs} Custom group |
|---|
| 649 |
(@pxref{Easy Customization}). |
|---|
| 650 |
|
|---|
| 651 |
@findex msb-mode |
|---|
| 652 |
@cindex mode, MSB |
|---|
| 653 |
@cindex MSB mode |
|---|
| 654 |
@cindex buffer menu |
|---|
| 655 |
@findex mouse-buffer-menu |
|---|
| 656 |
@kindex C-Down-Mouse-1 |
|---|
| 657 |
MSB global minor mode (``MSB'' stands for ``mouse select buffer'') |
|---|
| 658 |
provides a different and customizable mouse buffer menu which you may |
|---|
| 659 |
prefer. It replaces the bindings of @code{mouse-buffer-menu}, |
|---|
| 660 |
normally on @kbd{C-Down-Mouse-1}, and the menu bar buffer menu. You |
|---|
| 661 |
can customize the menu in the @code{msb} Custom group. |
|---|
| 662 |
|
|---|
| 663 |
@ignore |
|---|
| 664 |
arch-tag: 08c43460-f4f4-4b43-9cb5-1ea9ad991695 |
|---|
| 665 |
@end ignore |
|---|