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