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