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