Merge changes from emacs-23 branch
[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 The commands @kbd{M-x append-to-buffer} and @kbd{M-x insert-buffer}
289 can be used to copy text from one buffer to another. @xref{Accumulating
290 Text}.
291
292 @node Kill Buffer
293 @section Killing Buffers
294
295 @cindex killing buffers
296 If you continue an Emacs session for a while, you may accumulate a
297 large number of buffers. You may then find it convenient to @dfn{kill}
298 the buffers you no longer need. On most operating systems, killing a
299 buffer releases its space back to the operating system so that other
300 programs can use it. Here are some commands for killing buffers:
301
302 @table @kbd
303 @item C-x k @var{bufname} @key{RET}
304 Kill buffer @var{bufname} (@code{kill-buffer}).
305 @item M-x kill-some-buffers
306 Offer to kill each buffer, one by one.
307 @item M-x kill-matching-buffers
308 Offer to kill all buffers matching a regular expression.
309 @end table
310
311 @findex kill-buffer
312 @kindex C-x k
313 @kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you
314 specify in the minibuffer. The default, used if you type just
315 @key{RET} in the minibuffer, is to kill the current buffer. If you
316 kill the current buffer, another buffer becomes current: one that was
317 current in the recent past but is not displayed in any window now. If
318 you ask to kill a file-visiting buffer that is modified, then you must
319 confirm with @kbd{yes} before the buffer is killed.
320
321 @findex kill-some-buffers
322 The command @kbd{M-x kill-some-buffers} asks about each buffer, one
323 by one. An answer of @kbd{y} means to kill the buffer, just like
324 @code{kill-buffer}. This command ignores buffers whose names begin
325 with a space, which are used internally by Emacs.
326
327 @findex kill-matching-buffers
328 The command @kbd{M-x kill-matching-buffers} prompts for a regular
329 expression and kills all buffers whose names match that expression.
330 @xref{Regexps}. Like @code{kill-some-buffers}, it asks for
331 confirmation before each kill. This command normally ignores buffers
332 whose names begin with a space, which are used internally by Emacs.
333 To kill internal buffers as well, call @code{kill-matching-buffers}
334 with a prefix argument.
335
336 The buffer menu feature is also convenient for killing various
337 buffers. @xref{Several Buffers}.
338
339 @vindex kill-buffer-hook
340 If you want to do something special every time a buffer is killed, you
341 can add hook functions to the hook @code{kill-buffer-hook} (@pxref{Hooks}).
342
343 @findex clean-buffer-list
344 If you run one Emacs session for a period of days, as many people do,
345 it can fill up with buffers that you used several days ago. The command
346 @kbd{M-x clean-buffer-list} is a convenient way to purge them; it kills
347 all the unmodified buffers that you have not used for a long time. An
348 ordinary buffer is killed if it has not been displayed for three days;
349 however, you can specify certain buffers that should never be killed
350 automatically, and others that should be killed if they have been unused
351 for a mere hour.
352
353 @cindex Midnight mode
354 @vindex midnight-mode
355 @vindex midnight-hook
356 You can also have this buffer purging done for you, every day at
357 midnight, by enabling Midnight mode. Midnight mode operates each day
358 at midnight; at that time, it runs @code{clean-buffer-list}, or
359 whichever functions you have placed in the normal hook
360 @code{midnight-hook} (@pxref{Hooks}). To enable Midnight mode, use
361 the Customization buffer to set the variable @code{midnight-mode} to
362 @code{t}. @xref{Easy Customization}.
363
364 @node Several Buffers
365 @section Operating on Several Buffers
366 @cindex buffer menu
367
368 @table @kbd
369 @item M-x buffer-menu
370 Begin editing a buffer listing all Emacs buffers.
371 @item M-x buffer-menu-other-window.
372 Similar, but do it in another window.
373 @end table
374
375 The @dfn{buffer menu} opened by @kbd{C-x C-b} (@pxref{List Buffers})
376 does not merely list buffers. It also allows you to perform various
377 operations on buffers, through an interface similar to Dired
378 (@pxref{Dired}). You can save buffers, kill them (here called
379 @dfn{deleting} them, for consistency with Dired), or display them.
380
381 @findex buffer-menu
382 @findex buffer-menu-other-window
383 To use the buffer menu, type @kbd{C-x C-b} and switch to the window
384 displaying the @samp{*Buffer List*} buffer. You can also type
385 @kbd{M-x buffer-menu} to open the buffer menu in the selected window.
386 Alternatively, the command @kbd{M-x buffer-menu-other-window} opens
387 the buffer menu in another window, and selects that window.
388
389 The buffer menu is a read-only buffer, and can be changed only
390 through the special commands described in this section. The usual
391 Emacs cursor motion commands can be used in this buffer. The
392 following commands apply to the buffer described on the current line:
393
394 @table @kbd
395 @item d
396 Request to delete (kill) the buffer, then move down. The request
397 shows as a @samp{D} on the line, before the buffer name. Requested
398 deletions take place when you type the @kbd{x} command.
399 @item C-d
400 Like @kbd{d} but move up afterwards instead of down.
401 @item s
402 Request to save the buffer. The request shows as an @samp{S} on the
403 line. Requested saves take place when you type the @kbd{x} command.
404 You may request both saving and deletion for the same buffer.
405 @item x
406 Perform previously requested deletions and saves.
407 @item u
408 Remove any request made for the current line, and move down.
409 @item @key{DEL}
410 Move to previous line and remove any request made for that line.
411 @end table
412
413 The @kbd{d}, @kbd{C-d}, @kbd{s} and @kbd{u} commands to add or remove
414 flags also move down (or up) one line. They accept a numeric argument
415 as a repeat count.
416
417 These commands operate immediately on the buffer listed on the current
418 line:
419
420 @table @kbd
421 @item ~
422 Mark the buffer ``unmodified.'' The command @kbd{~} does this
423 immediately when you type it.
424 @item %
425 Toggle the buffer's read-only flag. The command @kbd{%} does
426 this immediately when you type it.
427 @item t
428 Visit the buffer as a tags table. @xref{Select Tags Table}.
429 @end table
430
431 There are also commands to select another buffer or buffers:
432
433 @table @kbd
434 @item q
435 Quit the buffer menu---immediately display the most recent formerly
436 visible buffer in its place.
437 @item @key{RET}
438 @itemx f
439 Immediately select this line's buffer in place of the @samp{*Buffer
440 List*} buffer.
441 @item o
442 Immediately select this line's buffer in another window as if by
443 @kbd{C-x 4 b}, leaving @samp{*Buffer List*} visible.
444 @item C-o
445 Immediately display this line's buffer in another window, but don't
446 select the window.
447 @item 1
448 Immediately select this line's buffer in a full-screen window.
449 @item 2
450 Immediately set up two windows, with this line's buffer selected in
451 one, and the previously current buffer (aside from the buffer
452 @samp{*Buffer List*}) displayed in the other.
453 @item b
454 Bury the buffer listed on this line.
455 @item m
456 Mark this line's buffer to be displayed in another window if you exit
457 with the @kbd{v} command. The request shows as a @samp{>} at the
458 beginning of the line. (A single buffer may not have both a delete
459 request and a display request.)
460 @item v
461 Immediately select this line's buffer, and also display in other windows
462 any buffers previously marked with the @kbd{m} command. If you have not
463 marked any buffers, this command is equivalent to @kbd{1}.
464 @end table
465
466 There is also a command that affects the entire buffer list:
467
468 @table @kbd
469 @item T
470 Delete, or reinsert, lines for non-file buffers. This command toggles
471 the inclusion of such buffers in the buffer list.
472 @end table
473
474 What @code{buffer-menu} actually does is create and switch to a
475 suitable buffer, and turn on Buffer Menu mode in it. Everything else
476 described above is implemented by the special commands provided in
477 Buffer Menu mode. One consequence of this is that you can switch from
478 the @samp{*Buffer List*} buffer to another Emacs buffer, and edit
479 there. You can reselect the @samp{*Buffer List*} buffer later, to
480 perform the operations already requested, or you can kill it, or pay
481 no further attention to it.
482
483 Normally, the buffer @samp{*Buffer List*} is not updated
484 automatically when buffers are created and killed; its contents are
485 just text. If you have created, deleted or renamed buffers, the way
486 to update @samp{*Buffer List*} to show what you have done is to type
487 @kbd{g} (@code{revert-buffer}). You can make this happen regularly
488 every @code{auto-revert-interval} seconds if you enable Auto Revert
489 mode in this buffer, as long as it is not marked modified. Global
490 Auto Revert mode applies to the @samp{*Buffer List*} buffer only if
491 @code{global-auto-revert-non-file-buffers} is non-@code{nil}.
492 @iftex
493 @inforef{Autorevert,, emacs-xtra}, for details.
494 @end iftex
495 @ifnottex
496 @xref{Autorevert, global-auto-revert-non-file-buffers}, for details.
497 @end ifnottex
498
499 @node Indirect Buffers
500 @section Indirect Buffers
501 @cindex indirect buffer
502 @cindex base buffer
503
504 An @dfn{indirect buffer} shares the text of some other buffer, which
505 is called the @dfn{base buffer} of the indirect buffer. In some ways it
506 is the analogue, for buffers, of a symbolic link between files.
507
508 @table @kbd
509 @findex make-indirect-buffer
510 @item M-x make-indirect-buffer @key{RET} @var{base-buffer} @key{RET} @var{indirect-name} @key{RET}
511 Create an indirect buffer named @var{indirect-name} whose base buffer
512 is @var{base-buffer}.
513 @findex clone-indirect-buffer
514 @item M-x clone-indirect-buffer @key{RET}
515 Create an indirect buffer that is a twin copy of the current buffer.
516 @item C-x 4 c
517 @kindex C-x 4 c
518 @findex clone-indirect-buffer-other-window
519 Create an indirect buffer that is a twin copy of the current buffer, and
520 select it in another window (@code{clone-indirect-buffer-other-window}).
521 @end table
522
523 The text of the indirect buffer is always identical to the text of its
524 base buffer; changes made by editing either one are visible immediately
525 in the other. But in all other respects, the indirect buffer and its
526 base buffer are completely separate. They can have different names,
527 different values of point, different narrowing, different markers,
528 different major modes, and different local variables.
529
530 An indirect buffer cannot visit a file, but its base buffer can. If
531 you try to save the indirect buffer, that actually works by saving the
532 base buffer. Killing the base buffer effectively kills the indirect
533 buffer, but killing an indirect buffer has no effect on its base buffer.
534
535 One way to use indirect buffers is to display multiple views of an
536 outline. @xref{Outline Views}.
537
538 @vindex clone-indirect-buffer-hook
539 A quick and handy way to make an indirect buffer is with the command
540 @kbd{M-x clone-indirect-buffer}. It creates and selects an indirect
541 buffer whose base buffer is the current buffer. With a numeric
542 argument, it prompts for the name of the indirect buffer; otherwise it
543 uses the name of the current buffer, with a @samp{<@var{n}>} suffix
544 added. @kbd{C-x 4 c} (@code{clone-indirect-buffer-other-window})
545 works like @kbd{M-x clone-indirect-buffer}, but it selects the new
546 buffer in another window. These functions run the hook
547 @code{clone-indirect-buffer-hook} after creating the indirect buffer.
548
549 The more general way to make an indirect buffer is with the command
550 @kbd{M-x make-indirect-buffer}. It creates an indirect buffer from
551 buffer @var{base-buffer}, under the name @var{indirect-name}. It
552 prompts for both @var{base-buffer} and @var{indirect-name} using the
553 minibuffer.
554
555 @node Buffer Convenience
556 @section Convenience Features and Customization of Buffer Handling
557
558 This section describes several modes and features that make it more
559 convenient to switch between buffers.
560
561 @menu
562 * Uniquify:: Making buffer names unique with directory parts.
563 * Iswitchb:: Switching between buffers with substrings.
564 * Buffer Menus:: Configurable buffer menu.
565 @end menu
566
567 @node Uniquify
568 @subsection Making Buffer Names Unique
569
570 @cindex unique buffer names
571 @cindex directories in buffer names
572 When several buffers visit identically-named files, Emacs must give
573 the buffers distinct names. The usual method for making buffer names
574 unique adds @samp{<2>}, @samp{<3>}, etc. to the end of the buffer
575 names (all but one of them).
576
577 @vindex uniquify-buffer-name-style
578 Other methods work by adding parts of each file's directory to the
579 buffer name. To select one, load the library @file{uniquify} (e.g.
580 using @code{(require 'uniquify)}), and customize the variable
581 @code{uniquify-buffer-name-style} (@pxref{Easy Customization}).
582
583 To begin with, the @code{forward} naming method includes part of the
584 file's directory name at the beginning of the buffer name; using this
585 method, buffers visiting the files @file{/u/rms/tmp/Makefile} and
586 @file{/usr/projects/zaphod/Makefile} would be named
587 @samp{tmp/Makefile} and @samp{zaphod/Makefile}, respectively (instead
588 of @samp{Makefile} and @samp{Makefile<2>}).
589
590 In contrast, the @code{post-forward} naming method would call the
591 buffers @samp{Makefile|tmp} and @samp{Makefile|zaphod}, and the
592 @code{reverse} naming method would call them @samp{Makefile\tmp} and
593 @samp{Makefile\zaphod}. The nontrivial difference between
594 @code{post-forward} and @code{reverse} occurs when just one directory
595 name is not enough to distinguish two files; then @code{reverse} puts
596 the directory names in reverse order, so that @file{/top/middle/file}
597 becomes @samp{file\middle\top}, while @code{post-forward} puts them in
598 forward order after the file name, as in @samp{file|top/middle}.
599
600 Which rule to follow for putting the directory names in the buffer
601 name is not very important if you are going to @emph{look} at the
602 buffer names before you type one. But as an experienced user, if you
603 know the rule, you won't have to look. And then you may find that one
604 rule or another is easier for you to remember and apply quickly.
605
606 @node Iswitchb
607 @subsection Switching Between Buffers using Substrings
608
609 @findex iswitchb-mode
610 @cindex Iswitchb mode
611 @cindex mode, Iswitchb
612 @kindex C-x b @r{(Iswitchb mode)}
613 @kindex C-x 4 b @r{(Iswitchb mode)}
614 @kindex C-x 5 b @r{(Iswitchb mode)}
615 @kindex C-x 4 C-o @r{(Iswitchb mode)}
616
617 Iswitchb global minor mode provides convenient switching between
618 buffers using substrings of their names. It replaces the normal
619 definitions of @kbd{C-x b}, @kbd{C-x 4 b}, @kbd{C-x 5 b}, and @kbd{C-x
620 4 C-o} with alternative commands that are somewhat ``smarter.''
621
622 When one of these commands prompts you for a buffer name, you can
623 type in just a substring of the name you want to choose. As you enter
624 the substring, Iswitchb mode continuously displays a list of buffers
625 that match the substring you have typed.
626
627 At any time, you can type @key{RET} to select the first buffer in
628 the list. So the way to select a particular buffer is to make it the
629 first in the list. There are two ways to do this. You can type more
630 of the buffer name and thus narrow down the list, excluding unwanted
631 buffers above the desired one. Alternatively, you can use @kbd{C-s}
632 and @kbd{C-r} to rotate the list until the desired buffer is first.
633
634 @key{TAB} while entering the buffer name performs completion on the
635 string you have entered, based on the displayed list of buffers.
636
637 To enable Iswitchb mode, type @kbd{M-x iswitchb-mode}, or customize
638 the variable @code{iswitchb-mode} to @code{t} (@pxref{Easy
639 Customization}).
640
641 @node Buffer Menus
642 @subsection Customizing Buffer Menus
643
644 @findex bs-show
645 @cindex buffer list, customizable
646 @table @kbd
647 @item M-x bs-show
648 Make a list of buffers similarly to @kbd{M-x list-buffers} but
649 customizable.
650 @end table
651
652 @kbd{M-x bs-show} pops up a buffer list similar to the one normally
653 displayed by @kbd{C-x C-b} but which you can customize. If you prefer
654 this to the usual buffer list, you can bind this command to @kbd{C-x
655 C-b}. To customize this buffer list, use the @code{bs} Custom group
656 (@pxref{Easy Customization}).
657
658 @findex msb-mode
659 @cindex mode, MSB
660 @cindex MSB mode
661 @cindex buffer menu
662 @findex mouse-buffer-menu
663 @kindex C-Down-Mouse-1
664 MSB global minor mode (``MSB'' stands for ``mouse select buffer'')
665 provides a different and customizable mouse buffer menu which you may
666 prefer. It replaces the bindings of @code{mouse-buffer-menu},
667 normally on @kbd{C-Down-Mouse-1}, and the menu bar buffer menu. You
668 can customize the menu in the @code{msb} Custom group.