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