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