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