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