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