Mercurial > emacs
annotate doc/emacs/buffers.texi @ 112278:ef719132ddfa
Nuke arch-tags.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Sat, 15 Jan 2011 15:16:57 -0800 |
parents | 376148b31b5e |
children |
rev | line source |
---|---|
84224 | 1 @c This is part of the Emacs manual. |
2 @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, | |
112218
376148b31b5e
Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents:
109262
diff
changeset
|
3 @c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
109262
51ddcf320fe4
Untabify doc/emacs/*.texi files.
Glenn Morris <rgm@gnu.org>
parents:
107112
diff
changeset
|
4 @c Free Software Foundation, Inc. |
84224 | 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 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
17 Each buffer has a unique name, which can be of any length. When a |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
18 buffer is displayed in a window, its name is shown in the mode line |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
19 (@pxref{Mode Line}). The distinction between upper and lower case |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
20 matters in buffer names. Most buffers are made by visiting files, and |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
21 their names are derived from the files' names; however, you can also |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
22 create an empty buffer with any name you want. A newly started Emacs |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
23 has a buffer named @samp{*scratch*}, which is not associated with any |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
24 file and can be used for evaluating Lisp expressions in Emacs |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
25 (@pxref{Lisp Interaction}). |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
26 |
84224 | 27 @cindex selected buffer |
28 @cindex current buffer | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
29 At any time, one and only one buffer is @dfn{current}. This is also |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
30 called the @dfn{selected buffer}. We often say that a command |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
31 operates on ``the buffer''; this really means that the command |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
32 operates on the current buffer (most commands do). When there is only |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
33 one Emacs window, the buffer displayed in that window is current. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
34 When there are multiple windows present, the buffer displayed in the |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
35 @dfn{selected window} is current. @xref{Windows}. |
84224 | 36 |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
37 Each buffer records individually what file it is visiting (if any), |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
38 whether it is modified, and what major mode and minor modes are in |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
39 effect (@pxref{Major Modes}). Any Emacs variable can be made |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
40 @dfn{local to} a particular buffer, meaning its value in that buffer |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
41 can be different from the value in other buffers. @xref{Locals}. |
84224 | 42 |
43 @cindex buffer size, maximum | |
44 A buffer's size cannot be larger than some maximum, which is defined | |
106636
6c68929f170b
* emacs.texi (Top): Update node listing.
Chong Yidong <cyd@stupidchicken.com>
parents:
104626
diff
changeset
|
45 by the largest buffer position representable by the @dfn{Emacs |
6c68929f170b
* emacs.texi (Top): Update node listing.
Chong Yidong <cyd@stupidchicken.com>
parents:
104626
diff
changeset
|
46 integer} data type. This is because Emacs tracks buffer positions |
6c68929f170b
* emacs.texi (Top): Update node listing.
Chong Yidong <cyd@stupidchicken.com>
parents:
104626
diff
changeset
|
47 using that data type. For 32-bit machines, the largest buffer size is |
6c68929f170b
* emacs.texi (Top): Update node listing.
Chong Yidong <cyd@stupidchicken.com>
parents:
104626
diff
changeset
|
48 512 megabytes. |
84224 | 49 |
50 @menu | |
51 * Select Buffer:: Creating a new buffer or reselecting an old one. | |
52 * List Buffers:: Getting a list of buffers that exist. | |
109262
51ddcf320fe4
Untabify doc/emacs/*.texi files.
Glenn Morris <rgm@gnu.org>
parents:
107112
diff
changeset
|
53 * Misc Buffer:: Renaming; changing read-onlyness; copying text. |
51ddcf320fe4
Untabify doc/emacs/*.texi files.
Glenn Morris <rgm@gnu.org>
parents:
107112
diff
changeset
|
54 * Kill Buffer:: Killing buffers you no longer need. |
84224 | 55 * Several Buffers:: How to go through the list of all buffers |
109262
51ddcf320fe4
Untabify doc/emacs/*.texi files.
Glenn Morris <rgm@gnu.org>
parents:
107112
diff
changeset
|
56 and operate variously on several of them. |
84224 | 57 * Indirect Buffers:: An indirect buffer shares the text of another buffer. |
58 * Buffer Convenience:: Convenience and customization features for | |
59 buffer handling. | |
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 @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. | |
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. | |
84 @end table | |
85 | |
86 @kindex C-x b | |
87 @findex switch-to-buffer | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
88 To select the buffer named @var{bufname}, type @kbd{C-x b |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
89 @var{bufname} @key{RET}}. This runs the command |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
90 @code{switch-to-buffer} with argument @var{bufname}. While entering |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
91 the buffer name, you can use the usual minibuffer completion and |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
92 history commands (@pxref{Minibuffer}). An empty argument to @kbd{C-x |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
93 b} specifies the buffer that was current most recently among those not |
84224 | 94 now displayed in any window. |
95 | |
99889
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
96 @cindex minibuffer confirmation |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
97 @cindex confirming in the minibuffer |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
98 If you specify a buffer that does not exist, @kbd{C-x b} creates a |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
99 new, empty buffer that is not visiting any file, and selects it for |
99889
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
100 editing. First, however, Emacs might prompt you for confirmation, in |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
101 case you entered the wrong buffer name. Emacs asks for confirmation |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
102 only if the last key you typed, before submitting the minibuffer input |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
103 with @key{RET}, was @key{TAB} (@code{minibuffer-complete}). This |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
104 catches a common mistake, in which one types @key{RET} before |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
105 realizing that @key{TAB} did not complete far enough to yield the |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
106 desired buffer name (@pxref{Completion}). Emacs asks for confirmation |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
107 by putting the message @samp{[Confirm]} in the minibuffer; type |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
108 @key{RET} again to confirm and visit the buffer. |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
109 |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
110 @vindex confirm-nonexistent-file-or-buffer |
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
111 The variable @code{confirm-nonexistent-file-or-buffer} controls |
99962
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
112 whether Emacs asks for confirmation before visiting a buffer that did |
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
113 not previously exist. The default value, @code{after-completion}, |
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
114 gives the behavior we have just described. If the value is |
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
115 @code{nil}, Emacs never asks for confirmation; for any other |
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
116 non-@code{nil} value, Emacs always asks for confirmation. This |
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
117 variable also affects the @code{find-file} command (@pxref{Visiting}). |
99889
ddb4dd7dc45f
(Select Buffer): Document confirm-nonexistent-file-or-buffer.
Chong Yidong <cyd@stupidchicken.com>
parents:
99800
diff
changeset
|
118 |
99962
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
119 One reason to create a new buffer is to use it for making temporary |
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
120 notes. If you try to save it, Emacs asks for the file name to use. |
104626
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100974
diff
changeset
|
121 The default value of the variable @code{major-mode} determines the new |
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100974
diff
changeset
|
122 buffer's major mode; the default value is Fundamental mode. @xref{Major |
99962
74ae3845d031
(Select Buffer): Rewrite paragraphs using active voice.
Chong Yidong <cyd@stupidchicken.com>
parents:
99889
diff
changeset
|
123 Modes}. |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
124 |
84224 | 125 @kindex C-x @key{LEFT} |
126 @kindex C-x @key{RIGHT} | |
127 @findex next-buffer | |
128 @findex previous-buffer | |
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}} | |
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}} | |
133 (@code{next-buffer}) moves through buffers in the reverse direction. | |
134 | |
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 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
139 @kbd{C-x 4 b} (@code{switch-to-buffer-other-window}). This prompts |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
140 for a buffer name using the minibuffer, displays that buffer in |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
141 another window, and selects that window. By default, if displaying |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
142 the buffer causes two vertically adjacent windows to be displayed, the |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
143 heights of those windows are evened out; to countermand that and |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
144 preserve the window configuration, set the variable |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
145 @code{even-window-heights} to @code{nil}. |
84224 | 146 |
147 @kindex C-x 5 b | |
148 @findex switch-to-buffer-other-frame | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
149 Similarly, @kbd{C-x 5 b} (@code{switch-to-buffer-other-frame}) |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
150 prompts for a buffer name, displays that buffer in another frame, and |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
151 selects that frame. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
152 |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
153 In addition, @kbd{C-x C-f}, and any other command for visiting a |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
154 file, can also be used to switch to an existing file-visiting buffer. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
155 @xref{Visiting}. |
84224 | 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 | |
165 displayed in some frame, Emacs will just raise that frame. | |
166 | |
99800
9c08427f603c
* buffers.texi (Select Buffer): Index goto-line.
Lute Kamstra <lute@gnu.org>
parents:
98617
diff
changeset
|
167 @findex goto-line |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
168 @kbd{C-u M-g M-g}, that is @code{goto-line} with a plain prefix |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
169 argument, reads a number @var{n} using the minibuffer, selects the |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
170 most recently selected buffer other than the current buffer in another |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
171 window, and then moves point to the beginning of line number @var{n} |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
172 in that buffer. This is mainly useful in a buffer that refers to line |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
173 numbers in another buffer: if point is on or just after a number, |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
174 @code{goto-line} uses that number as the default for @var{n}. Note |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
175 that prefix arguments other than just @kbd{C-u} behave differently. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
176 @kbd{C-u 4 M-g M-g} goes to line 4 in the @emph{current} buffer, |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
177 without reading a number from the minibuffer. (Remember that @kbd{M-g |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
178 M-g} without prefix argument reads a number @var{n} and then moves to |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
179 line number @var{n} in the current buffer. @xref{Moving Point}.) |
84224 | 180 |
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 | |
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 | |
200 buffers that were current most recently come first. | |
201 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
202 @samp{.} in the first field of a line indicates that the buffer is |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
203 current. @samp{%} indicates a read-only buffer. @samp{*} indicates |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
204 that the buffer is ``modified.'' If several buffers are modified, it |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
205 may be time to save some with @kbd{C-x s} (@pxref{Save Commands}). |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
206 Here is an example of a buffer list: |
84224 | 207 |
208 @smallexample | |
209 CRM Buffer Size Mode File | |
210 . * .emacs 3294 Emacs-Lisp ~/.emacs | |
211 % *Help* 101 Help | |
212 search.c 86055 C ~/cvs/emacs/src/search.c | |
213 % src 20959 Dired by name ~/cvs/emacs/src/ | |
214 * *mail* 42 Mail | |
215 % HELLO 1607 Fundamental ~/cvs/emacs/etc/HELLO | |
216 % NEWS 481184 Outline ~/cvs/emacs/etc/NEWS | |
217 *scratch* 191 Lisp Interaction | |
218 * *Messages* 1554 Fundamental | |
219 @end smallexample | |
220 | |
221 @noindent | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
222 The buffer @samp{*Help*} was made by a help request (@pxref{Help}); it |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
223 is not visiting any file. The buffer @code{src} was made by Dired on |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
224 the directory @file{~/cvs/emacs/src/}. You can list only buffers that |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
225 are visiting files by giving the command a prefix argument, as in |
84224 | 226 @kbd{C-u C-x C-b}. |
227 | |
228 @code{list-buffers} omits buffers whose names begin with a space, | |
229 unless they visit files: such buffers are used internally by Emacs. | |
230 | |
231 @node Misc Buffer | |
232 @section Miscellaneous Buffer Operations | |
233 | |
234 @table @kbd | |
235 @item C-x C-q | |
236 Toggle read-only status of buffer (@code{toggle-read-only}). | |
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 | |
246 @vindex buffer-read-only | |
247 @cindex read-only buffer | |
248 A buffer can be @dfn{read-only}, which means that commands to change | |
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. | |
254 | |
255 @findex toggle-read-only | |
256 If you wish to make changes in a read-only buffer, use the command | |
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 | |
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 | |
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} | |
94541
8da676e385e1
vc-toggle-read-only is no longer a good idea.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87903
diff
changeset
|
263 instead. This will guard you against an operation that will confuse |
8da676e385e1
vc-toggle-read-only is no longer a good idea.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87903
diff
changeset
|
264 most modern version-conmtrol systems. @xref{Version Control}. |
84224 | 265 |
266 @findex rename-buffer | |
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. | |
271 | |
272 @findex rename-uniquely | |
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 | |
276 multiple shell buffers: if you rename the @samp{*shell*} buffer, then | |
277 do @kbd{M-x shell} again, it makes a new shell buffer named | |
278 @samp{*shell*}; meanwhile, the old shell buffer continues to exist | |
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.) | |
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 | |
298 Text}. | |
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 | |
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. | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
315 @item M-x kill-matching-buffers |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
316 Offer to kill all buffers matching a regular expression. |
84224 | 317 @end table |
318 | |
319 @findex kill-buffer | |
320 @kindex C-x k | |
321 @kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you | |
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 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
326 you ask to kill a file-visiting buffer that is modified, then you must |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
327 confirm with @kbd{yes} before the buffer is killed. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
328 |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
329 @findex kill-some-buffers |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
330 The command @kbd{M-x kill-some-buffers} asks about each buffer, one |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
331 by one. An answer of @kbd{y} means to kill the buffer, just like |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
332 @code{kill-buffer}. This command ignores buffers whose names begin |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
333 with a space, which are used internally by Emacs. |
84224 | 334 |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
335 @findex kill-matching-buffers |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
336 The command @kbd{M-x kill-matching-buffers} prompts for a regular |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
337 expression and kills all buffers whose names match that expression. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
338 @xref{Regexps}. Like @code{kill-some-buffers}, it asks for |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
339 confirmation before each kill. This command normally ignores buffers |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
340 whose names begin with a space, which are used internally by Emacs. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
341 To kill internal buffers as well, call @code{kill-matching-buffers} |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
342 with a prefix argument. |
84224 | 343 |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
344 The buffer menu feature is also convenient for killing various |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
345 buffers. @xref{Several Buffers}. |
84224 | 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 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
365 midnight, by enabling Midnight mode. Midnight mode operates each day |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
366 at midnight; at that time, it runs @code{clean-buffer-list}, or |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
367 whichever functions you have placed in the normal hook |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
368 @code{midnight-hook} (@pxref{Hooks}). To enable Midnight mode, use |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
369 the Customization buffer to set the variable @code{midnight-mode} to |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
370 @code{t}. @xref{Easy Customization}. |
84224 | 371 |
372 @node Several Buffers | |
373 @section Operating on Several Buffers | |
374 @cindex buffer menu | |
375 | |
376 @table @kbd | |
377 @item M-x buffer-menu | |
378 Begin editing a buffer listing all Emacs buffers. | |
379 @item M-x buffer-menu-other-window. | |
380 Similar, but do it in another window. | |
381 @end table | |
382 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
383 The @dfn{buffer menu} opened by @kbd{C-x C-b} (@pxref{List Buffers}) |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
384 does not merely list buffers. It also allows you to perform various |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
385 operations on buffers, through an interface similar to Dired |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
386 (@pxref{Dired}). You can save buffers, kill them (here called |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
387 @dfn{deleting} them, for consistency with Dired), or display them. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
388 |
84224 | 389 @findex buffer-menu |
390 @findex buffer-menu-other-window | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
391 To use the buffer menu, type @kbd{C-x C-b} and switch to the window |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
392 displaying the @samp{*Buffer List*} buffer. You can also type |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
393 @kbd{M-x buffer-menu} to open the buffer menu in the selected window. |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
394 Alternatively, the command @kbd{M-x buffer-menu-other-window} opens |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
395 the buffer menu in another window, and selects that window. |
84224 | 396 |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
397 The buffer menu is a read-only buffer, and can be changed only |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
398 through the special commands described in this section. The usual |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
399 Emacs cursor motion commands can be used in this buffer. The |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
400 following commands apply to the buffer described on the current line: |
84224 | 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 | |
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. | |
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 | |
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 | |
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 | |
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 | |
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}. | |
500 @iftex | |
501 @inforef{Autorevert,, emacs-xtra}, for details. | |
502 @end iftex | |
503 @ifnottex | |
504 @xref{Autorevert, global-auto-revert-non-file-buffers}, for details. | |
505 @end ifnottex | |
506 | |
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 | |
518 @item M-x make-indirect-buffer @key{RET} @var{base-buffer} @key{RET} @var{indirect-name} @key{RET} | |
519 Create an indirect buffer named @var{indirect-name} whose base buffer | |
520 is @var{base-buffer}. | |
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. | |
524 @item C-x 4 c | |
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}). | |
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 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
534 base buffer are completely separate. They can have different names, |
84224 | 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}. | |
545 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
546 @vindex clone-indirect-buffer-hook |
84224 | 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 | |
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 | |
98617
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
554 buffer in another window. These functions run the hook |
85b9cc909366
(Buffers): Add xrefs to Mode Line and Lisp Interaction.
Chong Yidong <cyd@stupidchicken.com>
parents:
94541
diff
changeset
|
555 @code{clone-indirect-buffer-hook} after creating the indirect buffer. |
84224 | 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. | |
562 | |
563 @node Buffer Convenience | |
564 @section Convenience Features and Customization of Buffer Handling | |
565 | |
566 This section describes several modes and features that make it more | |
567 convenient to switch between buffers. | |
568 | |
569 @menu | |
570 * Uniquify:: Making buffer names unique with directory parts. | |
571 * Iswitchb:: Switching between buffers with substrings. | |
572 * Buffer Menus:: Configurable buffer menu. | |
573 @end menu | |
574 | |
575 @node Uniquify | |
576 @subsection Making Buffer Names Unique | |
577 | |
578 @cindex unique buffer names | |
579 @cindex directories in buffer names | |
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 | |
107111 | 587 buffer name. To select one, load the library @file{uniquify} (e.g. |
107112
759400918e76
* buffers.texi: Fix typo in previous.
Glenn Morris <rgm@gnu.org>
parents:
107111
diff
changeset
|
588 using @code{(require 'uniquify)}), and customize the variable |
84224 | 589 @code{uniquify-buffer-name-style} (@pxref{Easy Customization}). |
590 | |
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 | |
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 | |
598 In contrast, the @code{post-forward} naming method would call the | |
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 | |
612 rule or another is easier for you to remember and apply quickly. | |
613 | |
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 | |
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.'' | |
629 | |
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. | |
634 | |
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 | |
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 | |
649 @node Buffer Menus | |
650 @subsection Customizing Buffer Menus | |
651 | |
652 @findex bs-show | |
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. | |
658 @end table | |
659 | |
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}). | |
665 | |
666 @findex msb-mode | |
667 @cindex mode, MSB | |
668 @cindex MSB mode | |
669 @cindex buffer menu | |
670 @findex mouse-buffer-menu | |
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. |