annotate man/buffers.texi @ 36552:80aa67d879fb

*** empty log message ***
author Dave Love <fx@gnu.org>
date Mon, 05 Mar 2001 18:41:37 +0000
parents 0f5618d75b4a
children 3067f258e551
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1 @c This is part of the Emacs manual.
31311
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
2 @c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 2000
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
3 @c Free Software Foundation, Inc.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4 @c See file emacs.texi for copying conditions.
Dave Love <fx@gnu.org>
parents:
diff changeset
5 @node Buffers, Windows, Files, Top
Dave Love <fx@gnu.org>
parents:
diff changeset
6 @chapter Using Multiple Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
7
Dave Love <fx@gnu.org>
parents:
diff changeset
8 @cindex buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
9 The text you are editing in Emacs resides in an object called a
Dave Love <fx@gnu.org>
parents:
diff changeset
10 @dfn{buffer}. Each time you visit a file, a buffer is created to hold the
Dave Love <fx@gnu.org>
parents:
diff changeset
11 file's text. Each time you invoke Dired, a buffer is created to hold the
Dave Love <fx@gnu.org>
parents:
diff changeset
12 directory listing. If you send a message with @kbd{C-x m}, a buffer named
Dave Love <fx@gnu.org>
parents:
diff changeset
13 @samp{*mail*} is used to hold the text of the message. When you ask for a
Dave Love <fx@gnu.org>
parents:
diff changeset
14 command's documentation, that appears in a buffer called @samp{*Help*}.
Dave Love <fx@gnu.org>
parents:
diff changeset
15
Dave Love <fx@gnu.org>
parents:
diff changeset
16 @cindex selected buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
17 @cindex current buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
18 At any time, one and only one buffer is @dfn{selected}. It is also
Dave Love <fx@gnu.org>
parents:
diff changeset
19 called the @dfn{current buffer}. Often we say that a command operates on
Dave Love <fx@gnu.org>
parents:
diff changeset
20 ``the buffer'' as if there were only one; but really this means that the
Dave Love <fx@gnu.org>
parents:
diff changeset
21 command operates on the selected buffer (most commands do).
Dave Love <fx@gnu.org>
parents:
diff changeset
22
Dave Love <fx@gnu.org>
parents:
diff changeset
23 When Emacs has multiple windows, each window has a chosen buffer which
Dave Love <fx@gnu.org>
parents:
diff changeset
24 is displayed there, but at any time only one of the windows is selected and
Dave Love <fx@gnu.org>
parents:
diff changeset
25 its chosen buffer is the selected buffer. Each window's mode line displays
Dave Love <fx@gnu.org>
parents:
diff changeset
26 the name of the buffer that the window is displaying (@pxref{Windows}).
Dave Love <fx@gnu.org>
parents:
diff changeset
27
Dave Love <fx@gnu.org>
parents:
diff changeset
28 Each buffer has a name, which can be of any length, and you can select
Dave Love <fx@gnu.org>
parents:
diff changeset
29 any buffer by giving its name. Most buffers are made by visiting files,
Dave Love <fx@gnu.org>
parents:
diff changeset
30 and their names are derived from the files' names. But you can also create
Dave Love <fx@gnu.org>
parents:
diff changeset
31 an empty buffer with any name you want. A newly started Emacs has a buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
32 named @samp{*scratch*} which can be used for evaluating Lisp expressions in
Dave Love <fx@gnu.org>
parents:
diff changeset
33 Emacs. The distinction between upper and lower case matters in buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
34 names.
Dave Love <fx@gnu.org>
parents:
diff changeset
35
Dave Love <fx@gnu.org>
parents:
diff changeset
36 Each buffer records individually what file it is visiting, whether it is
Dave Love <fx@gnu.org>
parents:
diff changeset
37 modified, and what major mode and minor modes are in effect in it
Dave Love <fx@gnu.org>
parents:
diff changeset
38 (@pxref{Major Modes}). Any Emacs variable can be made @dfn{local to} a
Dave Love <fx@gnu.org>
parents:
diff changeset
39 particular buffer, meaning its value in that buffer can be different from
Dave Love <fx@gnu.org>
parents:
diff changeset
40 the value in other buffers. @xref{Locals}.
Dave Love <fx@gnu.org>
parents:
diff changeset
41
Dave Love <fx@gnu.org>
parents:
diff changeset
42 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
43 * Select Buffer:: Creating a new buffer or reselecting an old one.
Dave Love <fx@gnu.org>
parents:
diff changeset
44 * List Buffers:: Getting a list of buffers that exist.
Dave Love <fx@gnu.org>
parents:
diff changeset
45 * Misc Buffer:: Renaming; changing read-onlyness; copying text.
Dave Love <fx@gnu.org>
parents:
diff changeset
46 * Kill Buffer:: Killing buffers you no longer need.
Dave Love <fx@gnu.org>
parents:
diff changeset
47 * Several Buffers:: How to go through the list of all buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
48 and operate variously on several of them.
Dave Love <fx@gnu.org>
parents:
diff changeset
49 * Indirect Buffers:: An indirect buffer shares the text of another buffer.
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
50 * Buffer Convenience:: Convenience and customization features for
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
51 buffer handling.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
52 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
53
Dave Love <fx@gnu.org>
parents:
diff changeset
54 @node Select Buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
55 @section Creating and Selecting Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
56 @cindex change buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
57 @cindex switch buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
58
Dave Love <fx@gnu.org>
parents:
diff changeset
59 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
60 @item C-x b @var{buffer} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
61 Select or create a buffer named @var{buffer} (@code{switch-to-buffer}).
Dave Love <fx@gnu.org>
parents:
diff changeset
62 @item C-x 4 b @var{buffer} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
63 Similar, but select @var{buffer} in another window
Dave Love <fx@gnu.org>
parents:
diff changeset
64 (@code{switch-to-buffer-other-window}).
Dave Love <fx@gnu.org>
parents:
diff changeset
65 @item C-x 5 b @var{buffer} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
66 Similar, but select @var{buffer} in a separate frame
Dave Love <fx@gnu.org>
parents:
diff changeset
67 (@code{switch-to-buffer-other-frame}).
Dave Love <fx@gnu.org>
parents:
diff changeset
68 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
69
Dave Love <fx@gnu.org>
parents:
diff changeset
70 @kindex C-x 4 b
Dave Love <fx@gnu.org>
parents:
diff changeset
71 @findex switch-to-buffer-other-window
Dave Love <fx@gnu.org>
parents:
diff changeset
72 @kindex C-x 5 b
Dave Love <fx@gnu.org>
parents:
diff changeset
73 @findex switch-to-buffer-other-frame
Dave Love <fx@gnu.org>
parents:
diff changeset
74 @kindex C-x b
Dave Love <fx@gnu.org>
parents:
diff changeset
75 @findex switch-to-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
76 To select the buffer named @var{bufname}, type @kbd{C-x b @var{bufname}
Dave Love <fx@gnu.org>
parents:
diff changeset
77 @key{RET}}. This runs the command @code{switch-to-buffer} with argument
Dave Love <fx@gnu.org>
parents:
diff changeset
78 @var{bufname}. You can use completion on an abbreviation for the buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
79 name you want (@pxref{Completion}). An empty argument to @kbd{C-x b}
Dave Love <fx@gnu.org>
parents:
diff changeset
80 specifies the most recently selected buffer that is not displayed in any
Dave Love <fx@gnu.org>
parents:
diff changeset
81 window.@refill
Dave Love <fx@gnu.org>
parents:
diff changeset
82
Dave Love <fx@gnu.org>
parents:
diff changeset
83 Most buffers are created by visiting files, or by Emacs commands that
Dave Love <fx@gnu.org>
parents:
diff changeset
84 want to display some text, but you can also create a buffer explicitly
Dave Love <fx@gnu.org>
parents:
diff changeset
85 by typing @kbd{C-x b @var{bufname} @key{RET}}. This makes a new, empty
Dave Love <fx@gnu.org>
parents:
diff changeset
86 buffer that is not visiting any file, and selects it for editing. Such
Dave Love <fx@gnu.org>
parents:
diff changeset
87 buffers are used for making notes to yourself. If you try to save one,
Dave Love <fx@gnu.org>
parents:
diff changeset
88 you are asked for the file name to use. The new buffer's major mode is
Dave Love <fx@gnu.org>
parents:
diff changeset
89 determined by the value of @code{default-major-mode} (@pxref{Major
Dave Love <fx@gnu.org>
parents:
diff changeset
90 Modes}).
Dave Love <fx@gnu.org>
parents:
diff changeset
91
Dave Love <fx@gnu.org>
parents:
diff changeset
92 Note that @kbd{C-x C-f}, and any other command for visiting a file,
Dave Love <fx@gnu.org>
parents:
diff changeset
93 can also be used to switch to an existing file-visiting buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
94 @xref{Visiting}.
Dave Love <fx@gnu.org>
parents:
diff changeset
95
Dave Love <fx@gnu.org>
parents:
diff changeset
96 Emacs uses buffer names that start with a space for internal purposes.
Dave Love <fx@gnu.org>
parents:
diff changeset
97 It treats these buffers specially in minor ways---for example, by
Dave Love <fx@gnu.org>
parents:
diff changeset
98 default they do not record undo information. It is best to avoid using
Dave Love <fx@gnu.org>
parents:
diff changeset
99 such buffer names yourself.
Dave Love <fx@gnu.org>
parents:
diff changeset
100
Dave Love <fx@gnu.org>
parents:
diff changeset
101 @node List Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
102 @section Listing Existing Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
103
Dave Love <fx@gnu.org>
parents:
diff changeset
104 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
105 @item C-x C-b
Dave Love <fx@gnu.org>
parents:
diff changeset
106 List the existing buffers (@code{list-buffers}).
Dave Love <fx@gnu.org>
parents:
diff changeset
107 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
108
Dave Love <fx@gnu.org>
parents:
diff changeset
109 @cindex listing current buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
110 @kindex C-x C-b
Dave Love <fx@gnu.org>
parents:
diff changeset
111 @findex list-buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
112 To display a list of all the buffers that exist, type @kbd{C-x C-b}.
Dave Love <fx@gnu.org>
parents:
diff changeset
113 Each line in the list shows one buffer's name, major mode and visited
Dave Love <fx@gnu.org>
parents:
diff changeset
114 file. The buffers are listed in the order that they were current; the
Dave Love <fx@gnu.org>
parents:
diff changeset
115 buffers that were current most recently come first.
Dave Love <fx@gnu.org>
parents:
diff changeset
116
Dave Love <fx@gnu.org>
parents:
diff changeset
117 @samp{*} at the beginning of a line indicates the buffer is ``modified.''
Dave Love <fx@gnu.org>
parents:
diff changeset
118 If several buffers are modified, it may be time to save some with @kbd{C-x s}
Dave Love <fx@gnu.org>
parents:
diff changeset
119 (@pxref{Saving}). @samp{%} indicates a read-only buffer. @samp{.} marks the
Dave Love <fx@gnu.org>
parents:
diff changeset
120 selected buffer. Here is an example of a buffer list:@refill
Dave Love <fx@gnu.org>
parents:
diff changeset
121
Dave Love <fx@gnu.org>
parents:
diff changeset
122 @smallexample
Dave Love <fx@gnu.org>
parents:
diff changeset
123 MR Buffer Size Mode File
Dave Love <fx@gnu.org>
parents:
diff changeset
124 -- ------ ---- ---- ----
Dave Love <fx@gnu.org>
parents:
diff changeset
125 .* emacs.tex 383402 Texinfo /u2/emacs/man/emacs.tex
Dave Love <fx@gnu.org>
parents:
diff changeset
126 *Help* 1287 Fundamental
Dave Love <fx@gnu.org>
parents:
diff changeset
127 files.el 23076 Emacs-Lisp /u2/emacs/lisp/files.el
Dave Love <fx@gnu.org>
parents:
diff changeset
128 % RMAIL 64042 RMAIL /u/rms/RMAIL
Dave Love <fx@gnu.org>
parents:
diff changeset
129 *% man 747 Dired /u2/emacs/man/
Dave Love <fx@gnu.org>
parents:
diff changeset
130 net.emacs 343885 Fundamental /u/rms/net.emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
131 fileio.c 27691 C /u2/emacs/src/fileio.c
Dave Love <fx@gnu.org>
parents:
diff changeset
132 NEWS 67340 Text /u2/emacs/etc/NEWS
Dave Love <fx@gnu.org>
parents:
diff changeset
133 *scratch* 0 Lisp Interaction
Dave Love <fx@gnu.org>
parents:
diff changeset
134 @end smallexample
Dave Love <fx@gnu.org>
parents:
diff changeset
135
Dave Love <fx@gnu.org>
parents:
diff changeset
136 @noindent
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
137 Note that the buffer @samp{*Help*} was made by a help request; it is
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
138 not visiting any file. The buffer @code{man} was made by Dired on the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
139 directory @file{/u2/emacs/man/}. You can list only buffers that are
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
140 visiting files by giving the command a prefix; for instance, by typing
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
141 @kbd{C-u C-x C-b}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
142
Dave Love <fx@gnu.org>
parents:
diff changeset
143 @need 2000
Dave Love <fx@gnu.org>
parents:
diff changeset
144 @node Misc Buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
145 @section Miscellaneous Buffer Operations
Dave Love <fx@gnu.org>
parents:
diff changeset
146
Dave Love <fx@gnu.org>
parents:
diff changeset
147 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
148 @item C-x C-q
Dave Love <fx@gnu.org>
parents:
diff changeset
149 Toggle read-only status of buffer (@code{vc-toggle-read-only}).
Dave Love <fx@gnu.org>
parents:
diff changeset
150 @item M-x rename-buffer @key{RET} @var{name} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
151 Change the name of the current buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
152 @item M-x rename-uniquely
Dave Love <fx@gnu.org>
parents:
diff changeset
153 Rename the current buffer by adding @samp{<@var{number}>} to the end.
Dave Love <fx@gnu.org>
parents:
diff changeset
154 @item M-x view-buffer @key{RET} @var{buffer} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
155 Scroll through buffer @var{buffer}.
Dave Love <fx@gnu.org>
parents:
diff changeset
156 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
157
Dave Love <fx@gnu.org>
parents:
diff changeset
158 @kindex C-x C-q
36263
11db0318031d Remove redundant index entries.
Eli Zaretskii <eliz@gnu.org>
parents: 36143
diff changeset
159 @c Don't index vc-toggle-read-only here, it is indexed in files.texi,
11db0318031d Remove redundant index entries.
Eli Zaretskii <eliz@gnu.org>
parents: 36143
diff changeset
160 @c in the node "Basic VC Editing".
11db0318031d Remove redundant index entries.
Eli Zaretskii <eliz@gnu.org>
parents: 36143
diff changeset
161 @c @findex vc-toggle-read-only
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
162 @vindex buffer-read-only
Dave Love <fx@gnu.org>
parents:
diff changeset
163 @cindex read-only buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
164 A buffer can be @dfn{read-only}, which means that commands to change
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
165 its contents are not allowed. The mode line indicates read-only
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
166 buffers with @samp{%%} or @samp{%*} near the left margin. Read-only
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
167 buffers are usually made by subsystems such as Dired and Rmail that
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
168 have special commands to operate on the text; also by visiting a file
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
169 whose access control says you cannot write it.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
170
Dave Love <fx@gnu.org>
parents:
diff changeset
171 If you wish to make changes in a read-only buffer, use the command
Dave Love <fx@gnu.org>
parents:
diff changeset
172 @kbd{C-x C-q} (@code{vc-toggle-read-only}). It makes a read-only buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
173 writable, and makes a writable buffer read-only. In most cases, this
Dave Love <fx@gnu.org>
parents:
diff changeset
174 works by setting the variable @code{buffer-read-only}, which has a local
Dave Love <fx@gnu.org>
parents:
diff changeset
175 value in each buffer and makes the buffer read-only if its value is
Dave Love <fx@gnu.org>
parents:
diff changeset
176 non-@code{nil}. If the file is maintained with version control,
Dave Love <fx@gnu.org>
parents:
diff changeset
177 @kbd{C-x C-q} works through the version control system to change the
Dave Love <fx@gnu.org>
parents:
diff changeset
178 read-only status of the file as well as the buffer. @xref{Version
Dave Love <fx@gnu.org>
parents:
diff changeset
179 Control}.
Dave Love <fx@gnu.org>
parents:
diff changeset
180
Dave Love <fx@gnu.org>
parents:
diff changeset
181 @findex rename-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
182 @kbd{M-x rename-buffer} changes the name of the current buffer. Specify
Dave Love <fx@gnu.org>
parents:
diff changeset
183 the new name as a minibuffer argument. There is no default. If you
Dave Love <fx@gnu.org>
parents:
diff changeset
184 specify a name that is in use for some other buffer, an error happens and
Dave Love <fx@gnu.org>
parents:
diff changeset
185 no renaming is done.
Dave Love <fx@gnu.org>
parents:
diff changeset
186
Dave Love <fx@gnu.org>
parents:
diff changeset
187 @kbd{M-x rename-uniquely} renames the current buffer to a similar name
Dave Love <fx@gnu.org>
parents:
diff changeset
188 with a numeric suffix added to make it both different and unique. This
Dave Love <fx@gnu.org>
parents:
diff changeset
189 command does not need an argument. It is useful for creating multiple
Dave Love <fx@gnu.org>
parents:
diff changeset
190 shell buffers: if you rename the @samp{*Shell*} buffer, then do @kbd{M-x
Dave Love <fx@gnu.org>
parents:
diff changeset
191 shell} again, it makes a new shell buffer named @samp{*Shell*};
Dave Love <fx@gnu.org>
parents:
diff changeset
192 meanwhile, the old shell buffer continues to exist under its new name.
Dave Love <fx@gnu.org>
parents:
diff changeset
193 This method is also good for mail buffers, compilation buffers, and most
Dave Love <fx@gnu.org>
parents:
diff changeset
194 Emacs features that create special buffers with particular names.
Dave Love <fx@gnu.org>
parents:
diff changeset
195
Dave Love <fx@gnu.org>
parents:
diff changeset
196 @findex view-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
197 @kbd{M-x view-buffer} is much like @kbd{M-x view-file} (@pxref{Misc
Dave Love <fx@gnu.org>
parents:
diff changeset
198 File Ops}) except that it examines an already existing Emacs buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
199 View mode provides commands for scrolling through the buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
200 conveniently but not for changing it. When you exit View mode with
Dave Love <fx@gnu.org>
parents:
diff changeset
201 @kbd{q}, that switches back to the buffer (and the position) which was
Dave Love <fx@gnu.org>
parents:
diff changeset
202 previously displayed in the window. Alternatively, if you exit View
Dave Love <fx@gnu.org>
parents:
diff changeset
203 mode with @kbd{e}, the buffer and the value of point that resulted from
Dave Love <fx@gnu.org>
parents:
diff changeset
204 your perusal remain in effect.
Dave Love <fx@gnu.org>
parents:
diff changeset
205
Dave Love <fx@gnu.org>
parents:
diff changeset
206 The commands @kbd{M-x append-to-buffer} and @kbd{M-x insert-buffer}
Dave Love <fx@gnu.org>
parents:
diff changeset
207 can be used to copy text from one buffer to another. @xref{Accumulating
Dave Love <fx@gnu.org>
parents:
diff changeset
208 Text}.@refill
Dave Love <fx@gnu.org>
parents:
diff changeset
209
Dave Love <fx@gnu.org>
parents:
diff changeset
210 @node Kill Buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
211 @section Killing Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
212
Dave Love <fx@gnu.org>
parents:
diff changeset
213 @cindex killing buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
214 If you continue an Emacs session for a while, you may accumulate a
Dave Love <fx@gnu.org>
parents:
diff changeset
215 large number of buffers. You may then find it convenient to @dfn{kill}
Dave Love <fx@gnu.org>
parents:
diff changeset
216 the buffers you no longer need. On most operating systems, killing a
Dave Love <fx@gnu.org>
parents:
diff changeset
217 buffer releases its space back to the operating system so that other
Dave Love <fx@gnu.org>
parents:
diff changeset
218 programs can use it. Here are some commands for killing buffers:
Dave Love <fx@gnu.org>
parents:
diff changeset
219
Dave Love <fx@gnu.org>
parents:
diff changeset
220 @c WideCommands
Dave Love <fx@gnu.org>
parents:
diff changeset
221 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
222 @item C-x k @var{bufname} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
223 Kill buffer @var{bufname} (@code{kill-buffer}).
Dave Love <fx@gnu.org>
parents:
diff changeset
224 @item M-x kill-some-buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
225 Offer to kill each buffer, one by one.
Dave Love <fx@gnu.org>
parents:
diff changeset
226 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
227
Dave Love <fx@gnu.org>
parents:
diff changeset
228 @findex kill-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
229 @findex kill-some-buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
230 @kindex C-x k
Dave Love <fx@gnu.org>
parents:
diff changeset
231
Dave Love <fx@gnu.org>
parents:
diff changeset
232 @kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you
Dave Love <fx@gnu.org>
parents:
diff changeset
233 specify in the minibuffer. The default, used if you type just @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
234 in the minibuffer, is to kill the current buffer. If you kill the
Dave Love <fx@gnu.org>
parents:
diff changeset
235 current buffer, another buffer is selected; one that has been selected
Dave Love <fx@gnu.org>
parents:
diff changeset
236 recently but does not appear in any window now. If you ask to kill a
Dave Love <fx@gnu.org>
parents:
diff changeset
237 file-visiting buffer that is modified (has unsaved editing), then you
Dave Love <fx@gnu.org>
parents:
diff changeset
238 must confirm with @kbd{yes} before the buffer is killed.
Dave Love <fx@gnu.org>
parents:
diff changeset
239
Dave Love <fx@gnu.org>
parents:
diff changeset
240 The command @kbd{M-x kill-some-buffers} asks about each buffer, one by
Dave Love <fx@gnu.org>
parents:
diff changeset
241 one. An answer of @kbd{y} means to kill the buffer. Killing the current
Dave Love <fx@gnu.org>
parents:
diff changeset
242 buffer or a buffer containing unsaved changes selects a new buffer or asks
Dave Love <fx@gnu.org>
parents:
diff changeset
243 for confirmation just like @code{kill-buffer}.
Dave Love <fx@gnu.org>
parents:
diff changeset
244
Dave Love <fx@gnu.org>
parents:
diff changeset
245 The buffer menu feature (@pxref{Several Buffers}) is also convenient
Dave Love <fx@gnu.org>
parents:
diff changeset
246 for killing various buffers.
Dave Love <fx@gnu.org>
parents:
diff changeset
247
Dave Love <fx@gnu.org>
parents:
diff changeset
248 @vindex kill-buffer-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
249 If you want to do something special every time a buffer is killed, you
Dave Love <fx@gnu.org>
parents:
diff changeset
250 can add hook functions to the hook @code{kill-buffer-hook} (@pxref{Hooks}).
Dave Love <fx@gnu.org>
parents:
diff changeset
251
Dave Love <fx@gnu.org>
parents:
diff changeset
252 @findex clean-buffer-list
Dave Love <fx@gnu.org>
parents:
diff changeset
253 If you run one Emacs session for a period of days, as many people do,
Dave Love <fx@gnu.org>
parents:
diff changeset
254 it can fill up with buffers that you used several days ago. The command
Dave Love <fx@gnu.org>
parents:
diff changeset
255 @kbd{M-x clean-buffer-list} is a convenient way to purge them; it kills
Dave Love <fx@gnu.org>
parents:
diff changeset
256 all the unmodified buffers that you have not used for a long time. An
Dave Love <fx@gnu.org>
parents:
diff changeset
257 ordinary buffer is killed if it has not been displayed for three days;
Dave Love <fx@gnu.org>
parents:
diff changeset
258 however, you can specify certain buffers that should never be killed
Dave Love <fx@gnu.org>
parents:
diff changeset
259 automatically, and others that should be killed if they have been unused
Dave Love <fx@gnu.org>
parents:
diff changeset
260 for a mere hour.
Dave Love <fx@gnu.org>
parents:
diff changeset
261
Dave Love <fx@gnu.org>
parents:
diff changeset
262 @cindex Midnight mode
Dave Love <fx@gnu.org>
parents:
diff changeset
263 @vindex midnight-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
264 @vindex midnight-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
265 You can also have this buffer purging done for you, every day at
Dave Love <fx@gnu.org>
parents:
diff changeset
266 midnight, by enabling Midnight mode. Midnight mode operates each day at
Dave Love <fx@gnu.org>
parents:
diff changeset
267 midnight; at that time, it runs @code{clean-buffer-list}, or whichever
Dave Love <fx@gnu.org>
parents:
diff changeset
268 functions you have placed in the normal hook @code{midnight-hook}
Dave Love <fx@gnu.org>
parents:
diff changeset
269 (@pxref{Hooks}).
Dave Love <fx@gnu.org>
parents:
diff changeset
270
Dave Love <fx@gnu.org>
parents:
diff changeset
271 To enable Midnight mode, use the Customization buffer to set the
Dave Love <fx@gnu.org>
parents:
diff changeset
272 variable @code{midnight-mode} to @code{t}. @xref{Easy Customization}.
Dave Love <fx@gnu.org>
parents:
diff changeset
273
Dave Love <fx@gnu.org>
parents:
diff changeset
274 @node Several Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
275 @section Operating on Several Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
276 @cindex buffer menu
Dave Love <fx@gnu.org>
parents:
diff changeset
277
Dave Love <fx@gnu.org>
parents:
diff changeset
278 The @dfn{buffer-menu} facility is like a ``Dired for buffers''; it allows
Dave Love <fx@gnu.org>
parents:
diff changeset
279 you to request operations on various Emacs buffers by editing an Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
280 buffer containing a list of them. You can save buffers, kill them
Dave Love <fx@gnu.org>
parents:
diff changeset
281 (here called @dfn{deleting} them, for consistency with Dired), or display
Dave Love <fx@gnu.org>
parents:
diff changeset
282 them.
Dave Love <fx@gnu.org>
parents:
diff changeset
283
Dave Love <fx@gnu.org>
parents:
diff changeset
284 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
285 @item M-x buffer-menu
Dave Love <fx@gnu.org>
parents:
diff changeset
286 Begin editing a buffer listing all Emacs buffers.
Dave Love <fx@gnu.org>
parents:
diff changeset
287 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
288
Dave Love <fx@gnu.org>
parents:
diff changeset
289 @findex buffer-menu
Dave Love <fx@gnu.org>
parents:
diff changeset
290 The command @code{buffer-menu} writes a list of all Emacs buffers into
Dave Love <fx@gnu.org>
parents:
diff changeset
291 the buffer @samp{*Buffer List*}, and selects that buffer in Buffer Menu
Dave Love <fx@gnu.org>
parents:
diff changeset
292 mode. The buffer is read-only, and can be changed only through the
Dave Love <fx@gnu.org>
parents:
diff changeset
293 special commands described in this section. The usual Emacs cursor
Dave Love <fx@gnu.org>
parents:
diff changeset
294 motion commands can be used in the @samp{*Buffer List*} buffer. The
Dave Love <fx@gnu.org>
parents:
diff changeset
295 following commands apply to the buffer described on the current line.
Dave Love <fx@gnu.org>
parents:
diff changeset
296
Dave Love <fx@gnu.org>
parents:
diff changeset
297 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
298 @item d
Dave Love <fx@gnu.org>
parents:
diff changeset
299 Request to delete (kill) the buffer, then move down. The request
Dave Love <fx@gnu.org>
parents:
diff changeset
300 shows as a @samp{D} on the line, before the buffer name. Requested
Dave Love <fx@gnu.org>
parents:
diff changeset
301 deletions take place when you type the @kbd{x} command.
Dave Love <fx@gnu.org>
parents:
diff changeset
302 @item C-d
Dave Love <fx@gnu.org>
parents:
diff changeset
303 Like @kbd{d} but move up afterwards instead of down.
Dave Love <fx@gnu.org>
parents:
diff changeset
304 @item s
Dave Love <fx@gnu.org>
parents:
diff changeset
305 Request to save the buffer. The request shows as an @samp{S} on the
Dave Love <fx@gnu.org>
parents:
diff changeset
306 line. Requested saves take place when you type the @kbd{x} command.
Dave Love <fx@gnu.org>
parents:
diff changeset
307 You may request both saving and deletion for the same buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
308 @item x
Dave Love <fx@gnu.org>
parents:
diff changeset
309 Perform previously requested deletions and saves.
Dave Love <fx@gnu.org>
parents:
diff changeset
310 @item u
Dave Love <fx@gnu.org>
parents:
diff changeset
311 Remove any request made for the current line, and move down.
Dave Love <fx@gnu.org>
parents:
diff changeset
312 @item @key{DEL}
Dave Love <fx@gnu.org>
parents:
diff changeset
313 Move to previous line and remove any request made for that line.
Dave Love <fx@gnu.org>
parents:
diff changeset
314 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
315
Dave Love <fx@gnu.org>
parents:
diff changeset
316 The @kbd{d}, @kbd{C-d}, @kbd{s} and @kbd{u} commands to add or remove
Dave Love <fx@gnu.org>
parents:
diff changeset
317 flags also move down (or up) one line. They accept a numeric argument
Dave Love <fx@gnu.org>
parents:
diff changeset
318 as a repeat count.
Dave Love <fx@gnu.org>
parents:
diff changeset
319
Dave Love <fx@gnu.org>
parents:
diff changeset
320 These commands operate immediately on the buffer listed on the current
Dave Love <fx@gnu.org>
parents:
diff changeset
321 line:
Dave Love <fx@gnu.org>
parents:
diff changeset
322
Dave Love <fx@gnu.org>
parents:
diff changeset
323 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
324 @item ~
Dave Love <fx@gnu.org>
parents:
diff changeset
325 Mark the buffer ``unmodified.'' The command @kbd{~} does this
Dave Love <fx@gnu.org>
parents:
diff changeset
326 immediately when you type it.
Dave Love <fx@gnu.org>
parents:
diff changeset
327 @item %
Dave Love <fx@gnu.org>
parents:
diff changeset
328 Toggle the buffer's read-only flag. The command @kbd{%} does
Dave Love <fx@gnu.org>
parents:
diff changeset
329 this immediately when you type it.
Dave Love <fx@gnu.org>
parents:
diff changeset
330 @item t
Dave Love <fx@gnu.org>
parents:
diff changeset
331 Visit the buffer as a tags table. @xref{Select Tags Table}.
Dave Love <fx@gnu.org>
parents:
diff changeset
332 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
333
Dave Love <fx@gnu.org>
parents:
diff changeset
334 There are also commands to select another buffer or buffers:
Dave Love <fx@gnu.org>
parents:
diff changeset
335
Dave Love <fx@gnu.org>
parents:
diff changeset
336 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
337 @item q
Dave Love <fx@gnu.org>
parents:
diff changeset
338 Quit the buffer menu---immediately display the most recent formerly
Dave Love <fx@gnu.org>
parents:
diff changeset
339 visible buffer in its place.
Dave Love <fx@gnu.org>
parents:
diff changeset
340 @item @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
341 @itemx f
Dave Love <fx@gnu.org>
parents:
diff changeset
342 Immediately select this line's buffer in place of the @samp{*Buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
343 List*} buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
344 @item o
Dave Love <fx@gnu.org>
parents:
diff changeset
345 Immediately select this line's buffer in another window as if by
Dave Love <fx@gnu.org>
parents:
diff changeset
346 @kbd{C-x 4 b}, leaving @samp{*Buffer List*} visible.
Dave Love <fx@gnu.org>
parents:
diff changeset
347 @item C-o
Dave Love <fx@gnu.org>
parents:
diff changeset
348 Immediately display this line's buffer in another window, but don't
Dave Love <fx@gnu.org>
parents:
diff changeset
349 select the window.
Dave Love <fx@gnu.org>
parents:
diff changeset
350 @item 1
Dave Love <fx@gnu.org>
parents:
diff changeset
351 Immediately select this line's buffer in a full-screen window.
Dave Love <fx@gnu.org>
parents:
diff changeset
352 @item 2
Dave Love <fx@gnu.org>
parents:
diff changeset
353 Immediately set up two windows, with this line's buffer in one, and the
Dave Love <fx@gnu.org>
parents:
diff changeset
354 previously selected buffer (aside from the buffer @samp{*Buffer List*})
Dave Love <fx@gnu.org>
parents:
diff changeset
355 in the other.
Dave Love <fx@gnu.org>
parents:
diff changeset
356 @item b
Dave Love <fx@gnu.org>
parents:
diff changeset
357 Bury the buffer listed on this line.
Dave Love <fx@gnu.org>
parents:
diff changeset
358 @item m
Dave Love <fx@gnu.org>
parents:
diff changeset
359 Mark this line's buffer to be displayed in another window if you exit
Dave Love <fx@gnu.org>
parents:
diff changeset
360 with the @kbd{v} command. The request shows as a @samp{>} at the
Dave Love <fx@gnu.org>
parents:
diff changeset
361 beginning of the line. (A single buffer may not have both a delete
Dave Love <fx@gnu.org>
parents:
diff changeset
362 request and a display request.)
Dave Love <fx@gnu.org>
parents:
diff changeset
363 @item v
Dave Love <fx@gnu.org>
parents:
diff changeset
364 Immediately select this line's buffer, and also display in other windows
Dave Love <fx@gnu.org>
parents:
diff changeset
365 any buffers previously marked with the @kbd{m} command. If you have not
Dave Love <fx@gnu.org>
parents:
diff changeset
366 marked any buffers, this command is equivalent to @kbd{1}.
Dave Love <fx@gnu.org>
parents:
diff changeset
367 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
368
Dave Love <fx@gnu.org>
parents:
diff changeset
369 All that @code{buffer-menu} does directly is create and switch to a
Dave Love <fx@gnu.org>
parents:
diff changeset
370 suitable buffer, and turn on Buffer Menu mode. Everything else
Dave Love <fx@gnu.org>
parents:
diff changeset
371 described above is implemented by the special commands provided in
Dave Love <fx@gnu.org>
parents:
diff changeset
372 Buffer Menu mode. One consequence of this is that you can switch from
Dave Love <fx@gnu.org>
parents:
diff changeset
373 the @samp{*Buffer List*} buffer to another Emacs buffer, and edit there.
Dave Love <fx@gnu.org>
parents:
diff changeset
374 You can reselect the @samp{*Buffer List*} buffer later, to perform the
Dave Love <fx@gnu.org>
parents:
diff changeset
375 operations already requested, or you can kill it, or pay no further
Dave Love <fx@gnu.org>
parents:
diff changeset
376 attention to it.
Dave Love <fx@gnu.org>
parents:
diff changeset
377
Dave Love <fx@gnu.org>
parents:
diff changeset
378 The only difference between @code{buffer-menu} and @code{list-buffers}
Dave Love <fx@gnu.org>
parents:
diff changeset
379 is that @code{buffer-menu} switches to the @samp{*Buffer List*} buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
380 in the selected window; @code{list-buffers} displays it in another
Dave Love <fx@gnu.org>
parents:
diff changeset
381 window. If you run @code{list-buffers} (that is, type @kbd{C-x C-b})
Dave Love <fx@gnu.org>
parents:
diff changeset
382 and select the buffer list manually, you can use all of the commands
Dave Love <fx@gnu.org>
parents:
diff changeset
383 described here.
Dave Love <fx@gnu.org>
parents:
diff changeset
384
Dave Love <fx@gnu.org>
parents:
diff changeset
385 The buffer @samp{*Buffer List*} is not updated automatically when
Dave Love <fx@gnu.org>
parents:
diff changeset
386 buffers are created and killed; its contents are just text. If you have
Dave Love <fx@gnu.org>
parents:
diff changeset
387 created, deleted or renamed buffers, the way to update @samp{*Buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
388 List*} to show what you have done is to type @kbd{g}
Dave Love <fx@gnu.org>
parents:
diff changeset
389 (@code{revert-buffer}) or repeat the @code{buffer-menu} command.
Dave Love <fx@gnu.org>
parents:
diff changeset
390
Dave Love <fx@gnu.org>
parents:
diff changeset
391 @node Indirect Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
392 @section Indirect Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
393 @cindex indirect buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
394 @cindex base buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
395
Dave Love <fx@gnu.org>
parents:
diff changeset
396 An @dfn{indirect buffer} shares the text of some other buffer, which
Dave Love <fx@gnu.org>
parents:
diff changeset
397 is called the @dfn{base buffer} of the indirect buffer. In some ways it
Dave Love <fx@gnu.org>
parents:
diff changeset
398 is the analogue, for buffers, of a symbolic link between files.
Dave Love <fx@gnu.org>
parents:
diff changeset
399
Dave Love <fx@gnu.org>
parents:
diff changeset
400 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
401 @findex make-indirect-buffer
36455
0f5618d75b4a (Indirect Buffers): Add a @key[RET}.
Gerd Moellmann <gerd@gnu.org>
parents: 36263
diff changeset
402 @item M-x make-indirect-buffer @key{RET} @var{base-buffer} @key{RET} @var{indirect-name} @key{RET}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
403 Create an indirect buffer named @var{indirect-name} whose base buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
404 is @var{base-buffer}.
31056
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
405 @findex clone-indirect-buffer
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
406 @item M-x clone-indirect-buffer @key{RET}
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
407 Create an indirect buffer that is a twin copy of the current buffer.
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
408 @kindex C-x 4 c
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
409 @findex clone-indirect-buffer-other-window
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
410 Create an indirect buffer that is a twin copy of the current buffer, and
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
411 select it in another window (@code{clone-indirect-buffer-other-window}).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
412 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
413
Dave Love <fx@gnu.org>
parents:
diff changeset
414 The text of the indirect buffer is always identical to the text of its
Dave Love <fx@gnu.org>
parents:
diff changeset
415 base buffer; changes made by editing either one are visible immediately
Dave Love <fx@gnu.org>
parents:
diff changeset
416 in the other. But in all other respects, the indirect buffer and its
Dave Love <fx@gnu.org>
parents:
diff changeset
417 base buffer are completely separate. They have different names,
Dave Love <fx@gnu.org>
parents:
diff changeset
418 different values of point, different narrowing, different markers,
Dave Love <fx@gnu.org>
parents:
diff changeset
419 different major modes, and different local variables.
Dave Love <fx@gnu.org>
parents:
diff changeset
420
Dave Love <fx@gnu.org>
parents:
diff changeset
421 An indirect buffer cannot visit a file, but its base buffer can. If
Dave Love <fx@gnu.org>
parents:
diff changeset
422 you try to save the indirect buffer, that actually works by saving the
Dave Love <fx@gnu.org>
parents:
diff changeset
423 base buffer. Killing the base buffer effectively kills the indirect
Dave Love <fx@gnu.org>
parents:
diff changeset
424 buffer, but killing an indirect buffer has no effect on its base buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
425
Dave Love <fx@gnu.org>
parents:
diff changeset
426 One way to use indirect buffers is to display multiple views of an
Dave Love <fx@gnu.org>
parents:
diff changeset
427 outline. @xref{Outline Views}.
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
428
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
429 @cindex multiple @samp{*info*} and @samp{*Help*} buffers
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
430 A quick and handy way to make an indirect buffer is with the command
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
431 @kbd{M-x clone-indirect-buffer}. It creates and selects an indirect
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
432 buffer whose base buffer is the current buffer. With a numeric
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
433 argument, it prompts for the name of the indirect buffer; otherwise it
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
434 defaults to the name of the current buffer, modifying it by adding a
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
435 @samp{<@var{n}>} prefix if required. @kbd{C-x 4 c}
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
436 (@code{clone-indirect-buffer-other-window}) works like @kbd{M-x
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
437 clone-indirect-buffer}, but it selects the cloned buffer in another
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
438 window. These commands come in handy if you want to create new
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
439 @samp{*info*} or @samp{*Help*} buffers, for example.
31056
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
440
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
441 The more general way is with the command @kbd{M-x
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
442 make-indirect-buffer}. It creates an indirect buffer from buffer
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
443 @var{base-buffer}, under the name @var{indirect-name}. It prompts for
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
444 both @var{base-buffer} and @var{indirect-name} using the minibuffer.
31056
3d90d6c1f3b9 Document clone-indirect-buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 30869
diff changeset
445
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
446 @node Buffer Convenience
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
447 @section Convenience Features and Customization of Buffer Handling
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
448
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
449 @menu
31311
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
450 * Uniquify:: Buffer names can contain directory parts.
31815
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
451 * Iswitchb:: Switching between buffers with substrings.
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
452 * Buffer Menus:: Configurable buffer menu.
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
453 @end menu
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
454
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
455 @node Uniquify
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
456 @subsection Making Buffer Names Unique
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
457
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
458 @cindex unique buffer names
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
459 @cindex directories in buffer names
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
460 When several buffers visit identically-named files, Emacs must give
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
461 the buffers distinct names. The usual method for making buffer names
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
462 unique adds @samp{<2>}, @samp{<3>}, etc. to the end of the buffer
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
463 names (all but one of them).
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
464
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
465 @vindex uniquify-buffer-name-style
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
466 Other methods work by adding parts of each file's directory to the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
467 buffer name. To select one, customize the variable
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
468 @code{uniquify-buffer-name-style} (@pxref{Easy Customization}).
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
469
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
470 For instance, the @code{forward} naming method puts part of the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
471 directory name at the beginning of the buffer name; using this method,
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
472 buffers visiting @file{/u/mernst/tmp/Makefile} and
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
473 @file{/usr/projects/zaphod/Makefile} would be named
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
474 @samp{tmp/Makefile} and @samp{zaphod/Makefile}, respectively (instead
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
475 of @samp{Makefile} and @samp{Makefile<2>}).
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
476
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
477 By contrast, the @code{post-forward} naming method would call the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
478 buffers @samp{Makefile|tmp} and @samp{Makefile|zaphod}, and the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
479 @code{reverse} naming method would call them @samp{Makefile\tmp} and
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
480 @samp{Makefile\zaphod}. The nontrivial difference between
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
481 @code{post-forward} and @code{reverse} occurs when just one directory
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
482 name is not enough to distinguish two files; then @code{reverse} puts
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
483 the directory names in reverse order, so that @file{/top/middle/file}
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
484 becomes @samp{file\middle\top}, while @code{post-forward} puts them in
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
485 forward order after the file name, as in @samp{file|top/middle}.
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
486
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
487 Which rule to follow for putting the directory names in the buffer
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
488 name is not very important if you are going to @emph{look} at the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
489 buffer names before you type one. But as an experienced user, if you
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
490 know the rule, you won't have to look. And then you may find that one
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
491 rule or another is easier for you to remember and utilize fast.
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
492
31815
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
493 @node Iswitchb
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
494 @subsection Switching Between Buffers using Substrings
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
495
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
496 @findex iswitchb-mode
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
497 @cindex Iswitchb mode
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
498 @cindex mode, Iswitchb
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
499 @kindex C-x b @r{(Iswitchb mode)}
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
500 @kindex C-x 4 b @r{(Iswitchb mode)}
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
501 @kindex C-x 5 b @r{(Iswitchb mode)}
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
502 @kindex C-x 4 C-o @r{(Iswitchb mode)}
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
503
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
504 Iswitchb global minor mode provides convenient switching between
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
505 buffers using substrings of their names. It replaces the normal
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
506 definitions of @kbd{C-x b}, @kbd{C-x 4 b}, @kbd{C-x 5 b}, and @kbd{C-x
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
507 4 C-o} with alternative commands that are somewhat ``smarter.''
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
508
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
509 When one of these commands prompts you for a buffer name, you can
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
510 type in just a substring of the name you want to choose. As you enter
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
511 the substring, Iswitchb mode continuously displays a list of buffers
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
512 that match the substring you have typed.
31815
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
513
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
514 At any time, you can type @key{RET} to select the first buffer in
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
515 the list. So the way to select a particular buffer is to make it the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
516 first in the list. There are two ways to do this. You can type more
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
517 of the buffer name and thus narrow down the list, excluding unwanted
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
518 buffers above the desired one. Alternatively, you can use @kbd{C-s}
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
519 and @kbd{C-r} to rotate the list until the desired buffer is first.
31815
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
520
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
521 @key{TAB} while entering the buffer name performs completion on the
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
522 string you have entered, based on the displayed list of buffers.
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
523
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
524 @node Buffer Menus
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
525 @subsection Customizing Buffer Menus
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
526
31311
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
527 @findex bs-show
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
528 @cindex buffer list, customizable
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
529 @table @kbd
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
530 @item M-x bs-show
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
531 Make a list of buffers similarly to @kbd{M-x list-buffers} but
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
532 customizable.
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
533 @end table
a04fdd7a9207 bs-show
Dave Love <fx@gnu.org>
parents: 31185
diff changeset
534
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
535 @kbd{M-x bs-show} pops up a buffer list similar to the one normally
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
536 displayed by @kbd{C-x C-b} but which you can customize. If you prefer
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
537 this to the usual buffer list, you can bind this command to @kbd{C-x
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
538 C-b}. To customize this buffer list, use the @code{bs} Custom group
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
539 (@pxref{Easy Customization}).
30869
1827bd720842 (Buffer Convenience): New.
Dave Love <fx@gnu.org>
parents: 30772
diff changeset
540
31815
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
541 @findex msb-mode
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
542 @cindex mode, MSB
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
543 @cindex MSB mode
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
544 @cindex buffer menu
e0b702f0bc3c iswitchb, msb
Dave Love <fx@gnu.org>
parents: 31311
diff changeset
545 @findex mouse-buffer-menu
36143
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
546 @kindex C-Down-Mouse-1
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
547 MSB global minor mode (``MSB'' stands for ``mouse select buffer'')
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
548 provides a different and customizable mouse buffer menu which you may
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
549 prefer. It replaces the bindings of @code{mouse-buffer-menu},
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
550 normally on @kbd{C-Down-Mouse-1}, and the menu bar buffer menu. You
44a6f7ea121f Major rewrite of Uniquify node and Iswitchb node.
Richard M. Stallman <rms@gnu.org>
parents: 31815
diff changeset
551 can customize the menu in the @code{msb} Custom group.