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