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