0
|
1
|
|
2 @node Files, Buffers, Fixit, Top
|
|
3 @chapter File Handling
|
|
4 @cindex files
|
|
5
|
|
6 The basic unit of stored data in Unix is the @dfn{file}. To edit a file,
|
|
7 you must tell Emacs to examine the file and prepare a buffer containing a
|
|
8 copy of the file's text. This is called @dfn{visiting} the file. Editing
|
|
9 commands apply directly to text in the buffer; that is, to the copy inside
|
|
10 Emacs. Your changes appear in the file itself only when you @dfn{save} the
|
|
11 buffer back into the file.
|
|
12
|
|
13 In addition to visiting and saving files, Emacs can delete, copy, rename,
|
|
14 and append to files, and operate on file directories.
|
|
15
|
|
16 @menu
|
|
17 * File Names:: How to type and edit file name arguments.
|
|
18 * Visiting:: Visiting a file prepares Emacs to edit the file.
|
|
19 * Saving:: Saving makes your changes permanent.
|
|
20 * Reverting:: Reverting cancels all the changes not saved.
|
|
21 * Auto Save:: Auto Save periodically protects against loss of data.
|
|
22 * Version Control:: Version control systems (RCS and SCCS).
|
|
23 * ListDir:: Listing the contents of a file directory.
|
|
24 * Comparing Files:: Finding where two files differ.
|
|
25 * Dired:: ``Editing'' a directory to delete, rename, etc.
|
|
26 the files in it.
|
|
27 * Misc File Ops:: Other things you can do on files.
|
|
28 @end menu
|
|
29
|
|
30 @node File Names, Visiting, Files, Files
|
|
31 @section File Names
|
|
32 @cindex file names
|
|
33
|
|
34 Most Emacs commands that operate on a file require you to specify the
|
|
35 file name. (Saving and reverting are exceptions; the buffer knows which
|
|
36 file name to use for them.) File names are specified in the minibuffer
|
|
37 (@pxref{Minibuffer}). @dfn{Completion} is available, to make it easier to
|
|
38 specify long file names. @xref{Completion}.
|
|
39
|
|
40 There is always a @dfn{default file name} which is used if you
|
|
41 enter an empty argument by typing just @key{RET}. Normally the default
|
|
42 file name is the name of the file visited in the current buffer; this
|
|
43 makes it easy to operate on that file with any of the Emacs file
|
|
44 commands.
|
|
45
|
|
46 @vindex default-directory
|
|
47 Each buffer has a default directory, normally the same as the
|
|
48 directory of the file visited in that buffer. When Emacs reads a file
|
|
49 name, the default directory is used if you do not specify a directory.
|
|
50 If you specify a directory in a relative fashion, with a name that does
|
|
51 not start with a slash, it is interpreted with respect to the default
|
|
52 directory. The default directory of the current buffer is kept in the
|
|
53 variable @code{default-directory}, which has a separate value in every
|
|
54 buffer. The value of the variable should end with a slash.
|
|
55
|
|
56 For example, if the default file name is @file{/u/rms/gnu/gnu.tasks} then
|
|
57 the default directory is @file{/u/rms/gnu/}. If you type just @samp{foo},
|
|
58 which does not specify a directory, it is short for @file{/u/rms/gnu/foo}.
|
|
59 @samp{../.login} would stand for @file{/u/rms/.login}. @samp{new/foo}
|
|
60 would stand for the filename @file{/u/rms/gnu/new/foo}.
|
|
61
|
|
62 @vindex default-directory-alist
|
|
63 The variable @code{default-directory-alist} takes an alist of major
|
|
64 modes and their opinions on @code{default-directory} as a Lisp
|
|
65 expression to evaluate. A resulting value of @code{nil} is ignored in
|
|
66 favor of @code{default-directory}.
|
|
67
|
|
68 @findex make-directory
|
|
69 @findex remove-directory
|
|
70 @cindex creating directories
|
|
71 @cindex removing directories
|
|
72 You can create a new directory with the function @code{make-directory},
|
|
73 which takes as an argument a file name string. The current directory is
|
|
74 displayed in the minibuffer when the function is called; you can delete
|
|
75 the old directory name and supply a new directory name. For example, if
|
|
76 the current directory is @file{/u/rms/gnu}, you can delete @file{gnu}
|
|
77 and type @file{oryx} and @key{RET} to create @file{/u/rms/oryx}.
|
|
78 Removing a directory is similar to creating one. To remove a directory,
|
|
79 use @code{remove-directory}; it takes one argument, a file name string.
|
|
80
|
|
81 The command @kbd{M-x pwd} prints the current buffer's default directory,
|
|
82 and the command @kbd{M-x cd} sets it (to a value read using the
|
|
83 minibuffer). A buffer's default directory changes only when the @code{cd}
|
|
84 command is used. A file-visiting buffer's default directory is initialized
|
|
85 to the directory of the file that is visited there. If a buffer is created
|
|
86 with @kbd{C-x b}, its default directory is copied from that of the
|
|
87 buffer that was current at the time.
|
|
88
|
|
89 @vindex insert-default-directory
|
|
90 The default directory name actually appears in the minibuffer when the
|
|
91 minibuffer becomes active to read a file name. This serves two
|
|
92 purposes: it shows you what the default is, so that you can type a
|
|
93 relative file name and know with certainty what it will mean, and it
|
|
94 allows you to edit the default to specify a different directory. To
|
|
95 inhibit the insertion of the default directory, set the variable
|
|
96 @code{insert-default-directory} to @code{nil}.
|
|
97
|
|
98 Note that it is legitimate to type an absolute file name after you
|
|
99 enter the minibuffer, ignoring the presence of the default directory
|
|
100 name. The final minibuffer contents may look invalid, but that is not
|
|
101 so. @xref{Minibuffer File}.
|
|
102
|
|
103 @samp{$} in a file name is used to substitute environment variables. For
|
|
104 example, if you have used the shell command @samp{setenv FOO rms/hacks} to
|
|
105 set up an environment variable named @samp{FOO}, then you can use
|
|
106 @file{/u/$FOO/test.c} or @file{/u/$@{FOO@}/test.c} as an abbreviation for
|
|
107 @file{/u/rms/hacks/test.c}. The environment variable name consists of all
|
|
108 the alphanumeric characters after the @samp{$}; alternatively, it may be
|
|
109 enclosed in braces after the @samp{$}. Note that the @samp{setenv} command
|
|
110 affects Emacs only if done before Emacs is started.
|
|
111
|
|
112 To access a file with @samp{$} in its name, type @samp{$$}. This pair
|
|
113 is converted to a single @samp{$} at the same time variable substitution
|
|
114 is performed for single @samp{$}. The Lisp function that performs the
|
|
115 substitution is called @code{substitute-in-file-name}. The substitution
|
|
116 is performed only on filenames read as such using the minibuffer.
|
|
117
|
|
118 @node Visiting, Saving, File Names, Files
|
|
119 @section Visiting Files
|
|
120 @cindex visiting files
|
|
121
|
|
122 @c WideCommands
|
|
123 @table @kbd
|
|
124 @item C-x C-f
|
|
125 Visit a file (@code{find-file}).
|
|
126 @item C-x C-v
|
|
127 Visit a different file instead of the one visited last
|
|
128 (@code{find-alternate-file}).
|
|
129 @item C-x 4 C-f
|
|
130 Visit a file, in another window (@code{find-file-other-window}). Don't
|
|
131 change this window.
|
|
132 @item C-x 5 C-f
|
|
133 Visit a file, in another frame (@code{find-file-other-frame}). Don't
|
|
134 change this window or frame.
|
|
135 @end table
|
|
136
|
|
137 @cindex files
|
|
138 @cindex visiting
|
|
139 @cindex saving
|
|
140 @dfn{Visiting} a file means copying its contents into an Emacs buffer
|
|
141 so you can edit it. Emacs creates a new buffer for each file you
|
|
142 visit. We say that the buffer is visiting the file that it was created
|
|
143 to hold. Emacs constructs the buffer name from the file name by
|
|
144 throwing away the directory and keeping just the file name. For example,
|
|
145 a file named @file{/usr/rms/emacs.tex} is displayed in a buffer named
|
|
146 @samp{emacs.tex}. If a buffer with that name exists, a unique
|
|
147 name is constructed by appending @samp{<2>}, @samp{<3>},and so on, using
|
|
148 the lowest number that makes a name that is not already in use.
|
|
149
|
|
150 Each window's mode line shows the name of the buffer that is being displayed
|
|
151 in that window, so you can always tell what buffer you are editing.
|
|
152
|
|
153 The changes you make with Emacs are made in the Emacs buffer. They do
|
|
154 not take effect in the file that you visit, or any other permanent
|
|
155 place, until you @dfn{save} the buffer. Saving the buffer means that
|
|
156 Emacs writes the current contents of the buffer into its visited file.
|
|
157 @xref{Saving}.
|
|
158
|
|
159 @cindex modified (buffer)
|
|
160 If a buffer contains changes that have not been saved, the buffer is said
|
|
161 to be @dfn{modified}. This is important because it implies that some
|
|
162 changes will be lost if the buffer is not saved. The mode line displays
|
|
163 two stars near the left margin if the buffer is modified.
|
|
164
|
|
165 @kindex C-x 5 C-f
|
|
166 @findex find-file
|
|
167 @findex find-file-other-frame
|
|
168 To visit a file, use the command @kbd{C-x C-f} (@code{find-file}). Follow
|
|
169 the command with the name of the file you wish to visit, terminated by a
|
|
170 @key{RET}. If you are using XEmacs under X, you can also use the
|
|
171 @b{Open...} command from the @b{File} menu bar item.
|
|
172
|
|
173 The file name is read using the minibuffer (@pxref{Minibuffer}), with
|
|
174 defaulting and completion in the standard manner (@pxref{File Names}).
|
|
175 While in the minibuffer, you can abort @kbd{C-x C-f} by typing @kbd{C-g}.
|
|
176
|
|
177 @kbd{C-x C-f} has completed successfully when text appears on the
|
|
178 screen and a new buffer name appears in the mode line. If the specified
|
|
179 file does not exist and could not be created or cannot be read, an error
|
|
180 results. The error message is printed in the echo area, and includes
|
|
181 the name of the file that Emacs was trying to visit.
|
|
182
|
|
183 If you visit a file that is already in Emacs, @kbd{C-x C-f} does not make
|
|
184 another copy. It selects the existing buffer containing that file.
|
|
185 However, before doing so, it checks that the file itself has not changed
|
|
186 since you visited or saved it last. If the file has changed, Emacs
|
|
187 prints a warning message. @xref{Interlocking,,Simultaneous Editing}.
|
|
188
|
|
189 @findex find-this-file
|
|
190 You can switch to a specific file called out in the current buffer by
|
|
191 calling the function @code{find-this-file}. By providing a prefix
|
|
192 argument, this function calls @code{filename-at-point} and switches to a
|
|
193 buffer visiting the file @var{filename}. It creates one if none already
|
|
194 exists. You can use this function to edit the file mentioned in the
|
|
195 buffer you are working in or to test if the file exists. You can do that
|
|
196 by using the minibuffer completion after snatching the all or part of
|
|
197 the filename.
|
|
198
|
|
199 @vindex find-file-use-truenames
|
|
200 @vindex buffer-file-name
|
|
201 If the variable @code{find-file-use-truenames}'s value is
|
|
202 non-@code{nil}, a buffer's visited filename will always be traced back
|
|
203 to the real file. The filename will never be a symbolic link, and there
|
|
204 will never be a symbolic link anywhere in its directory path. In other
|
|
205 words, the @code{buffer-file-name} and @code{buffer-file-truename} will
|
|
206 be equal.
|
|
207
|
|
208 @vindex find-file-compare-truenames
|
|
209 @vindex buffer-file-truename
|
|
210 If the variable @code{find-file-compare-truenames} value is
|
|
211 non-@code{nil}, the @code{find-file} command will check the
|
|
212 @code{buffer-file-truename} of all visited files when deciding whether a
|
|
213 given file is already in a buffer, instead of just
|
|
214 @code{buffer-file-name}. If you attempt to visit another file which is
|
|
215 a hard-link or symbolic-link to a file that is already in a buffer, the
|
|
216 existing buffer will be found instead of a newly created one.
|
|
217
|
|
218 @cindex creating files
|
|
219 If you want to create a file, just visit it. Emacs prints
|
|
220 @samp{(New File)} in the echo area, but in other respects behaves as if you
|
|
221 had visited an existing empty file. If you make any changes and save them,
|
|
222 the file is created.
|
|
223
|
|
224 @kindex C-x C-v
|
|
225 @findex find-alternate-file
|
|
226 If you visit a nonexistent file unintentionally (because you typed the
|
|
227 wrong file name), use the @kbd{C-x C-v} (@code{find-alternate-file})
|
|
228 command to visit the file you wanted. @kbd{C-x C-v} is similar to @kbd{C-x
|
|
229 C-f}, but it kills the current buffer (after first offering to save it if
|
|
230 it is modified). @kbd{C-x C-v} is allowed even if the current buffer
|
|
231 is not visiting a file.
|
|
232
|
|
233 @vindex find-file-run-dired
|
|
234 If the file you specify is actually a directory, Dired is called on
|
|
235 that directory (@pxref{Dired}). To inhibit this, set the variable
|
|
236 @code{find-file-run-dired} to @code{nil}; then it is an error to try to
|
|
237 visit a directory.
|
|
238
|
|
239 @kindex C-x 4 f
|
|
240 @findex find-file-other-window
|
|
241 @kbd{C-x 4 f} (@code{find-file-other-window}) is like @kbd{C-x C-f}
|
|
242 except that the buffer containing the specified file is selected in another
|
|
243 window. The window that was selected before @kbd{C-x 4 f} continues to
|
|
244 show the same buffer it was already showing. If you use this command when
|
|
245 only one window is being displayed, that window is split in two, with one
|
|
246 window showing the same buffer as before, and the other one showing the
|
|
247 newly requested file. @xref{Windows}.
|
|
248
|
|
249 @kindex C-x 5 C-f
|
|
250 @findex find-file-other-frame
|
|
251 @kbd{C-x 5 C-f} (@code{find-file-other-frame}) is like @kbd{C-x C-f}
|
|
252 except that it creates a new frame in which the file is displayed.
|
|
253
|
|
254 @findex find-this-file-other-window
|
|
255 Use the function @code{find-this-file-other-window} to edit a file
|
|
256 mentioned in the buffer you are editing or to test if that file exists.
|
2
|
257 To do this, use the minibuffer completion after snatching the part or
|
0
|
258 all of the filename. By providing a prefix argument, the function calls
|
|
259 @code{filename-at-point} and switches you to a buffer visiting the file
|
|
260 @var{filename} in another window. The function creates a buffer if none
|
|
261 already exists. This function is similar to @code{find-file-other-window}.
|
|
262
|
|
263 @vindex find-file-hooks
|
|
264 @vindex find-file-not-found-hooks
|
|
265 There are two hook variables that allow extensions to modify the
|
|
266 operation of visiting files. Visiting a file that does not exist runs the
|
|
267 functions in the list @code{find-file-not-found-hooks}; the value of this
|
|
268 variable is expected to be a list of functions which are
|
|
269 called one by one until one of them returns non-@code{nil}. Any visiting
|
|
270 of a file, whether extant or not, expects @code{find-file-hooks} to
|
|
271 contain list of functions and calls them all, one by one. In both cases
|
|
272 the functions receive no arguments. Visiting a nonexistent file
|
|
273 runs the @code{find-file-not-found-hooks} first.
|
|
274
|
|
275 @node Saving, Reverting, Visiting, Files
|
|
276 @section Saving Files
|
|
277
|
|
278 @dfn{Saving} a buffer in Emacs means writing its contents back into the file
|
|
279 that was visited in the buffer.
|
|
280
|
|
281 @table @kbd
|
|
282 @item C-x C-s
|
|
283 Save the current buffer in its visited file (@code{save-buffer}).
|
|
284 @item C-x s
|
|
285 Save any or all buffers in their visited files (@code{save-some-buffers}).
|
|
286 @item M-~
|
|
287 Forget that the current buffer has been changed (@code{not-modified}).
|
|
288 @item C-x C-w
|
|
289 Save the current buffer in a specified file, and record that file as
|
|
290 the one visited in the buffer (@code{write-file}).
|
|
291 @item M-x set-visited-file-name
|
|
292 Change file the name under which the current buffer will be saved.
|
|
293 @end table
|
|
294
|
|
295 @kindex C-x C-s
|
|
296 @findex save-buffer
|
|
297 To save a file and make your changes permanent, type
|
|
298 @kbd{C-x C-s} (@code{save-buffer}). After saving is finished, @kbd{C-x C-s}
|
|
299 prints a message such as:
|
|
300
|
|
301 @example
|
|
302 Wrote /u/rms/gnu/gnu.tasks
|
|
303 @end example
|
|
304
|
|
305 @noindent
|
|
306 If the selected buffer is not modified (no changes have been made in it
|
|
307 since the buffer was created or last saved), Emacs does not save it
|
|
308 because it would have no effect. Instead, @kbd{C-x C-s} prints a message
|
|
309 in the echo area saying:
|
|
310
|
|
311 @example
|
|
312 (No changes need to be saved)
|
|
313 @end example
|
|
314
|
|
315 @kindex C-x s
|
|
316 @findex save-some-buffers
|
|
317 The command @kbd{C-x s} (@code{save-some-buffers}) can save any or all
|
|
318 modified buffers. First it asks, for each modified buffer, whether to
|
|
319 save it. The questions should be answered with @kbd{y} or @kbd{n}.
|
|
320 @kbd{C-x C-c}, the key that kills Emacs, invokes
|
|
321 @code{save-some-buffers} and therefore asks the same questions.
|
|
322
|
|
323 @kindex M-~
|
|
324 @findex not-modified
|
|
325 If you have changed a buffer and do not want the changes to be saved,
|
|
326 you should take some action to prevent it. Otherwise, you are liable to
|
|
327 save it by mistake each time you use @code{save-some-buffers} or a
|
|
328 related command. One thing you can do is type @kbd{M-~}
|
|
329 (@code{not-modified}), which removes the indication that the buffer
|
|
330 is modified. If you do this, none of the save commands will believe
|
|
331 that the buffer needs to be saved. (@samp{~} is often used as a
|
|
332 mathematical symbol for `not'; thus @kbd{Meta-~} is `not', metafied.)
|
|
333 You could also use @code{set-visited-file-name} (see below) to mark the
|
|
334 buffer as visiting a different file name, not in use for
|
|
335 anything important.
|
|
336
|
|
337 You can also undo all the changes made since the file was visited or
|
|
338 saved, by reading the text from the file again. This is called
|
|
339 @dfn{reverting}. @xref{Reverting}. Alternatively, you can undo all the
|
|
340 changes by repeating the undo command @kbd{C-x u}; but this only works
|
|
341 if you have not made more changes than the undo mechanism can remember.
|
|
342
|
|
343 @findex set-visited-file-name
|
|
344 @kbd{M-x set-visited-file-name} alters the name of the file that the
|
|
345 current buffer is visiting. It prompts you for the new file name in the
|
|
346 minibuffer. You can also use @code{set-visited-file-name} on a buffer
|
|
347 that is not visiting a file. The buffer's name is changed to correspond
|
|
348 to the file it is now visiting unless the new name is already used by a
|
|
349 different buffer; in that case, the buffer name is not changed.
|
|
350 @code{set-visited-file-name} does not save the buffer in the newly
|
|
351 visited file; it just alters the records inside Emacs so that it will
|
|
352 save the buffer in that file. It also marks the buffer as ``modified''
|
|
353 so that @kbd{C-x C-s} @i{will} save.
|
|
354
|
|
355 @kindex C-x C-w
|
|
356 @findex write-file
|
|
357 If you wish to mark a buffer as visiting a different file and save it
|
|
358 right away, use @kbd{C-x C-w} (@code{write-file}). It is precisely
|
|
359 equivalent to @code{set-visited-file-name} followed by @kbd{C-x C-s}.
|
|
360 @kbd{C-x C-s} used on a buffer that is not visiting a file has the
|
|
361 same effect as @kbd{C-x C-w}; that is, it reads a file name, marks the
|
|
362 buffer as visiting that file, and saves it there. The default file name in
|
|
363 a buffer that is not visiting a file is made by combining the buffer name
|
|
364 with the buffer's default directory.
|
|
365
|
|
366 If Emacs is about to save a file and sees that the date of the latest
|
|
367 version on disk does not match what Emacs last read or wrote, Emacs
|
|
368 notifies you of this fact, because it probably indicates a problem caused
|
|
369 by simultaneous editing and requires your immediate attention.
|
|
370 @xref{Interlocking,, Simultaneous Editing}.
|
|
371
|
|
372 @vindex require-final-newline
|
|
373 If the variable @code{require-final-newline} is non-@code{nil}, Emacs
|
|
374 puts a newline at the end of any file that doesn't already end in one,
|
|
375 every time a file is saved or written.
|
|
376
|
|
377 @vindex write-file-hooks
|
|
378 @vindex after-save-hook
|
|
379 Use the hook variable @code{write-file-hooks} to implement other ways
|
|
380 to write files, and specify things to be done before files are written. The
|
|
381 value of this variable should be a list of Lisp functions. When a file
|
|
382 is to be written, the functions in the list are called, one by one, with
|
|
383 no arguments. If one of them returns a non-@code{nil} value, Emacs
|
|
384 takes this to mean that the file has been written in some suitable
|
|
385 fashion; the rest of the functions are not called, and normal writing is
|
|
386 not done. Use the hook variable @code{after-save-hook} to list
|
|
387 all the functions to be called after writing out a buffer to a file.
|
|
388
|
|
389 @menu
|
|
390 * Backup:: How Emacs saves the old version of your file.
|
|
391 * Interlocking:: How Emacs protects against simultaneous editing
|
|
392 of one file by two users.
|
|
393 @end menu
|
|
394
|
|
395 @node Backup, Interlocking, Saving, Saving
|
|
396 @subsection Backup Files
|
|
397 @cindex backup file
|
|
398 @vindex make-backup-files
|
|
399
|
|
400 Because Unix does not provide version numbers in file names, rewriting a
|
|
401 file in Unix automatically destroys all record of what the file used to
|
|
402 contain. Thus, saving a file from Emacs throws away the old contents of
|
|
403 the file---or it would, except that Emacs carefully copies the old contents
|
|
404 to another file, called the @dfn{backup} file, before actually saving.
|
|
405 (Make sure that the variable @code{make-backup-files} is non-@code{nil}.
|
|
406 Backup files are not written if this variable is @code{nil}).
|
|
407
|
|
408 At your option, Emacs can keep either a single backup file or a series of
|
|
409 numbered backup files for each file you edit.
|
|
410
|
|
411 Emacs makes a backup for a file only the first time a file is saved
|
|
412 from one buffer. No matter how many times you save a file, its backup file
|
|
413 continues to contain the contents from before the file was visited.
|
|
414 Normally this means that the backup file contains the contents from before
|
|
415 the current editing session; however, if you kill the buffer and then visit
|
|
416 the file again, a new backup file is made by the next save.
|
|
417
|
|
418 @menu
|
|
419 * Names: Backup Names. How backup files are named;
|
|
420 Choosing single or numbered backup files.
|
|
421 * Deletion: Backup Deletion. Emacs deletes excess numbered backups.
|
|
422 * Copying: Backup Copying. Backups can be made by copying or renaming.
|
|
423 @end menu
|
|
424
|
|
425 @node Backup Names, Backup Deletion, Backup, Backup
|
|
426 @subsubsection Single or Numbered Backups
|
|
427
|
|
428 If you choose to have a single backup file (the default),
|
|
429 the backup file's name is constructed by appending @samp{~} to the
|
|
430 file name being edited; thus, the backup file for @file{eval.c} is
|
|
431 @file{eval.c~}.
|
|
432
|
|
433 If you choose to have a series of numbered backup files, backup file
|
|
434 names are made by appending @samp{.~}, the number, and another @samp{~} to
|
|
435 the original file name. Thus, the backup files of @file{eval.c} would be
|
|
436 called @file{eval.c.~1~}, @file{eval.c.~2~}, and so on, through names
|
|
437 like @file{eval.c.~259~} and beyond.
|
|
438
|
|
439 If protection stops you from writing backup files under the usual names,
|
|
440 the backup file is written as @file{%backup%~} in your home directory.
|
|
441 Only one such file can exist, so only the most recently made backup is
|
|
442 available.
|
|
443
|
|
444 @vindex version-control
|
|
445 The choice of single backup or numbered backups is controlled by the
|
|
446 variable @code{version-control}. Its possible values are:
|
|
447
|
|
448 @table @code
|
|
449 @item t
|
|
450 Make numbered backups.
|
|
451 @item nil
|
|
452 Make numbered backups for files that have numbered backups already.
|
|
453 Otherwise, make single backups.
|
|
454 @item never
|
|
455 Never make numbered backups; always make single backups.
|
|
456 @end table
|
|
457
|
|
458 @noindent
|
|
459 @code{version-control} may be set locally in an individual buffer to
|
|
460 control the making of backups for that buffer's file. For example,
|
|
461 Rmail mode locally sets @code{version-control} to @code{never} to make sure
|
|
462 that there is only one backup for an Rmail file. @xref{Locals}.
|
|
463
|
|
464 @node Backup Deletion, Backup Copying, Backup Names, Backup
|
|
465 @subsubsection Automatic Deletion of Backups
|
|
466
|
|
467 @vindex kept-old-versions
|
|
468 @vindex kept-new-versions
|
|
469 To prevent unlimited consumption of disk space, Emacs can delete numbered
|
|
470 backup versions automatically. Generally Emacs keeps the first few backups
|
|
471 and the latest few backups, deleting any in between. This happens every
|
|
472 time a new backup is made. The two variables that control the deletion are
|
|
473 @code{kept-old-versions} and @code{kept-new-versions}. Their values are, respectively
|
|
474 the number of oldest (lowest-numbered) backups to keep and the number of
|
|
475 newest (highest-numbered) ones to keep, each time a new backup is made.
|
|
476 The values are used just after a new backup version is made;
|
|
477 that newly made backup is included in the count in @code{kept-new-versions}.
|
|
478 By default, both variables are 2.
|
|
479
|
|
480 @vindex trim-versions-without-asking
|
|
481 If @code{trim-versions-without-asking} is non-@code{nil}, excess
|
|
482 middle versions are deleted without notification. If it is @code{nil}, the
|
|
483 default, you are asked whether the excess middle versions should
|
|
484 really be deleted.
|
|
485
|
|
486 You can also use Dired's @kbd{.} (Period) command to delete old versions.
|
|
487 @xref{Dired}.
|
|
488
|
|
489 @node Backup Copying, , Backup Deletion, Backup
|
|
490 @subsubsection Copying vs.@: Renaming
|
|
491
|
|
492 You can make backup files by copying the old file or by renaming it.
|
|
493 This makes a difference when the old file has multiple names. If you
|
|
494 rename the old file into the backup file, the alternate names
|
|
495 become names for the backup file. If you copy the old file instead,
|
|
496 the alternate names remain names for the file that you are editing,
|
|
497 and the contents accessed by those names will be the new contents.
|
|
498
|
|
499 How you make a backup file may also affect the file's owner
|
|
500 and group. If you use copying, they do not change. If renaming is used,
|
|
501 you become the file's owner, and the file's group becomes the default
|
|
502 (different operating systems have different defaults for the group).
|
|
503
|
|
504 Having the owner change is usually a good idea, because then the owner
|
|
505 is always the person who last edited the file. Occasionally there is a
|
|
506 file whose owner should not change. Since most files should change
|
|
507 owners, it is a good idea to use local variable lists to set
|
|
508 @code{backup-by-copying-when-mismatch} for the special cases where the
|
|
509 owner should not change (@pxref{File Variables}).
|
|
510
|
|
511 @vindex backup-by-copying
|
|
512 @vindex backup-by-copying-when-linked
|
|
513 @vindex backup-by-copying-when-mismatch
|
|
514 Three variables control the choice of renaming or copying.
|
|
515 Normally, renaming is done. If the variable @code{backup-by-copying} is
|
|
516 non-@code{nil}, copying is used. Otherwise, if the variable
|
|
517 @code{backup-by-copying-when-linked} is non-@code{nil}, copying is
|
|
518 done for files that have multiple names, but renaming may still be done when
|
|
519 the file being edited has only one name. If the variable
|
|
520 @code{backup-by-copying-when-mismatch} is non-@code{nil}, copying is
|
|
521 done if renaming would cause the file's owner or group to change. @refill
|
|
522
|
|
523 @node Interlocking, , Backup, Saving
|
|
524 @subsection Protection Against Simultaneous Editing
|
|
525
|
|
526 @cindex file dates
|
|
527 @cindex simultaneous editing
|
|
528 Simultaneous editing occurs when two users visit the same file, both
|
|
529 make changes, and both save their changes. If no one was informed that
|
|
530 this was happening, and you saved first, you would later find that your
|
|
531 changes were lost. On some systems, Emacs notices immediately when the
|
|
532 second user starts to change a file already being edited, and issues a
|
|
533 warning. When this is not possible, or if the second user has started
|
|
534 to change the file despite the warning, Emacs checks when the file is
|
|
535 saved, and issues a second warning when a user is about to overwrite a
|
|
536 file containing another user's changes. If you are the user editing the
|
|
537 file, you can take corrective action at this point and prevent actual
|
|
538 loss of work.
|
|
539
|
|
540 @findex ask-user-about-lock
|
|
541 When you make the first modification in an Emacs buffer that is visiting
|
|
542 a file, Emacs records that you have locked the file. (It does this by
|
|
543 writing another file in a directory reserved for this purpose.) The lock
|
|
544 is removed when you save the changes. The idea is that the file is locked
|
|
545 whenever the buffer is modified. If you begin to modify the buffer while
|
|
546 the visited file is locked by someone else, this constitutes a collision,
|
|
547 and Emacs asks you what to do. It does this by calling the Lisp function
|
|
548 @code{ask-user-about-lock}, which you can redefine to customize what it
|
|
549 does. The standard definition of this function asks you a
|
|
550 question and accepts three possible answers:
|
|
551
|
|
552 @table @kbd
|
|
553 @item s
|
|
554 Steal the lock. Whoever was already changing the file loses the lock,
|
|
555 and you get the lock.
|
|
556 @item p
|
|
557 Proceed. Go ahead and edit the file despite its being locked by someone else.
|
|
558 @item q
|
|
559 Quit. This causes an error (@code{file-locked}) and the modification you
|
|
560 were trying to make in the buffer does not actually take place.
|
|
561 @end table
|
|
562
|
|
563 Note that locking works on the basis of a file name; if a file has
|
|
564 multiple names, Emacs does not realize that the two names are the same file
|
|
565 and cannot prevent two users from editing it simultaneously under different
|
|
566 names. However, basing locking on names means that Emacs can interlock the
|
|
567 editing of new files that do not really exist until they are saved.
|
|
568
|
|
569 Some systems are not configured to allow Emacs to make locks. On
|
|
570 these systems, Emacs cannot detect trouble in advance, but it can still
|
|
571 detect it in time to prevent you from overwriting someone else's changes.
|
|
572
|
|
573 Every time Emacs saves a buffer, it first checks the last-modification
|
|
574 date of the existing file on disk to see that it has not changed since the
|
|
575 file was last visited or saved. If the date does not match, it implies
|
|
576 that changes were made in the file in some other way, and these changes are
|
|
577 about to be lost if Emacs actually does save. To prevent this, Emacs
|
|
578 prints a warning message and asks for confirmation before saving.
|
|
579 Occasionally you will know why the file was changed and know that it does
|
|
580 not matter; then you can answer @kbd{yes} and proceed. Otherwise, you should
|
|
581 cancel the save with @kbd{C-g} and investigate the situation.
|
|
582
|
|
583 The first thing you should do when notified that simultaneous editing
|
|
584 has already taken place is to list the directory with @kbd{C-u C-x C-d}
|
|
585 (@pxref{ListDir,,Directory Listing}). This will show the file's current
|
|
586 author. You should attempt to contact that person and ask him not to
|
|
587 continue editing. Often the next step is to save the contents of your
|
|
588 Emacs buffer under a different name, and use @code{diff} to compare the
|
|
589 two files.@refill
|
|
590
|
|
591 Simultaneous editing checks are also made when you visit a file that
|
|
592 is already visited with @kbd{C-x C-f} and when you start to modify a
|
|
593 file. This is not strictly necessary, but it is useful to find out
|
|
594 about such a problem as early as possible, when corrective action takes
|
|
595 less work.
|
|
596
|
|
597 @findex set-default-file-modes
|
|
598 @cindex file protection
|
|
599 Another way to protect your file is to set the read, write, and
|
|
600 executable permissions for the file. Use the function
|
|
601 @code{set-default-file-modes} to set the UNIX @code{umask} value to the
|
|
602 @var{nmask} argument. The @code{umask} value is the default protection
|
|
603 mode for new files.
|
|
604
|
|
605 @node Reverting, Auto Save, Saving, Files
|
|
606 @section Reverting a Buffer
|
|
607 @findex revert-buffer
|
|
608 @cindex drastic changes
|
|
609
|
|
610 If you have made extensive changes to a file and then change your mind
|
|
611 about them, you can get rid of all changes by reading in the previous
|
|
612 version of the file. To do this, use @kbd{M-x revert-buffer}, which
|
|
613 operates on the current buffer. Since reverting a buffer can result in
|
|
614 very extensive changes, you must confirm it with @kbd{yes}.
|
|
615
|
|
616 If the current buffer has been auto-saved more recently than it has been
|
|
617 saved explicitly, @code{revert-buffer} offers to read the auto save file
|
|
618 instead of the visited file (@pxref{Auto Save}). Emacs asks you about
|
|
619 the auto-save file before the request for confirmation of the
|
|
620 @kbd{revert-buffer} operation, and demands @kbd{y} or @kbd{n}
|
|
621 as an answer. If you have started to type @kbd{yes} for confirmation
|
|
622 without realizing that the auto-save question was going to be asked, the
|
|
623 @kbd{y} will answer that question, but the @kbd{es} will not be valid
|
|
624 confirmation. This gives you a chance to cancel the operation with
|
|
625 @kbd{C-g} and try again with the answers you really intend.
|
|
626
|
|
627 @code{revert-buffer} keeps point at the same distance (measured in
|
|
628 characters) from the beginning of the file. If the file was edited only
|
|
629 slightly, you will be at approximately the same piece of text after
|
|
630 reverting as before. If you have made more extensive changes, the value of
|
|
631 point in the old file may bring you to a totally different piece of text
|
|
632 than your last editing point.
|
|
633
|
|
634 A buffer reverted from its visited file is marked ``not modified'' until
|
|
635 you make a change.
|
|
636
|
|
637 Some kinds of buffers whose contents reflect data bases other than files,
|
|
638 such as Dired buffers, can also be reverted. For them, reverting means
|
|
639 recalculating their contents from the appropriate data. Buffers
|
|
640 created randomly with @kbd{C-x b} cannot be reverted; @code{revert-buffer}
|
|
641 reports an error when asked to do so.
|
|
642
|
|
643 @node Auto Save, Version Control, Reverting, Files
|
|
644 @section Auto-Saving: Protection Against Disasters
|
|
645 @cindex Auto-Save mode
|
|
646 @cindex crashes
|
|
647
|
|
648 Emacs saves all the visited files from time to time (based on counting
|
|
649 your keystrokes) without being asked. This is called @dfn{auto-saving}.
|
|
650 It prevents you from losing more than a limited amount of work if the
|
|
651 system crashes.
|
|
652
|
|
653 When Emacs determines it is time for auto-saving, each buffer is
|
|
654 considered and is auto-saved if auto-saving is turned on for it and it has
|
|
655 changed since the last time it was auto-saved. If any auto-saving is
|
|
656 done, the message @samp{Auto-saving...} is displayed in the echo area until
|
|
657 auto-saving is finished. Errors occurring during auto-saving are caught
|
|
658 so that they do not interfere with the execution of commands you have been
|
|
659 typing.
|
|
660
|
|
661 @menu
|
|
662 * Files: Auto Save Files.
|
|
663 * Control: Auto Save Control.
|
|
664 * Recover:: Recovering text from auto-save files.
|
|
665 @end menu
|
|
666
|
|
667 @node Auto Save Files, Auto Save Control, Auto Save, Auto Save
|
|
668 @subsection Auto-Save Files
|
|
669
|
|
670 Auto-saving does not normally write to the files you visited, because
|
|
671 it can be undesirable to save a program that is in an inconsistent
|
|
672 state when you have made only half of a planned change. Instead, auto-saving
|
|
673 is done in a different file called the @dfn{auto-save file}, and the
|
|
674 visited file is changed only when you save explicitly, for example,
|
|
675 with @kbd{C-x C-s}.
|
|
676
|
|
677 Normally, the name of the auto-save file is generated by appending
|
|
678 @samp{#} to the front and back of the visited file name. Thus, a buffer
|
|
679 visiting file @file{foo.c} would be auto-saved in a file @file{#foo.c#}.
|
|
680 Most buffers that are not visiting files are auto-saved only if you
|
|
681 request it explicitly; when they are auto-saved, the auto-save file name
|
|
682 is generated by appending @samp{#%} to the front and @samp{#} to the
|
|
683 back of buffer name. For example, the @samp{*mail*} buffer in which you
|
|
684 compose messages to be sent is auto-saved in a file named
|
|
685 @file{#%*mail*#}. Names of auto-save files are generated this way
|
|
686 unless you customize the functions @code{make-auto-save-file-name} and
|
|
687 @code{auto-save-file-name-p} to do something different. The file name
|
|
688 to be used for auto-saving a buffer is calculated at the time auto-saving is
|
|
689 turned on in that buffer.
|
|
690
|
|
691 @vindex auto-save-visited-file-name
|
|
692 If you want auto-saving to be done in the visited file, set the variable
|
|
693 @code{auto-save-visited-file-name} to be non-@code{nil}. In this mode,
|
|
694 there is really no difference between auto-saving and explicit saving.
|
|
695
|
|
696 @vindex delete-auto-save-files
|
|
697 Emacs deletes a buffer's auto-save file when you explicitly save the
|
|
698 buffer. To inhibit the deletion, set the variable
|
|
699 @code{delete-auto-save-files} to @code{nil}. Changing the visited file
|
|
700 name with @kbd{C-x C-w} or @code{set-visited-file-name} renames any
|
|
701 auto-save file to correspond to the new visited name.
|
|
702
|
|
703 @node Auto Save Control, Recover, Auto Save Files, Auto Save
|
|
704 @subsection Controlling Auto-Saving
|
|
705
|
|
706 @vindex auto-save-default
|
|
707 @findex auto-save-mode
|
|
708 Each time you visit a file, auto-saving is turned on for that file's
|
|
709 buffer if the variable @code{auto-save-default} is non-@code{nil} (but
|
|
710 not in batch mode; @pxref{Entering Emacs}). The default for this
|
|
711 variable is @code{t}, so Emacs auto-saves buffers that visit files by
|
|
712 default. You can use the command @kbd{M-x auto-save-mode} to turn
|
|
713 auto-saving for a buffer on or off. Like other minor mode commands,
|
|
714 @kbd{M-x auto-save-mode} turns auto-saving on with a positive argument,
|
|
715 off with a zero or negative argument; with no argument, it toggles.
|
|
716
|
|
717 @vindex auto-save-interval
|
|
718 @findex do-auto-save
|
|
719 Emacs performs auto-saving periodically based on counting how many
|
|
720 characters you have typed since the last time auto-saving happened. The
|
|
721 variable @code{auto-save-interval} specifies the number of characters
|
|
722 between auto-saves. By default, it is 300. Emacs also auto-saves
|
|
723 whenever you call the function @code{do-auto-save}.
|
|
724
|
|
725 Emacs also does auto-saving whenever it gets a fatal error. This
|
|
726 includes killing the Emacs job with a shell command such as @code{kill
|
|
727 -emacs}, or disconnecting a phone line or network connection.
|
|
728
|
|
729 @vindex auto-save-timeout
|
|
730 You can set the number of seconds of idle time before an auto-save is
|
|
731 done. Setting the value of the variable @code{auto-save-timeout} to zero or
|
|
732 @code{nil} will disable auto-saving due to idleness.
|
|
733
|
|
734 The actual amount of idle time between auto-saves is logarithmically
|
|
735 related to the size of the current buffer. This variable is the number
|
|
736 of seconds after which an auto-save will happen when the current buffer
|
|
737 is 50k or less; the timeout will be 2 1/4 times this in a 200k buffer, 3
|
|
738 3/4 times this in a 1000k buffer, and 4 1/2 times this in a 2000k
|
|
739 buffer.
|
|
740
|
|
741 For this variable to have any effect, you must do @code{(require 'timer)}.
|
|
742
|
|
743 @node Recover, , Auto Save Control, Auto Save
|
|
744 @subsection Recovering Data from Auto-Saves
|
|
745
|
|
746 @findex recover-file
|
|
747 If you want to use the contents of an auto-save file to recover from a
|
|
748 loss of data, use the command @kbd{M-x recover-file @key{RET} @var{file}
|
|
749 @key{RET}}. Emacs visits @var{file} and then (after your confirmation)
|
|
750 restores the contents from the auto-save file @file{#@var{file}#}. You
|
|
751 can then save the file with @kbd{C-x C-s} to put the recovered text into
|
|
752 @var{file} itself. For example, to recover file @file{foo.c} from its
|
|
753 auto-save file @file{#foo.c#}, do:@refill
|
|
754
|
|
755 @example
|
|
756 M-x recover-file @key{RET} foo.c @key{RET}
|
|
757 C-x C-s
|
|
758 @end example
|
|
759
|
|
760 Before asking for confirmation, @kbd{M-x recover-file} displays a
|
|
761 directory listing describing the specified file and the auto-save file,
|
|
762 so you can compare their sizes and dates. If the auto-save file
|
|
763 is older, @kbd{M-x recover-file} does not offer to read it.
|
|
764
|
|
765 Auto-saving is disabled by @kbd{M-x recover-file} because using
|
|
766 this command implies that the auto-save file contains valuable data
|
|
767 from a past session. If you save the data in the visited file and
|
|
768 then go on to make new changes, turn auto-saving back on
|
|
769 with @kbd{M-x auto-save-mode}.
|
|
770
|
|
771 @node Version Control, ListDir, Auto Save, Files
|
|
772 @section Version Control
|
|
773 @cindex version control
|
|
774
|
|
775 @dfn{Version control systems} are packages that can record multiple
|
|
776 versions of a source file, usually storing the unchanged parts of the
|
|
777 file just once. Version control systems also record history information
|
|
778 such as the creation time of each version, who created it, and a
|
|
779 description of what was changed in that version.
|
|
780
|
|
781 The GNU project recommends the version control system known as RCS,
|
|
782 which is free software and available from the Free Software Foundation.
|
|
783 Emacs supports use of either RCS or SCCS (a proprietary, but widely
|
|
784 used, version control system that is not quite as powerful as RCS)
|
|
785 through a facility called VC. The same Emacs commands work with either
|
|
786 RCS or SCCS, so you hardly have to know which one of them you are
|
|
787 using.
|
|
788
|
|
789 @menu
|
|
790 * Concepts of VC:: Basic version control information;
|
|
791 checking files in and out.
|
|
792 * Editing with VC:: Commands for editing a file maintained
|
|
793 with version control.
|
|
794 * Variables for Check-in/out:: Variables that affect the commands used
|
|
795 to check files in or out.
|
|
796 * Log Entries:: Logging your changes.
|
|
797 * Change Logs and VC:: Generating a change log file from log
|
|
798 entries.
|
|
799 * Old Versions:: Examining and comparing old versions.
|
|
800 * VC Status:: Commands to view the VC status of files and
|
|
801 look at log entries.
|
|
802 * Renaming and VC:: A command to rename both the source and
|
|
803 master file correctly.
|
|
804 * Snapshots:: How to make and use snapshots, a set of
|
|
805 file versions that can be treated as a unit.
|
|
806 * Version Headers:: Inserting version control headers into
|
|
807 working files.
|
|
808 @end menu
|
|
809
|
|
810 @node Concepts of VC, Editing with VC, Version Control, Version Control
|
|
811 @subsection Concepts of Version Control
|
|
812
|
|
813 @cindex RCS
|
|
814 @cindex SCCS
|
|
815 @cindex master file
|
|
816 @cindex registered file
|
|
817 @cindex work file
|
|
818 When a file is under version control, we also say that it is
|
|
819 @dfn{registered} in the version control system. Each registered file
|
|
820 has a corresponding @dfn{master file} which represents the file's
|
|
821 present state plus its change history, so that you can reconstruct from
|
|
822 it either the current version or any specified earlier version. Usually
|
|
823 the master file also records a @dfn{log entry} for each version describing
|
|
824 what was changed in that version.
|
|
825
|
|
826 The file that is maintained under version control is sometimes called
|
|
827 the @dfn{work file} corresponding to its master file.
|
|
828
|
|
829 @cindex checking out files
|
|
830 @cindex checking in files
|
|
831 @cindex locking and version control
|
|
832 To examine a file, you @dfn{check it out}. This extracts a version
|
|
833 of the source file (typically, the most recent) from the master file.
|
|
834 If you want to edit the file, you must check it out @dfn{locked}. Only
|
|
835 one user can do this at a time for any given source file. (This kind
|
|
836 of locking is completely unrelated to the locking that Emacs uses to
|
|
837 detect simultaneous editing of a file.)
|
|
838
|
|
839 When you are done with your editing, you must @dfn{check in} the new
|
|
840 version. This records the new version in the master file, and unlocks
|
|
841 the source file so that other people can lock it and thus modify it.
|
|
842
|
|
843 Checkin and checkout are the basic operations of version control. You
|
|
844 can do both of them with a single Emacs command: @w{@kbd{C-x C-q}}
|
|
845 (@code{vc-toggle-read-only}).
|
|
846
|
|
847 A @dfn{snapshot} is a coherent collection of versions of the various
|
|
848 files that make up a program. @xref{Snapshots}.
|
|
849
|
|
850 @node Editing with VC, Variables for Check-in/out, Concepts of VC, Version Control
|
|
851 @subsection Editing with Version Control
|
|
852
|
|
853 When you visit a file that is maintained using version control, the
|
|
854 mode line displays @samp{RCS} or @samp{SCCS} to inform you that version
|
|
855 control is in use, and also (in case you care) which low-level system
|
|
856 the file is actually stored in. Normally, such a source file is
|
|
857 read-only, and the mode line indicates this with @samp{%%}. With RCS,
|
|
858 the mode line also indicates the number of the head version, which is
|
|
859 normally also the version you are looking at.
|
|
860
|
|
861 These are the commands for editing a file maintained with
|
|
862 version control:
|
|
863
|
|
864 @table @kbd
|
|
865 @item C-x C-q
|
|
866 Check the visited file in or out.
|
|
867
|
|
868 @item C-x v u
|
|
869 Revert the buffer and the file to the last checked in version.
|
|
870
|
|
871 @item C-x v c
|
|
872 Remove the last-entered change from the master for the visited file.
|
|
873 This undoes your last check-in.
|
|
874
|
|
875 @item C-x v i
|
|
876 Register the visited file in version control.
|
|
877 @end table
|
|
878
|
|
879 @noindent
|
|
880 (@kbd{C-x v} is the prefix key for version control commands; all of these
|
|
881 commands except for @kbd{C-x C-q} start with @kbd{C-x v}.)
|
|
882
|
|
883 @kindex C-x C-q @r{(version control)}
|
|
884 When you want to modify a file maintained with version control, type
|
|
885 @kbd{C-x C-q} (@code{vc-toggle-read-only}). This @dfn{checks out} the
|
|
886 file, and tells RCS or SCCS to lock the file. This means making the
|
|
887 file writable for you (but not for anyone else).
|
|
888
|
|
889 @cindex log entry
|
|
890 When you are finished editing the file, type @kbd{C-x C-q} again.
|
|
891 When used on a file that is checked out, this command checks the file
|
|
892 in. But check-in does not start immediately; first, you must enter the
|
|
893 @dfn{log entry}---a description of the changes in the new version.
|
|
894 @kbd{C-x C-q} pops up a buffer for you to enter this in. When you are
|
|
895 finished typing in the log entry, type @kbd{C-c C-c} to terminate it; this is
|
|
896 when actual check-in takes place.
|
|
897
|
|
898 Once you have checked in your changes, the file is unlocked, so that
|
|
899 other users can lock it and modify it.
|
|
900
|
|
901 @vindex vc-make-backup-files
|
|
902 Emacs does not save backup files for source files that are maintained
|
|
903 with version control. If you want to make backup files despite version
|
|
904 control, set the variable @code{vc-make-backup-files} to a
|
|
905 non-@code{nil} value.
|
|
906
|
|
907 @vindex vc-keep-workfiles
|
|
908 Normally the work file exists all the time, whether it is locked or
|
|
909 not. If you set @code{vc-keep-workfiles} to @code{nil}, then checking
|
|
910 in a new version with @kbd{C-x C-q} deletes the work file; but any
|
|
911 attempt to visit the file with Emacs creates it again.
|
|
912
|
|
913 It is not impossible to lock a file that someone else has locked. If
|
|
914 you try to check out a file that is locked, @kbd{C-x C-q} asks you
|
|
915 whether you want to ``steal the lock.'' If you say yes, the file
|
|
916 becomes locked by you, but a message is sent to the person who had
|
|
917 formerly locked the file, to inform him of what has happened. The mode
|
|
918 line indicates that a file is locked by someone else by displaying the
|
|
919 login name of that person, before the version number.
|
|
920
|
|
921 @kindex C-x v u
|
|
922 @findex vc-revert-buffer
|
|
923 If you want to discard your current set of changes and revert to the
|
|
924 last version checked in, use @kbd{C-x v u} (@code{vc-revert-buffer}).
|
|
925 This cancels your last check-out, leaving the file unlocked. If you want
|
|
926 to make a different set of changes, you must first check the file out
|
|
927 again. @kbd{C-x v u} requires confirmation, unless it sees that
|
|
928 you haven't made any changes since the last checked-in version.
|
|
929
|
|
930 @kbd{C-x v u} is also the command to use if you lock a file and then
|
|
931 don't actually change it.
|
|
932
|
|
933 @kindex C-x v c
|
|
934 @findex vc-cancel-version
|
|
935 You can cancel a change after checking it in, with @kbd{C-x v c}
|
|
936 (@code{vc-cancel-version}). This command discards all record of the
|
|
937 most recent checked in version, so be careful about using it. It
|
|
938 requires confirmation with @kbd{yes}. By default, @kbd{C-x v c} reverts
|
|
939 your workfile and buffer to the previous version (the one that precedes
|
|
940 the version that is deleted), but you can prevent the reversion by
|
|
941 giving the command a prefix argument. Then the buffer does not change.
|
|
942
|
|
943 This command with a prefix argument is useful when you have checked in
|
|
944 a change and then discover a trivial error in it; you can cancel the
|
|
945 erroneous check-in, fix the error, and repeat the check-in.
|
|
946
|
|
947 Be careful when invoking @kbd{C-x v c}, as it is easy to throw away a
|
|
948 lot of work with it. To help you be careful, this command always
|
|
949 requires confirmation with @samp{yes}.
|
|
950
|
|
951 @kindex C-x v i
|
|
952 @findex vc-register
|
|
953 @vindex vc-default-back-end
|
|
954 You can register the visited file for version control using
|
|
955 @w{@kbd{C-x v i}} (@code{vc-register}). If the variable
|
|
956 @code{vc-default-back-end} is non-@code{nil}, it specifies which
|
|
957 version control system to use; otherwise, this uses RCS if it is
|
|
958 installed on your system and SCCS if not. After @kbd{C-x v i},
|
|
959 the file is unlocked and read-only. Type @kbd{C-x C-q} if you wish to
|
|
960 edit it.
|
|
961
|
|
962 By default, the initial version number is 1.1. If you want to use a
|
|
963 different number, give @kbd{C-x v i} a prefix argument; then it reads
|
|
964 the initial version number using the minibuffer.
|
|
965
|
|
966 @vindex vc-initial-comment
|
|
967 If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads
|
|
968 an initial comment (much like a log entry) to describe the purpose of
|
|
969 this source file.
|
|
970
|
|
971 @kindex C-u C-x v v
|
|
972 @findex vc-next-action
|
|
973 To specify the version number for a subsequent checkin, use the
|
|
974 command @kbd{C-u C-x v v}. @kbd{C-x v v} (@code{vc-next-action}) is the
|
|
975 command that @kbd{C-x C-q} uses to do the ``real work'' when the visited
|
|
976 file uses version control. When used for checkin, and given a prefix
|
|
977 argument, it reads the version number with the minibuffer.
|
|
978
|
|
979 @node Variables for Check-in/out, Log Entries, Editing with VC, Version Control
|
|
980 @subsection Variables Affecting Check-in and Check-out
|
|
981 @c There is no need to tell users about vc-master-templates.
|
|
982
|
|
983 @vindex vc-suppress-confirm
|
|
984 If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x C-q}
|
|
985 and @kbd{C-x v i} can save the current buffer without asking, and
|
|
986 @kbd{C-x v u} also operates without asking for confirmation.
|
|
987 (This variable does not affect @kbd{C-x v c}; that is so drastic
|
|
988 that it should always ask for confirmation.)
|
|
989
|
|
990 @vindex vc-command-messages
|
|
991 VC mode does much of its work by running the shell commands for RCS
|
|
992 and SCCS. If @code{vc-command-messages} is non-@code{nil}, VC displays
|
|
993 messages to indicate which shell commands it runs, and additional
|
|
994 messages when the commands finish.
|
|
995
|
|
996 Normally, VC assumes that it can deduce the locked/unlocked state of
|
|
997 files by looking at the file permissions of the work file; this is
|
|
998 fast. However, if the @file{RCS} or @file{SCCS} subdirectory is
|
|
999 actually a symbolic link, then VC does not trust the file permissions to
|
|
1000 reflect this status.
|
|
1001
|
|
1002 @vindex vc-mistrust-permissions
|
|
1003 You can specify the criterion for whether to trust the file permissions
|
|
1004 by setting the variable @code{vc-mistrust-permissions}. Its value may
|
|
1005 be @code{t} (always mistrust the file permissions and check the master
|
|
1006 file), @code{nil} (always trust the file permissions), or a function of
|
|
1007 one argument which makes the decision. The argument is the directory
|
|
1008 name of the @file{RCS} or @file{SCCS} subdirectory. A non-@code{nil}
|
|
1009 value from the function says to mistrust the file permissions.
|
|
1010
|
|
1011 If you find that the file permissions of work files are changed
|
|
1012 erroneously, set @code{vc-mistrust-permissions} to @code{t}. Then VC
|
|
1013 always checks the master file to determine the file's status.
|
|
1014
|
|
1015 @vindex vc-path
|
|
1016 You can specify additional directories to search for version control
|
|
1017 programs by setting the variable @code{vc-path}. These directories
|
|
1018 are searched before the usual search path. The proper result usually
|
|
1019 happens automatically.
|
|
1020
|
|
1021 @node Log Entries, Change Logs and VC, Variables for Check-in/out, Version Control
|
|
1022 @subsection Log Entries
|
|
1023
|
|
1024 When you're editing an initial comment or log entry for inclusion in a
|
|
1025 master file, finish your entry by typing @kbd{C-c C-c}.
|
|
1026
|
|
1027 @table @kbd
|
|
1028 @item C-c C-c
|
|
1029 Finish the comment edit normally (@code{vc-finish-logentry}).
|
|
1030 This finishes check-in.
|
|
1031 @end table
|
|
1032
|
|
1033 To abort check-in, just don't type @kbd{C-c C-c} in that buffer. You
|
|
1034 can switch buffers and do other editing. As long as you don't try to
|
|
1035 check in another file, the entry you were editing remains in its
|
|
1036 buffer, and you can go back to that buffer at any time to complete the
|
|
1037 check-in.
|
|
1038
|
|
1039 If you change several source files for the same reason, it is often
|
|
1040 convenient to specify the same log entry for many of the files. To do
|
|
1041 this, use the history of previous log entries. The commands @kbd{M-n},
|
|
1042 @kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this work just like the
|
|
1043 minibuffer history commands (except that these versions are used outside
|
|
1044 the minibuffer).
|
|
1045
|
|
1046 @vindex vc-log-mode-hook
|
|
1047 Each time you check in a file, the log entry buffer is put into VC Log
|
|
1048 mode, which involves running two hooks: @code{text-mode-hook} and
|
|
1049 @code{vc-log-mode-hook}.
|
|
1050
|
|
1051 @node Change Logs and VC, Old Versions, Log Entries, Version Control
|
|
1052 @subsection Change Logs and VC
|
|
1053
|
|
1054 If you use RCS for a program and also maintain a change log file for
|
|
1055 it (@pxref{Change Log}), you can generate change log entries
|
|
1056 automatically from the version control log entries:
|
|
1057
|
|
1058 @table @kbd
|
|
1059 @item C-x v a
|
|
1060 @kindex C-x v a
|
|
1061 @findex vc-update-change-log
|
|
1062 Visit the current directory's change log file and create new entries for
|
|
1063 versions checked in since the most recent entry in the change log file
|
|
1064 (@code{vc-update-change-log}).
|
|
1065
|
|
1066 This command works with RCS only; it does not work with SCCS.
|
|
1067 @end table
|
|
1068
|
|
1069 For example, suppose the first line of @file{ChangeLog} is dated 10
|
|
1070 April 1992, and that the only check-in since then was by Nathaniel
|
|
1071 Bowditch to @file{rcs2log} on 8 May 1992 with log text @samp{Ignore log
|
|
1072 messages that start with `#'.}. Then @kbd{C-x v a} visits
|
|
1073 @file{ChangeLog} and inserts text like this:
|
|
1074
|
|
1075 @smallexample
|
|
1076 @group
|
|
1077 Fri May 8 21:45:00 1992 Nathaniel Bowditch (nat@@apn.org)
|
|
1078
|
|
1079 * rcs2log: Ignore log messages that start with `#'.
|
|
1080 @end group
|
|
1081 @end smallexample
|
|
1082
|
|
1083 @noindent
|
|
1084 You can then edit the new change log entry further as you wish.
|
|
1085
|
|
1086 Normally, the log entry for file @file{foo} is displayed as @samp{*
|
|
1087 foo: @var{text of log entry}}. The @samp{:} after @file{foo} is omitted
|
|
1088 if the text of the log entry starts with @w{@samp{(@var{functionname}):
|
|
1089 }}. For example, if the log entry for @file{vc.el} is
|
|
1090 @samp{(vc-do-command): Check call-process status.}, then the text in
|
|
1091 @file{ChangeLog} looks like this:
|
|
1092
|
|
1093 @smallexample
|
|
1094 @group
|
|
1095 Wed May 6 10:53:00 1992 Nathaniel Bowditch (nat@@apn.org)
|
|
1096
|
|
1097 * vc.el (vc-do-command): Check call-process status.
|
|
1098 @end group
|
|
1099 @end smallexample
|
|
1100
|
|
1101 When @kbd{C-x v a} adds several change log entries at once, it groups
|
|
1102 related log entries together if they all are checked in by the same
|
|
1103 author at nearly the same time. If the log entries for several such
|
|
1104 files all have the same text, it coalesces them into a single entry.
|
|
1105 For example, suppose the most recent checkins have the following log
|
|
1106 entries:
|
|
1107
|
|
1108 @example
|
|
1109 @exdent For @file{vc.texinfo}:
|
|
1110 Fix expansion typos.
|
|
1111 @exdent For @file{vc.el}:
|
|
1112 Don't call expand-file-name.
|
|
1113 @exdent For @file{vc-hooks.el}:
|
|
1114 Don't call expand-file-name.
|
|
1115 @end example
|
|
1116
|
|
1117 They appear like this in @file{ChangeLog}:
|
|
1118
|
|
1119 @smallexample
|
|
1120 @group
|
|
1121 Wed Apr 1 08:57:59 1992 Nathaniel Bowditch (nat@@apn.org)
|
|
1122
|
|
1123 * vc.texinfo: Fix expansion typos.
|
|
1124
|
|
1125 * vc.el, vc-hooks.el: Don't call expand-file-name.
|
|
1126 @end group
|
|
1127 @end smallexample
|
|
1128
|
|
1129 Normally, @kbd{C-x v a} separates log entries by a blank line, but you
|
|
1130 can mark several related log entries to be clumped together (without an
|
|
1131 intervening blank line) by starting the text of each related log entry
|
|
1132 with a label of the form @w{@samp{@{@var{clumpname}@} }}. The label
|
|
1133 itself is not copied to @file{ChangeLog}. For example, suppose the log
|
|
1134 entries are:
|
|
1135
|
|
1136 @example
|
|
1137 @exdent For @file{vc.texinfo}:
|
|
1138 @{expand@} Fix expansion typos.
|
|
1139 @exdent For @file{vc.el}:
|
|
1140 @{expand@} Don't call expand-file-name.
|
|
1141 @exdent For @file{vc-hooks.el}:
|
|
1142 @{expand@} Don't call expand-file-name.
|
|
1143 @end example
|
|
1144
|
|
1145 @noindent
|
|
1146 Then the text in @file{ChangeLog} looks like this:
|
|
1147
|
|
1148 @smallexample
|
|
1149 @group
|
|
1150 Wed Apr 1 08:57:59 1992 Nathaniel Bowditch (nat@@apn.org)
|
|
1151
|
|
1152 * vc.texinfo: Fix expansion typos.
|
|
1153 * vc.el, vc-hooks.el: Don't call expand-file-name.
|
|
1154 @end group
|
|
1155 @end smallexample
|
|
1156
|
|
1157 A log entry whose text begins with @samp{#} is not copied to
|
|
1158 @file{ChangeLog}. For example, if you merely fix some misspellings in
|
|
1159 comments, you can log the change with an entry beginning with @samp{#}
|
|
1160 to avoid putting such trivia into @file{ChangeLog}.
|
|
1161
|
|
1162 @node Old Versions, VC Status, Change Logs and VC, Version Control
|
|
1163 @subsection Examining And Comparing Old Versions
|
|
1164
|
|
1165 @table @kbd
|
|
1166 @item C-x v ~ @var{version} @key{RET}
|
|
1167 Examine version @var{version} of the visited file, in a buffer of its
|
|
1168 own (@code{vc-version-other-window}).
|
|
1169
|
|
1170 @item C-x v =
|
|
1171 Compare the current buffer contents with the latest checked-in version
|
|
1172 of the file.
|
|
1173
|
|
1174 @item C-u C-x v = @var{file} @key{RET} @var{oldvers} @key{RET} @var{newvers} @key{RET}
|
|
1175 Compare the specified two versions of @var{file}.
|
|
1176 @end table
|
|
1177
|
|
1178 @findex vc-version-other-window
|
|
1179 @kindex C-x v ~
|
|
1180 You can examine any version of a file by first visiting it, and then
|
|
1181 using @kbd{C-x v ~ @var{version} @key{RET}}
|
|
1182 (@code{vc-version-other-window}). This puts the text of version
|
|
1183 @var{version} in a file named @file{@var{filename}.~@var{version}~},
|
|
1184 then visits it in a separate window.
|
|
1185
|
|
1186 @findex vc-diff
|
|
1187 @kindex C-x v =
|
|
1188 To compare two versions of a file, use the command @kbd{C-x v =}
|
|
1189 (@code{vc-diff}).
|
|
1190
|
|
1191 Plain @kbd{C-x v =} compares the current buffer contents (saving them
|
|
1192 in the file if necessary) with the last checked-in version of the file.
|
|
1193 With a prefix argument, @kbd{C-x v =} reads a file name and two version
|
|
1194 numbers, then compares those versions of the specified file.
|
|
1195
|
|
1196 If you supply a directory name instead of the name of a work file,
|
|
1197 this command compares the two specified versions of all registered files
|
|
1198 in that directory and its subdirectories. You can also specify a
|
|
1199 snapshot name (@pxref{Snapshots}) instead of one or both version
|
|
1200 numbers.
|
|
1201
|
|
1202 You can specify a checked-in version by its number; you can specify
|
|
1203 the most recent checked-in version with an empty version number.
|
|
1204
|
|
1205 This command works by running the @code{vcdiff} utility, getting the
|
|
1206 options from the variable @code{diff-switches}. It displays the output
|
|
1207 in a special buffer in another window. Unlike the @kbd{M-x diff}
|
|
1208 command, @kbd{C-x v =} does not try to find the changes in the old and
|
|
1209 new versions. This is because one or both versions normally do not
|
|
1210 exist as files. They exist only in the records of the master file.
|
|
1211 @xref{Comparing Files}, for more information about @kbd{M-x diff}.
|
|
1212
|
|
1213 @node VC Status, Renaming and VC, Old Versions, Version Control
|
|
1214 @subsection VC Status Commands
|
|
1215
|
|
1216 @kindex C-x v l
|
|
1217 @findex vc-print-log
|
|
1218 To view the detailed version control status and history of a file,
|
|
1219 type @kbd{C-x v l} (@code{vc-print-log}). It displays the history of
|
|
1220 changes to the current file, including the text of the log entries. The
|
|
1221 output appears in a separate window.
|
|
1222
|
|
1223 @kindex C-x v d
|
|
1224 @findex vc-directory
|
|
1225 When you are working on a large program, it's often useful to find all
|
|
1226 the files that are currently locked, or all the files maintained in
|
|
1227 version control at all. You can use @kbd{C-x v d} (@code{vc-directory})
|
|
1228 to show all the locked files in or beneath the current directory. This
|
|
1229 includes all files that are locked by any user. @kbd{C-u C-x v d} lists
|
|
1230 all files in or beneath the current directory that are maintained with
|
|
1231 version control.
|
|
1232
|
|
1233 The list of files is displayed as a buffer that uses an augmented
|
|
1234 Dired mode. The names of the users locking various files are shown (in
|
|
1235 parentheses) in place of the owner and group. All the normal Dired
|
|
1236 commands work in this buffer. Most interactive VC commands work also,
|
|
1237 and apply to the file name on the current line.
|
|
1238
|
|
1239 The @kbd{C-x v v} command (@code{vc-next-action}), when used in the
|
|
1240 augmented Dired buffer, operates on all the marked files (or the file on
|
|
1241 the current line). If it operates on more than one file, it handles
|
|
1242 each file according to its current state; thus, it may check out one
|
|
1243 file and check in another (because it is already checked out). If it
|
|
1244 has to check in any files, it reads a single log entry, then uses that
|
|
1245 text for all the files being checked in. This can be convenient for
|
|
1246 registering or checking in several files at once, as part of the same
|
|
1247 change.
|
|
1248
|
|
1249 @node Renaming and VC, Snapshots, VC Status, Version Control
|
|
1250 @subsection Renaming VC Work Files and Master Files
|
|
1251
|
|
1252 @findex vc-rename-file
|
|
1253 When you rename a registered file, you must also rename its master
|
|
1254 file correspondingly to get proper results. Use @code{vc-rename-file}
|
|
1255 to rename the source file as you specify, and rename its master file
|
|
1256 accordingly. It also updates any snapshots (@pxref{Snapshots}) that
|
|
1257 mention the file, so that they use the new name; despite this, the
|
|
1258 snapshot thus modified may not completely work (@pxref{Snapshot
|
|
1259 Caveats}).
|
|
1260
|
|
1261 You cannot use @code{vc-rename-file} on a file that is locked by
|
|
1262 someone else.
|
|
1263
|
|
1264 @node Snapshots, Version Headers, Renaming and VC, Version Control
|
|
1265 @subsection Snapshots
|
|
1266 @cindex snapshots and version control
|
|
1267
|
|
1268 A @dfn{snapshot} is a named set of file versions (one for each
|
|
1269 registered file) that you can treat as a unit. One important kind of
|
|
1270 snapshot is a @dfn{release}, a (theoretically) stable version of the
|
|
1271 system that is ready for distribution to users.
|
|
1272
|
|
1273 @menu
|
|
1274 * Making Snapshots:: The snapshot facilities.
|
|
1275 * Snapshot Caveats:: Things to be careful of when using snapshots.
|
|
1276 @end menu
|
|
1277
|
|
1278 @node Making Snapshots, Snapshot Caveats, Snapshots, Snapshots
|
|
1279 @subsubsection Making and Using Snapshots
|
|
1280
|
|
1281 There are two basic commands for snapshots; one makes a
|
|
1282 snapshot with a given name, the other retrieves a named snapshot.
|
|
1283
|
|
1284 @table @code
|
|
1285 @kindex C-x v s
|
|
1286 @findex vc-create-snapshot
|
|
1287 @item C-x v s @var{name} @key{RET}
|
|
1288 Define the last saved versions of every registered file in or under the
|
|
1289 current directory as a snapshot named @var{name}
|
|
1290 (@code{vc-create-snapshot}).
|
|
1291
|
|
1292 @kindex C-x v r
|
|
1293 @findex vc-retrieve-snapshot
|
|
1294 @item C-x v r @var{name} @key{RET}
|
|
1295 Check out all registered files at or below the current directory level
|
|
1296 using whatever versions correspond to the snapshot @var{name}
|
|
1297 (@code{vc-retrieve-snapshot}).
|
|
1298
|
|
1299 This command reports an error if any files are locked at or below the
|
|
1300 current directory, without changing anything; this is to avoid
|
|
1301 overwriting work in progress.
|
|
1302 @end table
|
|
1303
|
|
1304 A snapshot uses a very small amount of resources---just enough to record
|
|
1305 the list of file names and which version belongs to the snapshot. Thus,
|
|
1306 you need not hesitate to create snapshots whenever they are useful.
|
|
1307
|
|
1308 You can give a snapshot name as an argument to @kbd{C-x v =} or
|
|
1309 @kbd{C-x v ~} (@pxref{Old Versions}). Thus, you can use it to compare a
|
|
1310 snapshot against the current files, or two snapshots against each other,
|
|
1311 or a snapshot against a named version.
|
|
1312
|
|
1313 @node Snapshot Caveats, , Making Snapshots, Snapshots
|
|
1314 @subsubsection Snapshot Caveats
|
|
1315
|
|
1316 @cindex named configurations (RCS)
|
|
1317 VC's snapshot facilities are modeled on RCS's named-configuration
|
|
1318 support. They use RCS's native facilities for this, so under VC
|
|
1319 snapshots made using RCS are visible even when you bypass VC.
|
|
1320
|
|
1321 @c worded verbosely to avoid overfull hbox.
|
|
1322 For SCCS, VC implements snapshots itself. The files it uses contain
|
|
1323 name/file/version-number triples. These snapshots are visible only
|
|
1324 through VC.
|
|
1325
|
|
1326 A snapshot is a set of checked-in versions. So make sure that all the
|
|
1327 files are checked in and not locked when you make a snapshot.
|
|
1328
|
|
1329 File renaming and deletion can create some difficulties with snapshots.
|
|
1330 This is not a VC-specific problem, but a general design issue in version
|
|
1331 control systems that no one has solved very well yet.
|
|
1332
|
|
1333 If you rename a registered file, you need to rename its master along
|
|
1334 with it (the command @code{vc-rename-file} does this automatically). If
|
|
1335 you are using SCCS, you must also update the records of the snapshot, to
|
|
1336 mention the file by its new name (@code{vc-rename-file} does this,
|
|
1337 too). An old snapshot that refers to a master file that no longer
|
|
1338 exists under the recorded name is invalid; VC can no longer retrieve
|
|
1339 it. It would be beyond the scope of this manual to explain enough about
|
|
1340 RCS and SCCS to explain how to update the snapshots by hand.
|
|
1341
|
|
1342 Using @code{vc-rename-file} makes the snapshot remain valid for
|
|
1343 retrieval, but it does not solve all problems. For example, some of the
|
|
1344 files in the program probably refer to others by name. At the very
|
|
1345 least, the makefile probably mentions the file that you renamed. If you
|
|
1346 retrieve an old snapshot, the renamed file is retrieved under its new
|
|
1347 name, which is not the name that the makefile expects. So the program
|
|
1348 won't really work as retrieved.
|
|
1349
|
|
1350 @node Version Headers, , Snapshots, Version Control
|
|
1351 @subsection Inserting Version Control Headers
|
|
1352
|
|
1353 Sometimes it is convenient to put version identification strings
|
|
1354 directly into working files. Certain special strings called
|
|
1355 @dfn{version headers} are replaced in each successive version by the
|
|
1356 number of that version.
|
|
1357
|
|
1358 @kindex C-x v h
|
|
1359 @findex vc-insert-headers
|
|
1360 You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to
|
|
1361 insert a suitable header string.
|
|
1362
|
|
1363 @table @kbd
|
|
1364 @item C-x v h
|
|
1365 Insert headers in a file for use with your version-control system.
|
|
1366 @end table
|
|
1367
|
|
1368 @vindex vc-header-alist
|
|
1369 The default header string is @samp{\$Id\$} for RCS and @samp{\%W\%}
|
|
1370 for SCCS. (The actual strings inserted do not have the backslashes
|
|
1371 in them. They were placed in the Info source file so that the
|
|
1372 strings don't get interpreted as version-control headers when the
|
|
1373 Info source files are maintained under version control.) You can
|
|
1374 specify other headers to insert by setting the variable
|
|
1375 @code{vc-header-alist}. Its value is a list of elements of the form
|
|
1376 @code{(@var{program} . @var{string})} where @var{program} is @code{RCS}
|
|
1377 or @code{SCCS} and @var{string} is the string to use.
|
|
1378
|
|
1379 Instead of a single string, you can specify a list of strings; then
|
|
1380 each string in the list is inserted as a separate header on a line of
|
|
1381 its own.
|
|
1382
|
|
1383 It is often necessary to use ``superfluous'' backslashes when writing
|
|
1384 the strings that you put in this variable. This is to prevent the
|
|
1385 string in the constant from being interpreted as a header itself if the
|
|
1386 Emacs Lisp file containing it is maintained with version control.
|
|
1387
|
|
1388 @vindex vc-comment-alist
|
|
1389 Each header is inserted surrounded by tabs, inside comment delimiters,
|
|
1390 on a new line at the start of the buffer. Normally the ordinary comment
|
|
1391 start and comment end strings of the current mode are used, but for
|
|
1392 certain modes, there are special comment delimiters for this purpose;
|
|
1393 the variable @code{vc-comment-alist} specifies them. Each element of
|
|
1394 this list has the form @code{(@var{mode} @var{starter} @var{ender})}.
|
|
1395
|
|
1396 @vindex vc-static-header-alist
|
|
1397 The variable @code{vc-static-header-alist} specifies further strings
|
|
1398 to add based on the name of the buffer. Its value should be a list of
|
|
1399 elements of the form @code{(@var{regexp} . @var{format})}. Whenever
|
|
1400 @var{regexp} matches the buffer name, @var{format} is inserted as part
|
|
1401 of the header. A header line is inserted for each element that matches
|
|
1402 the buffer name, and for each string specified by
|
|
1403 @code{vc-header-alist}. The header line is made by processing the
|
|
1404 string from @code{vc-header-alist} with the format taken from the
|
|
1405 element. The default value for @code{vc-static-header-alist} is:
|
|
1406
|
|
1407 @example
|
|
1408 @group
|
|
1409 (("\\.c$" .
|
|
1410 "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
|
|
1411 #endif /* lint */\n"))
|
|
1412 @end group
|
|
1413 @end example
|
|
1414
|
|
1415 @noindent
|
|
1416 which specifies insertion of a string of this form:
|
|
1417
|
|
1418 @example
|
|
1419 @group
|
|
1420
|
|
1421 #ifndef lint
|
|
1422 static char vcid[] = "@var{string}";
|
|
1423 #endif /* lint */
|
|
1424 @end group
|
|
1425 @end example
|
|
1426
|
|
1427 @node ListDir, Comparing Files, Version Control, Files
|
|
1428 @section Listing a File Directory
|
|
1429
|
|
1430 @cindex file directory
|
|
1431 @cindex directory listing
|
|
1432 Files are organized by Unix into @dfn{directories}. A @dfn{directory
|
|
1433 listing} is a list of all the files in a directory. Emacs provides
|
|
1434 directory listings in brief format (file names only) and verbose format
|
|
1435 (sizes, dates, and authors included).
|
|
1436
|
|
1437 @table @kbd
|
|
1438 @item C-x C-d @var{dir-or-pattern}
|
|
1439 Print a brief directory listing (@code{list-directory}).
|
|
1440 @item C-u C-x C-d @var{dir-or-pattern}
|
|
1441 Print a verbose directory listing.
|
|
1442 @end table
|
|
1443
|
|
1444 @findex list-directory
|
|
1445 @kindex C-x C-d
|
|
1446 To print a directory listing, use @kbd{C-x C-d}
|
|
1447 (@code{list-directory}). This command prompts in the minibuffer for a
|
|
1448 file name which is either a directory to be listed or pattern
|
|
1449 containing wildcards for the files to be listed. For example,
|
|
1450
|
|
1451 @example
|
|
1452 C-x C-d /u2/emacs/etc @key{RET}
|
|
1453 @end example
|
|
1454
|
|
1455 @noindent
|
|
1456 lists all the files in directory @file{/u2/emacs/etc}. An example of
|
|
1457 specifying a file name pattern is:
|
|
1458
|
|
1459 @example
|
|
1460 C-x C-d /u2/emacs/src/*.c @key{RET}
|
|
1461 @end example
|
|
1462
|
|
1463 Normally, @kbd{C-x C-d} prints a brief directory listing containing just
|
|
1464 file names. A numeric argument (regardless of value) tells it to print a
|
|
1465 verbose listing (like @code{ls -l}).
|
|
1466
|
|
1467 @vindex list-directory-brief-switches
|
|
1468 @vindex list-directory-verbose-switches
|
|
1469 Emacs obtains the text of a directory listing by running @code{ls} in
|
|
1470 an inferior process. Two Emacs variables control the switches passed to
|
|
1471 @code{ls}: @code{list-directory-brief-switches} is a string giving the
|
|
1472 switches to use in brief listings (@code{"-CF"} by default).
|
|
1473 @code{list-directory-verbose-switches} is a string giving the switches
|
|
1474 to use in a verbose listing (@code{"-l"} by default).
|
|
1475
|
|
1476 The variable @code{directory-abbrev-alist} is an alist of abbreviations
|
|
1477 for file directories. The list consists of elements of the form
|
|
1478 @code{(FROM . TO)}, each meaning to replace @code{FROM} with @code{TO}
|
|
1479 when it appears in a directory name. This replacement is done when
|
|
1480 setting up the default directory of a newly visited file. Every @code{FROM}
|
|
1481 string should start with `@samp{^}'.
|
|
1482
|
|
1483 Use this feature when you have directories which you normally refer to
|
|
1484 via absolute symbolic links. Make @code{TO} the name of the link, and
|
|
1485 @code{FROM} the name it is linked to.
|
|
1486
|
|
1487 @node Comparing Files, Dired, ListDir, Files
|
|
1488 @section Comparing Files
|
|
1489 @cindex comparing files
|
|
1490
|
|
1491 @findex diff
|
|
1492 @vindex diff-switches
|
|
1493 The command @kbd{M-x diff} compares two files, displaying the
|
|
1494 differences in an Emacs buffer named @samp{*Diff*}. It works by running
|
|
1495 the @code{diff} program, using options taken from the variable
|
|
1496 @code{diff-switches}, whose value should be a string.
|
|
1497
|
|
1498 The buffer @samp{*Diff*} has Compilation mode as its major mode, so
|
|
1499 you can use @kbd{C-x `} to visit successive changed locations in the two
|
|
1500 source files. You can also move to a particular hunk of changes and
|
|
1501 type @kbd{C-c C-c} to find the corresponding source location. You can
|
|
1502 also use the other special commands of Compilation mode: @key{SPC} and
|
|
1503 @key{DEL} for scrolling, and @kbd{M-p} and @kbd{M-n} for cursor motion.
|
|
1504 @xref{Compilation}.
|
|
1505
|
|
1506 @findex diff-backup
|
|
1507 The command @kbd{M-x diff-backup} compares a specified file with its most
|
|
1508 recent backup. If you specify the name of a backup file,
|
|
1509 @code{diff-backup} compares it with the source file that it is a backup
|
|
1510 of.
|
|
1511
|
|
1512 @findex compare-windows
|
|
1513 @cindex comparing files
|
|
1514 The command @kbd{M-x compare-windows} compares the text in the current
|
|
1515 window with that in the next window. Comparison starts at point in each
|
|
1516 window. Point moves forward in each window, a character at a time in each
|
|
1517 window, until the next characters in the two windows are different. Then
|
|
1518 the command is finished. For more information about windows in Emacs,
|
|
1519 @ref{Windows}.
|
|
1520
|
|
1521 @vindex compare-ignore-case
|
|
1522 With a numeric argument, @code{compare-windows} ignores changes in
|
|
1523 whitespace. If the variable @code{compare-ignore-case} is
|
|
1524 non-@code{nil}, it ignores differences in case as well.
|
|
1525
|
|
1526 @node Dired, Misc File Ops, Comparing Files, Files
|
|
1527 @section Dired, the Directory Editor
|
|
1528 @cindex Dired
|
|
1529 @cindex deletion (of files)
|
|
1530
|
|
1531 Dired makes it easy to delete or visit many of the files in a single
|
|
1532 directory at once. It creates an Emacs buffer containing a listing of the
|
|
1533 directory. You can use the normal Emacs commands to move around in this
|
|
1534 buffer and special Dired commands to operate on the files.
|
|
1535
|
|
1536 @menu
|
|
1537 * Enter: Dired Enter. How to invoke Dired.
|
|
1538 * Edit: Dired Edit. Editing the Dired buffer.
|
|
1539 * Deletion: Dired Deletion. Deleting files with Dired.
|
|
1540 * Immed: Dired Immed. Other file operations through Dired.
|
|
1541 @end menu
|
|
1542
|
|
1543 @node Dired Enter, Dired Edit, Dired, Dired
|
|
1544 @subsection Entering Dired
|
|
1545
|
|
1546 @findex dired
|
|
1547 @kindex C-x d
|
|
1548 @vindex dired-listing-switches
|
|
1549 To invoke dired, type @kbd{C-x d} or @kbd{M-x dired}. The command reads a
|
|
1550 directory name or wildcard file name pattern as a minibuffer argument just
|
|
1551 like the @code{list-directory} command, @kbd{C-x C-d}. Where @code{dired}
|
|
1552 differs from @code{list-directory} is in naming the buffer after the
|
|
1553 directory name or the wildcard pattern used for the listing, and putting
|
|
1554 the buffer into Dired mode so that the special commands of Dired are
|
|
1555 available in it. The variable @code{dired-listing-switches} is a string
|
|
1556 used as an argument to @code{ls} in making the directory; this string
|
|
1557 @i{must} contain @samp{-l}.
|
|
1558
|
|
1559 @findex dired-other-window
|
|
1560 @kindex C-x 4 d
|
|
1561 To display the Dired buffer in another window rather than in the selected
|
|
1562 window, use @kbd{C-x 4 d} (@code{dired-other-window)} instead of @kbd{C-x d}.
|
|
1563
|
|
1564 @node Dired Edit, Dired Deletion, Dired Enter, Dired
|
|
1565 @subsection Editing in Dired
|
|
1566
|
|
1567 Once the Dired buffer exists, you can switch freely between it and other
|
|
1568 Emacs buffers. Whenever the Dired buffer is selected, certain special
|
|
1569 commands are provided that operate on files that are listed. The Dired
|
|
1570 buffer is ``read-only'', and inserting text in it is not useful, so
|
|
1571 ordinary printing characters such as @kbd{d} and @kbd{x} are used for Dired
|
|
1572 commands. Most Dired commands operate on the file described by the line
|
|
1573 that point is on. Some commands perform operations immediately; others
|
|
1574 ``flag'' a file to be operated on later.
|
|
1575
|
|
1576 Most Dired commands that operate on the current line's file also treat a
|
|
1577 numeric argument as a repeat count, meaning to act on the files of the
|
|
1578 next few lines. A negative argument means to operate on the files of the
|
|
1579 preceding lines, and leave point on the first of those lines.
|
|
1580
|
|
1581 All the usual Emacs cursor motion commands are available in Dired
|
|
1582 buffers. Some special purpose commands are also provided. The keys
|
|
1583 @kbd{C-n} and @kbd{C-p} are redefined so that they try to position
|
|
1584 the cursor at the beginning of the filename on the line, rather than
|
|
1585 at the beginning of the line.
|
|
1586
|
|
1587 For extra convenience, @key{SPC} and @kbd{n} in Dired are equivalent to
|
|
1588 @kbd{C-n}. @kbd{p} is equivalent to @kbd{C-p}. Moving by lines is done so
|
|
1589 often in Dired that it deserves to be easy to type. @key{DEL} (move up and
|
|
1590 unflag) is often useful simply for moving up.@refill
|
|
1591
|
|
1592 The @kbd{g} command in Dired runs @code{revert-buffer} to reinitialize
|
|
1593 the buffer from the actual disk directory and show any changes made in the
|
|
1594 directory by programs other than Dired. All deletion flags in the Dired
|
|
1595 buffer are lost when this is done.
|
|
1596
|
|
1597 @node Dired Deletion, Dired Immed, Dired Edit, Dired
|
|
1598 @subsection Deleting Files With Dired
|
|
1599
|
|
1600 The primary use of Dired is to flag files for deletion and then delete
|
|
1601 them.
|
|
1602
|
|
1603 @table @kbd
|
|
1604 @item d
|
|
1605 Flag this file for deletion.
|
|
1606 @item u
|
|
1607 Remove deletion-flag on this line.
|
|
1608 @item @key{DEL}
|
|
1609 Remove deletion-flag on previous line, moving point to that line.
|
|
1610 @item x
|
|
1611 Delete the files that are flagged for deletion.
|
|
1612 @item #
|
|
1613 Flag all auto-save files (files whose names start and end with @samp{#})
|
|
1614 for deletion (@pxref{Auto Save}).
|
|
1615 @item ~
|
|
1616 Flag all backup files (files whose names end with @samp{~}) for deletion
|
|
1617 (@pxref{Backup}).
|
|
1618 @item .@: @r{(Period)}
|
|
1619 Flag excess numeric backup files for deletion. The oldest and newest
|
|
1620 few backup files of any one file are exempt; the middle ones are flagged.
|
|
1621 @end table
|
|
1622
|
|
1623 You can flag a file for deletion by moving to the line describing the
|
|
1624 file and typing @kbd{d} or @kbd{C-d}. The deletion flag is visible as a
|
|
1625 @samp{D} at the beginning of the line. Point is moved to the beginning of
|
|
1626 the next line, so that repeated @kbd{d} commands flag successive files.
|
|
1627
|
|
1628 The files are flagged for deletion rather than deleted immediately to
|
|
1629 avoid the danger of deleting a file accidentally. Until you direct Dired
|
|
1630 to delete the flagged files, you can remove deletion flags using the
|
|
1631 commands @kbd{u} and @key{DEL}. @kbd{u} works just like @kbd{d}, but
|
|
1632 removes flags rather than making flags. @key{DEL} moves upward, removing
|
|
1633 flags; it is like @kbd{u} with numeric argument automatically negated.
|
|
1634
|
|
1635 To delete the flagged files, type @kbd{x}. This command first displays a
|
|
1636 list of all the file names flagged for deletion, and requests confirmation
|
|
1637 with @kbd{yes}. Once you confirm, all the flagged files are deleted, and their
|
|
1638 lines are deleted from the text of the Dired buffer. The shortened Dired
|
|
1639 buffer remains selected. If you answer @kbd{no} or quit with @kbd{C-g}, you
|
|
1640 return immediately to Dired, with the deletion flags still present and no
|
|
1641 files actually deleted.
|
|
1642
|
|
1643 The @kbd{#}, @kbd{~}, and @kbd{.} commands flag many files for
|
|
1644 deletion, based on their names. These commands are useful precisely
|
|
1645 because they do not actually delete any files; you can remove the
|
|
1646 deletion flags from any flagged files that you really wish to keep.@refill
|
|
1647
|
|
1648 @kbd{#} flags for deletion all files that appear to have been made by
|
|
1649 auto-saving (that is, files whose names begin and end with @samp{#}).
|
|
1650 @kbd{~} flags for deletion all files that appear to have been made as
|
|
1651 backups for files that were edited (that is, files whose names end with
|
|
1652 @samp{~}).
|
|
1653
|
|
1654 @vindex dired-kept-versions
|
|
1655 @kbd{.} (Period) flags just some of the backup files for deletion: only
|
|
1656 numeric backups that are not among the oldest few nor the newest few
|
|
1657 backups of any one file. Normally @code{dired-kept-versions} (not
|
|
1658 @code{kept-new-versions}; that applies only when saving) specifies the
|
|
1659 number of newest versions of each file to keep, and
|
|
1660 @code{kept-old-versions} specifies the number of oldest versions to keep.
|
|
1661 Period with a positive numeric argument, as in @kbd{C-u 3 .}, specifies the
|
|
1662 number of newest versions to keep, overriding @code{dired-kept-versions}.
|
|
1663 A negative numeric argument overrides @code{kept-old-versions}, using minus
|
|
1664 the value of the argument to specify the number of oldest versions of each
|
|
1665 file to keep.@refill
|
|
1666
|
|
1667 @node Dired Immed, , Dired Deletion, Dired
|
|
1668 @subsection Immediate File Operations in Dired
|
|
1669
|
|
1670 Some file operations in Dired take place immediately when they are
|
|
1671 requested.
|
|
1672
|
|
1673 @table @kbd
|
296
|
1674 @item C
|
0
|
1675 Copies the file described on the current line. You must supply a file name
|
|
1676 to copy to, using the minibuffer.
|
|
1677 @item f
|
|
1678 Visits the file described on the current line. It is just like typing
|
|
1679 @kbd{C-x C-f} and supplying that file name. If the file on this line is a
|
|
1680 subdirectory, @kbd{f} actually causes Dired to be invoked on that
|
|
1681 subdirectory. @xref{Visiting}.
|
|
1682 @item o
|
|
1683 Like @kbd{f}, but uses another window to display the file's buffer. The
|
|
1684 Dired buffer remains visible in the first window. This is like using
|
|
1685 @kbd{C-x 4 C-f} to visit the file. @xref{Windows}.
|
296
|
1686 @item R
|
0
|
1687 Renames the file described on the current line. You must supply a file
|
|
1688 name to rename to, using the minibuffer.
|
|
1689 @item v
|
|
1690 Views the file described on this line using @kbd{M-x view-file}. Viewing a
|
|
1691 file is like visiting it, but is slanted toward moving around in the file
|
|
1692 conveniently and does not allow changing the file. @xref{Misc File
|
|
1693 Ops,View File}. Viewing a file that is a directory runs Dired on that
|
|
1694 directory.@refill
|
|
1695 @end table
|
|
1696
|
|
1697 @node Misc File Ops, , Dired, Files
|
|
1698 @section Miscellaneous File Operations
|
|
1699
|
|
1700 Emacs has commands for performing many other operations on files.
|
|
1701 All operate on one file; they do not accept wildcard file names.
|
|
1702
|
|
1703 @findex add-name-to-file
|
|
1704 You can use the command @kbd{M-x add-name-to-file} to add a name to an
|
|
1705 existing file without removing the old name. The new name must belong
|
|
1706 on the file system that the file is on.
|
|
1707
|
|
1708 @findex append-to-file
|
|
1709 @kbd{M-x append-to-file} adds the text of the region to the end of the
|
|
1710 specified file.
|
|
1711
|
|
1712 @findex copy-file
|
|
1713 @cindex copying files
|
|
1714 @kbd{M-x copy-file} reads the file @var{old} and writes a new file
|
|
1715 named @var{new} with the same contents. Confirmation is required if a
|
|
1716 file named @var{new} already exists, because copying overwrites the old
|
|
1717 contents of the file @var{new}.
|
|
1718
|
|
1719 @findex delete-file
|
|
1720 @cindex deletion (of files)
|
|
1721 @kbd{M-x delete-file} deletes a specified file, like the @code{rm}
|
|
1722 command in the shell. If you are deleting many files in one directory, it
|
|
1723 may be more convenient to use Dired (@pxref{Dired}).
|
|
1724
|
|
1725 @findex insert-file
|
|
1726 @kbd{M-x insert-file} inserts a copy of the contents of a specified
|
|
1727 file into the current buffer at point, leaving point unchanged before the
|
|
1728 contents and the mark after them. @xref{Mark}.
|
|
1729
|
|
1730 @findex make-symbolic-link
|
|
1731 @kbd{M-x make-symbolic-link} reads two file names @var{old} and
|
|
1732 @var{linkname}, and then creates a symbolic link named @var{linkname}
|
|
1733 and pointing at @var{old}. Future attempts to open file
|
|
1734 @var{linkname} will then refer to the file named @var{old} at the time
|
|
1735 the opening is done, or will result in an error if the name @var{old} is
|
|
1736 not in use at that time. Confirmation is required if you create the
|
|
1737 link while @var{linkname} is in use. Note that not all systems support
|
|
1738 symbolic links.
|
|
1739
|
|
1740 @findex rename-file
|
|
1741 @kbd{M-x rename-file} reads two file names @var{old} and @var{new} using
|
|
1742 the minibuffer, then renames file @var{old} as @var{new}. If a file named
|
|
1743 @var{new} already exists, you must confirm with @kbd{yes} or renaming is not
|
|
1744 done; this is because renaming causes the previous meaning of the
|
|
1745 name @var{new} to be lost. If @var{old} and @var{new} are on different
|
|
1746 file systems, the file @var{old} is copied and deleted.
|
|
1747
|
|
1748 @findex view-file
|
|
1749 @cindex viewing
|
|
1750 @kbd{M-x view-file} allows you to scan or read a file by sequential
|
|
1751 screenfuls. It reads a file name argument using the minibuffer. After
|
|
1752 reading the file into an Emacs buffer, @code{view-file} reads and displays
|
|
1753 one windowful. You can then type @key{SPC} to scroll forward one window,
|
|
1754 or @key{DEL} to scroll backward. Various other commands are provided for
|
|
1755 moving around in the file, but none for changing it; type @kbd{C-h} while
|
|
1756 viewing a file for a list of them. Most commands are the default Emacs
|
|
1757 cursor motion commands. To exit from viewing, type @kbd{C-c}.
|