Commit | Line | Data |
---|---|---|
6bf7aab6 | 1 | @c This is part of the Emacs manual. |
acaf905b | 2 | @c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2012 |
73b0cd50 | 3 | @c Free Software Foundation, Inc. |
6bf7aab6 | 4 | @c See file emacs.texi for copying conditions. |
abb9615e | 5 | @node Registers |
6bf7aab6 DL |
6 | @chapter Registers |
7 | @cindex registers | |
8 | ||
485bceb5 RS |
9 | Emacs @dfn{registers} are compartments where you can save text, |
10 | rectangles, positions, and other things for later use. Once you save | |
11 | text or a rectangle in a register, you can copy it into the buffer | |
d0ca439d CY |
12 | once, or many times; once you save a position in a register, you can |
13 | jump back to that position once, or many times. | |
14 | ||
15 | Each register has a name that consists of a single character, which | |
16 | we will denote by @var{r}; @var{r} can be a letter (such as @samp{a}) | |
17 | or a number (such as @samp{1}); case matters, so register @samp{a} is | |
18 | not the same as register @samp{A}. | |
6bf7aab6 DL |
19 | |
20 | @findex view-register | |
d0ca439d CY |
21 | A register can store a position, a piece of text, a rectangle, a |
22 | number, a window configuration, or a file name, but only one thing at | |
23 | any given time. Whatever you store in a register remains there until | |
24 | you store something else in that register. To see what register | |
25 | @var{r} contains, use @kbd{M-x view-register}: | |
6bf7aab6 DL |
26 | |
27 | @table @kbd | |
28 | @item M-x view-register @key{RET} @var{r} | |
29 | Display a description of what register @var{r} contains. | |
30 | @end table | |
31 | ||
c48a6229 | 32 | @dfn{Bookmarks} record files and positions in them, so you can |
21100e7d CY |
33 | return to those positions when you look at the file again. Bookmarks |
34 | are similar in spirit to registers, so they are also documented in | |
35 | this chapter. | |
c48a6229 | 36 | |
6bf7aab6 | 37 | @menu |
a30ed87b LMI |
38 | * Position Registers:: Saving positions in registers. |
39 | * Text Registers:: Saving text in registers. | |
40 | * Rectangle Registers:: Saving rectangles in registers. | |
41 | * Configuration Registers:: Saving window configurations in registers. | |
42 | * Number Registers:: Numbers in registers. | |
43 | * File Registers:: File names in registers. | |
44 | * Bookmarks:: Bookmarks are like registers, but persistent. | |
6bf7aab6 DL |
45 | @end menu |
46 | ||
a30ed87b | 47 | @node Position Registers |
6bf7aab6 | 48 | @section Saving Positions in Registers |
7ea0f431 | 49 | @cindex saving position in a register |
6bf7aab6 | 50 | |
6bf7aab6 DL |
51 | @table @kbd |
52 | @item C-x r @key{SPC} @var{r} | |
d0ca439d CY |
53 | Record the position of point and the current buffer in register |
54 | @var{r} (@code{point-to-register}). | |
6bf7aab6 | 55 | @item C-x r j @var{r} |
d0ca439d CY |
56 | Jump to the position and buffer saved in register @var{r} |
57 | (@code{jump-to-register}). | |
6bf7aab6 DL |
58 | @end table |
59 | ||
60 | @kindex C-x r SPC | |
61 | @findex point-to-register | |
d0ca439d CY |
62 | Typing @kbd{C-x r @key{SPC}} (@code{point-to-register}), followed by |
63 | a character @kbd{@var{r}}, saves both the position of point and the | |
64 | current buffer in register @var{r}. The register retains this | |
65 | information until you store something else in it. | |
6bf7aab6 DL |
66 | |
67 | @kindex C-x r j | |
68 | @findex jump-to-register | |
d0ca439d CY |
69 | The command @kbd{C-x r j @var{r}} switches to the buffer recorded in |
70 | register @var{r}, and moves point to the recorded position. The | |
71 | contents of the register are not changed, so you can jump to the saved | |
72 | position any number of times. | |
6bf7aab6 DL |
73 | |
74 | If you use @kbd{C-x r j} to go to a saved position, but the buffer it | |
75 | was saved from has been killed, @kbd{C-x r j} tries to create the buffer | |
76 | again by visiting the same file. Of course, this works only for buffers | |
77 | that were visiting files. | |
78 | ||
a30ed87b | 79 | @node Text Registers |
6bf7aab6 | 80 | @section Saving Text in Registers |
7ea0f431 | 81 | @cindex saving text in a register |
6bf7aab6 DL |
82 | |
83 | When you want to insert a copy of the same piece of text several | |
84 | times, it may be inconvenient to yank it from the kill ring, since each | |
85 | subsequent kill moves that entry further down the ring. An alternative | |
86 | is to store the text in a register and later retrieve it. | |
87 | ||
88 | @table @kbd | |
89 | @item C-x r s @var{r} | |
90 | Copy region into register @var{r} (@code{copy-to-register}). | |
91 | @item C-x r i @var{r} | |
92 | Insert text from register @var{r} (@code{insert-register}). | |
7ea0f431 EZ |
93 | @item M-x append-to-register @key{RET} @var{r} |
94 | Append region to text in register @var{r}. | |
0979429b J |
95 | |
96 | @kindex C-x r + | |
97 | When register @var{r} contains text, you can use @kbd{C-x r +} | |
98 | (@code{increment-register}) to append to that register. Note that | |
99 | command @kbd{C-x r +} behaves differently if @var{r} contains a | |
100 | number. @xref{Number Registers}. | |
101 | ||
7ea0f431 EZ |
102 | @item M-x prepend-to-register @key{RET} @var{r} |
103 | Prepend region to text in register @var{r}. | |
6bf7aab6 DL |
104 | @end table |
105 | ||
106 | @kindex C-x r s | |
6bf7aab6 | 107 | @findex copy-to-register |
e75e59fd | 108 | @kbd{C-x r s @var{r}} stores a copy of the text of the region into |
d0ca439d CY |
109 | the register named @var{r}. If the mark is inactive, Emacs first |
110 | reactivates the mark where it was last set. The mark is deactivated | |
111 | at the end of this command. @xref{Mark}. @kbd{C-u C-x r s @var{r}}, | |
112 | the same command with a prefix argument, copies the text into register | |
113 | @var{r} and deletes the text from the buffer as well; you can think of | |
114 | this as ``moving'' the region text into the register. | |
6bf7aab6 | 115 | |
7ea0f431 EZ |
116 | @findex append-to-register |
117 | @findex prepend-to-register | |
118 | @kbd{M-x append-to-register @key{RET} @var{r}} appends the copy of | |
119 | the text in the region to the text already stored in the register | |
d0ca439d | 120 | named @var{r}. If invoked with a prefix argument, it deletes the |
60b541d1 EZ |
121 | region after appending it to the register. The command |
122 | @code{prepend-to-register} is similar, except that it @emph{prepends} | |
d0ca439d | 123 | the region text to the text in the register instead of |
60b541d1 | 124 | @emph{appending} it. |
7ea0f431 | 125 | |
0979429b J |
126 | @vindex register-separator |
127 | When you are collecting text using @code{append-to-register} and | |
128 | @code{prepend-to-register}, you may want to separate individual | |
129 | collected pieces using a separator. In that case, configure a | |
130 | @code{register-separator} and store the separator text in to that | |
131 | register. For example, to get double newlines as text separator | |
132 | during the collection process, you can use the following setting. | |
133 | ||
134 | @example | |
135 | (setq register-separator ?+) | |
136 | (set-register register-separator "\n\n") | |
137 | @end example | |
138 | ||
d0ca439d CY |
139 | @kindex C-x r i |
140 | @findex insert-register | |
6bf7aab6 | 141 | @kbd{C-x r i @var{r}} inserts in the buffer the text from register |
21100e7d CY |
142 | @var{r}. Normally it leaves point before the text and sets the mark |
143 | after, without activating it. With a numeric argument, it instead | |
144 | puts point after the text and the mark before. | |
6bf7aab6 | 145 | |
a30ed87b | 146 | @node Rectangle Registers |
6bf7aab6 | 147 | @section Saving Rectangles in Registers |
7ea0f431 | 148 | @cindex saving rectangle in a register |
6bf7aab6 | 149 | |
d0ca439d CY |
150 | A register can contain a rectangle instead of linear text. |
151 | @xref{Rectangles}, for basic information on how to specify a rectangle | |
152 | in the buffer. | |
6bf7aab6 DL |
153 | |
154 | @table @kbd | |
155 | @findex copy-rectangle-to-register | |
156 | @kindex C-x r r | |
157 | @item C-x r r @var{r} | |
158 | Copy the region-rectangle into register @var{r} | |
159 | (@code{copy-rectangle-to-register}). With numeric argument, delete it as | |
160 | well. | |
161 | @item C-x r i @var{r} | |
162 | Insert the rectangle stored in register @var{r} (if it contains a | |
163 | rectangle) (@code{insert-register}). | |
164 | @end table | |
165 | ||
21100e7d CY |
166 | The @kbd{C-x r i @var{r}} (@code{insert-register}) command, |
167 | previously documented in @ref{Text Registers}, inserts a rectangle | |
58179cce | 168 | rather than a text string, if the register contains a rectangle. |
6bf7aab6 | 169 | |
a30ed87b | 170 | @node Configuration Registers |
6bf7aab6 | 171 | @section Saving Window Configurations in Registers |
7ea0f431 | 172 | @cindex saving window configuration in a register |
6bf7aab6 DL |
173 | |
174 | @findex window-configuration-to-register | |
175 | @findex frame-configuration-to-register | |
176 | @kindex C-x r w | |
177 | @kindex C-x r f | |
178 | You can save the window configuration of the selected frame in a | |
179 | register, or even the configuration of all windows in all frames, and | |
d0ca439d CY |
180 | restore the configuration later. @xref{Windows}, for information |
181 | about window configurations. | |
6bf7aab6 DL |
182 | |
183 | @table @kbd | |
184 | @item C-x r w @var{r} | |
185 | Save the state of the selected frame's windows in register @var{r} | |
186 | (@code{window-configuration-to-register}). | |
187 | @item C-x r f @var{r} | |
188 | Save the state of all frames, including all their windows, in register | |
189 | @var{r} (@code{frame-configuration-to-register}). | |
190 | @end table | |
191 | ||
192 | Use @kbd{C-x r j @var{r}} to restore a window or frame configuration. | |
193 | This is the same command used to restore a cursor position. When you | |
194 | restore a frame configuration, any existing frames not included in the | |
195 | configuration become invisible. If you wish to delete these frames | |
196 | instead, use @kbd{C-u C-x r j @var{r}}. | |
197 | ||
a30ed87b | 198 | @node Number Registers |
6bf7aab6 | 199 | @section Keeping Numbers in Registers |
7ea0f431 | 200 | @cindex saving number in a register |
6bf7aab6 DL |
201 | |
202 | There are commands to store a number in a register, to insert | |
203 | the number in the buffer in decimal, and to increment it. These commands | |
204 | can be useful in keyboard macros (@pxref{Keyboard Macros}). | |
205 | ||
206 | @table @kbd | |
485bceb5 | 207 | @item C-u @var{number} C-x r n @var{r} |
6bf7aab6 DL |
208 | @kindex C-x r n |
209 | @findex number-to-register | |
485bceb5 RS |
210 | Store @var{number} into register @var{r} (@code{number-to-register}). |
211 | @item C-u @var{number} C-x r + @var{r} | |
6bf7aab6 DL |
212 | @kindex C-x r + |
213 | @findex increment-register | |
0979429b J |
214 | If @var{r} contains a number, increment the number in that register by |
215 | @var{number}. Note that command @kbd{C-x r +} | |
216 | (@code{increment-register}) behaves differently if @var{r} contains | |
217 | text. @xref{Text Registers}. | |
d48102cf | 218 | @item C-x r i @var{r} |
485bceb5 | 219 | Insert the number from register @var{r} into the buffer. |
6bf7aab6 DL |
220 | @end table |
221 | ||
d48102cf | 222 | @kbd{C-x r i} is the same command used to insert any other sort of |
485bceb5 RS |
223 | register contents into the buffer. @kbd{C-x r +} with no numeric |
224 | argument increments the register value by 1; @kbd{C-x r n} with no | |
225 | numeric argument stores zero in the register. | |
6bf7aab6 | 226 | |
a30ed87b | 227 | @node File Registers |
6bf7aab6 | 228 | @section Keeping File Names in Registers |
5fe3b9bc | 229 | @cindex saving file name in a register |
6bf7aab6 DL |
230 | |
231 | If you visit certain file names frequently, you can visit them more | |
232 | conveniently if you put their names in registers. Here's the Lisp code | |
233 | used to put a file name in a register: | |
234 | ||
235 | @smallexample | |
236 | (set-register ?@var{r} '(file . @var{name})) | |
237 | @end smallexample | |
238 | ||
239 | @need 3000 | |
240 | @noindent | |
241 | For example, | |
242 | ||
243 | @smallexample | |
244 | (set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog")) | |
245 | @end smallexample | |
246 | ||
247 | @noindent | |
248 | puts the file name shown in register @samp{z}. | |
249 | ||
250 | To visit the file whose name is in register @var{r}, type @kbd{C-x r j | |
251 | @var{r}}. (This is the same command used to jump to a position or | |
252 | restore a frame configuration.) | |
253 | ||
254 | @node Bookmarks | |
255 | @section Bookmarks | |
256 | @cindex bookmarks | |
257 | ||
258 | @dfn{Bookmarks} are somewhat like registers in that they record | |
259 | positions you can jump to. Unlike registers, they have long names, and | |
260 | they persist automatically from one Emacs session to the next. The | |
261 | prototypical use of bookmarks is to record ``where you were reading'' in | |
262 | various files. | |
263 | ||
264 | @table @kbd | |
265 | @item C-x r m @key{RET} | |
266 | Set the bookmark for the visited file, at point. | |
267 | ||
268 | @item C-x r m @var{bookmark} @key{RET} | |
269 | @findex bookmark-set | |
270 | Set the bookmark named @var{bookmark} at point (@code{bookmark-set}). | |
271 | ||
272 | @item C-x r b @var{bookmark} @key{RET} | |
273 | @findex bookmark-jump | |
274 | Jump to the bookmark named @var{bookmark} (@code{bookmark-jump}). | |
275 | ||
276 | @item C-x r l | |
277 | @findex list-bookmarks | |
278 | List all bookmarks (@code{list-bookmarks}). | |
279 | ||
280 | @item M-x bookmark-save | |
281 | @findex bookmark-save | |
282 | Save all the current bookmark values in the default bookmark file. | |
283 | @end table | |
284 | ||
285 | @kindex C-x r m | |
286 | @findex bookmark-set | |
287 | @kindex C-x r b | |
288 | @findex bookmark-jump | |
289 | The prototypical use for bookmarks is to record one current position | |
290 | in each of several files. So the command @kbd{C-x r m}, which sets a | |
291 | bookmark, uses the visited file name as the default for the bookmark | |
292 | name. If you name each bookmark after the file it points to, then you | |
293 | can conveniently revisit any of those files with @kbd{C-x r b}, and move | |
294 | to the position of the bookmark at the same time. | |
295 | ||
296 | @kindex C-x r l | |
297 | To display a list of all your bookmarks in a separate buffer, type | |
298 | @kbd{C-x r l} (@code{list-bookmarks}). If you switch to that buffer, | |
299 | you can use it to edit your bookmark definitions or annotate the | |
1f7ebf7c RS |
300 | bookmarks. Type @kbd{C-h m} in the bookmark buffer for more |
301 | information about its special editing commands. | |
6bf7aab6 | 302 | |
b6e63cbe | 303 | When you kill Emacs, Emacs saves your bookmarks, if |
21100e7d CY |
304 | you have changed any bookmark values. You can also save the bookmarks |
305 | at any time with the @kbd{M-x bookmark-save} command. Bookmarks are | |
306 | saved to the file @file{~/.emacs.d/bookmarks} (for compatibility with | |
307 | older versions of Emacs, if you have a file named @file{~/.emacs.bmk}, | |
308 | that is used instead). The bookmark commands load your default | |
309 | bookmark file automatically. This saving and loading is how bookmarks | |
310 | persist from one Emacs session to the next. | |
6bf7aab6 DL |
311 | |
312 | @vindex bookmark-save-flag | |
d0ca439d CY |
313 | If you set the variable @code{bookmark-save-flag} to 1, each command |
314 | that sets a bookmark will also save your bookmarks; this way, you | |
b6e63cbe | 315 | don't lose any bookmark values even if Emacs crashes. The value, if |
d0ca439d | 316 | a number, says how many bookmark modifications should go by between |
b6e63cbe GM |
317 | saving. If you set this variable to @code{nil}, Emacs only |
318 | saves bookmarks if you explicitly use @kbd{M-x bookmark-save}. | |
6bf7aab6 DL |
319 | |
320 | @vindex bookmark-search-size | |
321 | Bookmark position values are saved with surrounding context, so that | |
322 | @code{bookmark-jump} can find the proper position even if the file is | |
323 | modified slightly. The variable @code{bookmark-search-size} says how | |
13b9ee95 | 324 | many characters of context to record on each side of the bookmark's |
6bf7aab6 DL |
325 | position. |
326 | ||
327 | Here are some additional commands for working with bookmarks: | |
328 | ||
329 | @table @kbd | |
330 | @item M-x bookmark-load @key{RET} @var{filename} @key{RET} | |
331 | @findex bookmark-load | |
332 | Load a file named @var{filename} that contains a list of bookmark | |
333 | values. You can use this command, as well as @code{bookmark-write}, to | |
334 | work with other files of bookmark values in addition to your default | |
335 | bookmark file. | |
336 | ||
337 | @item M-x bookmark-write @key{RET} @var{filename} @key{RET} | |
338 | @findex bookmark-write | |
339 | Save all the current bookmark values in the file @var{filename}. | |
340 | ||
341 | @item M-x bookmark-delete @key{RET} @var{bookmark} @key{RET} | |
342 | @findex bookmark-delete | |
343 | Delete the bookmark named @var{bookmark}. | |
344 | ||
345 | @item M-x bookmark-insert-location @key{RET} @var{bookmark} @key{RET} | |
346 | @findex bookmark-insert-location | |
347 | Insert in the buffer the name of the file that bookmark @var{bookmark} | |
348 | points to. | |
349 | ||
350 | @item M-x bookmark-insert @key{RET} @var{bookmark} @key{RET} | |
351 | @findex bookmark-insert | |
352 | Insert in the buffer the @emph{contents} of the file that bookmark | |
353 | @var{bookmark} points to. | |
354 | @end table |