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