Mercurial > emacs
annotate man/files.texi @ 45098:06120f91eb06
(eshell-modify-global-environment): Added this customization variable,
which will cause any "export" commands within any eshell buffer to
modify the global Emacs environment. It defaults to nil, which means
that such commands will only modify that Eshell buffer's environment.
(eshell-var-initialize): Initialize `eshell-modify-global-environment'.
author | John Wiegley <johnw@newartisans.com> |
---|---|
date | Fri, 03 May 2002 20:43:53 +0000 |
parents | 1fdf19dbc2e8 |
children | 58c783d19649 |
rev | line source |
---|---|
25829 | 1 @c This is part of the Emacs manual. |
37795 | 2 @c Copyright (C) 1985,86,87,93,94,95,97,99, 2000, 2001 |
3 @c Free Software Foundation, Inc. | |
25829 | 4 @c See file emacs.texi for copying conditions. |
5 @node Files, Buffers, Fixit, Top | |
6 @chapter File Handling | |
7 @cindex files | |
8 | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
9 The operating system stores data permanently in named @dfn{files}, so |
25829 | 10 most of the text you edit with Emacs comes from a file and is ultimately |
11 stored in a file. | |
12 | |
13 To edit a file, you must tell Emacs to read the file and prepare a | |
14 buffer containing a copy of the file's text. This is called | |
15 @dfn{visiting} the file. Editing commands apply directly to text in the | |
16 buffer; that is, to the copy inside Emacs. Your changes appear in the | |
17 file itself only when you @dfn{save} the buffer back into the file. | |
18 | |
19 In addition to visiting and saving files, Emacs can delete, copy, | |
20 rename, and append to files, keep multiple versions of them, and operate | |
21 on file directories. | |
22 | |
23 @menu | |
24 * File Names:: How to type and edit file-name arguments. | |
25 * Visiting:: Visiting a file prepares Emacs to edit the file. | |
26 * Saving:: Saving makes your changes permanent. | |
27 * Reverting:: Reverting cancels all the changes not saved. | |
28 * Auto Save:: Auto Save periodically protects against loss of data. | |
29 * File Aliases:: Handling multiple names for one file. | |
30 * Version Control:: Version control systems (RCS, CVS and SCCS). | |
31 * Directories:: Creating, deleting, and listing file directories. | |
32 * Comparing Files:: Finding where two files differ. | |
33 * Misc File Ops:: Other things you can do on files. | |
34 * Compressed Files:: Accessing compressed files. | |
28123
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
35 * File Archives:: Operating on tar, zip, jar etc. archive files. |
25829 | 36 * Remote Files:: Accessing files on other sites. |
37 * Quoted File Names:: Quoting special characters in file names. | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
38 * File Name Cache:: Completion against a list of files you often use. |
28526
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
39 * File Conveniences:: Convenience Features for Finding Files. |
25829 | 40 @end menu |
41 | |
42 @node File Names | |
43 @section File Names | |
44 @cindex file names | |
45 | |
46 Most Emacs commands that operate on a file require you to specify the | |
47 file name. (Saving and reverting are exceptions; the buffer knows which | |
48 file name to use for them.) You enter the file name using the | |
38739 | 49 minibuffer (@pxref{Minibuffer}). @dfn{Completion} is available |
50 (@pxref{Completion}) to make it easier to specify long file names. When | |
38310
926054175878
(Visiting, File Names): Mention that completion ignores some file names,
Eli Zaretskii <eliz@gnu.org>
parents:
38064
diff
changeset
|
51 completing file names, Emacs ignores those whose file-name extensions |
38739 | 52 appear in the variable @code{completion-ignored-extensions}; see |
38310
926054175878
(Visiting, File Names): Mention that completion ignores some file names,
Eli Zaretskii <eliz@gnu.org>
parents:
38064
diff
changeset
|
53 @ref{Completion Options}. |
25829 | 54 |
55 For most operations, there is a @dfn{default file name} which is used | |
56 if you type just @key{RET} to enter an empty argument. Normally the | |
57 default file name is the name of the file visited in the current buffer; | |
58 this makes it easy to operate on that file with any of the Emacs file | |
59 commands. | |
60 | |
61 @vindex default-directory | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
62 Each buffer has a default directory which is normally the same as the |
25829 | 63 directory of the file visited in that buffer. When you enter a file |
64 name without a directory, the default directory is used. If you specify | |
65 a directory in a relative fashion, with a name that does not start with | |
66 a slash, it is interpreted with respect to the default directory. The | |
67 default directory is kept in the variable @code{default-directory}, | |
68 which has a separate value in every buffer. | |
69 | |
70 For example, if the default file name is @file{/u/rms/gnu/gnu.tasks} then | |
71 the default directory is @file{/u/rms/gnu/}. If you type just @samp{foo}, | |
72 which does not specify a directory, it is short for @file{/u/rms/gnu/foo}. | |
73 @samp{../.login} would stand for @file{/u/rms/.login}. @samp{new/foo} | |
74 would stand for the file name @file{/u/rms/gnu/new/foo}. | |
75 | |
76 @findex cd | |
77 @findex pwd | |
38870
d44abb4e68b2
Don't use "print" for displaying a message.
Richard M. Stallman <rms@gnu.org>
parents:
38768
diff
changeset
|
78 The command @kbd{M-x pwd} displays the current buffer's default |
25829 | 79 directory, and the command @kbd{M-x cd} sets it (to a value read using |
80 the minibuffer). A buffer's default directory changes only when the | |
81 @code{cd} command is used. A file-visiting buffer's default directory | |
38739 | 82 is initialized to the directory of the file that is visited in that buffer. If |
25829 | 83 you create a buffer with @kbd{C-x b}, its default directory is copied |
84 from that of the buffer that was current at the time. | |
85 | |
86 @vindex insert-default-directory | |
87 The default directory actually appears in the minibuffer when the | |
88 minibuffer becomes active to read a file name. This serves two | |
89 purposes: it @emph{shows} you what the default is, so that you can type | |
90 a relative file name and know with certainty what it will mean, and it | |
91 allows you to @emph{edit} the default to specify a different directory. | |
92 This insertion of the default directory is inhibited if the variable | |
93 @code{insert-default-directory} is set to @code{nil}. | |
94 | |
95 Note that it is legitimate to type an absolute file name after you | |
96 enter the minibuffer, ignoring the presence of the default directory | |
97 name as part of the text. The final minibuffer contents may look | |
98 invalid, but that is not so. For example, if the minibuffer starts out | |
99 with @samp{/usr/tmp/} and you add @samp{/x1/rms/foo}, you get | |
100 @samp{/usr/tmp//x1/rms/foo}; but Emacs ignores everything through the | |
101 first slash in the double slash; the result is @samp{/x1/rms/foo}. | |
102 @xref{Minibuffer File}. | |
103 | |
36324
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
104 @cindex environment variables in file names |
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
105 @cindex expansion of environment variables |
44086
5da94d5db448
(File Names): Add an index entry for $ in file names. Add an anchor.
Eli Zaretskii <eliz@gnu.org>
parents:
43682
diff
changeset
|
106 @cindex @code{$} in file names |
44327
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
107 @anchor{File Names with $} |
25829 | 108 @samp{$} in a file name is used to substitute environment variables. |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
109 For example, if you have used the shell command @command{export |
29107 | 110 FOO=rms/hacks} to set up an environment variable named @env{FOO}, then |
25829 | 111 you can use @file{/u/$FOO/test.c} or @file{/u/$@{FOO@}/test.c} as an |
112 abbreviation for @file{/u/rms/hacks/test.c}. The environment variable | |
113 name consists of all the alphanumeric characters after the @samp{$}; | |
114 alternatively, it may be enclosed in braces after the @samp{$}. Note | |
115 that shell commands to set environment variables affect Emacs only if | |
116 done before Emacs is started. | |
117 | |
36324
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
118 @cindex home directory shorthand |
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
119 You can use the @file{~/} in a file name to mean your home directory, |
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
120 or @file{~@var{user-id}/} to mean the home directory of a user whose |
36325
cf1b9eaadeaf
(File Names): Add a note about ~/ peculiarities on DOS/Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
36324
diff
changeset
|
121 login name is @code{user-id}. (On DOS and Windows systems, where a user |
cf1b9eaadeaf
(File Names): Add a note about ~/ peculiarities on DOS/Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
36324
diff
changeset
|
122 doesn't have a home directory, Emacs substitutes @file{~/} with the |
cf1b9eaadeaf
(File Names): Add a note about ~/ peculiarities on DOS/Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
36324
diff
changeset
|
123 value of the environment variable @code{HOME}; see @ref{General |
cf1b9eaadeaf
(File Names): Add a note about ~/ peculiarities on DOS/Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
36324
diff
changeset
|
124 Variables}.) |
36324
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
125 |
25829 | 126 To access a file with @samp{$} in its name, type @samp{$$}. This pair |
127 is converted to a single @samp{$} at the same time as variable | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
128 substitution is performed for a single @samp{$}. Alternatively, quote the |
36324
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
129 whole file name with @samp{/:} (@pxref{Quoted File Names}). File names |
63c47fc9df21
(File Names): Add documentation of the tilde expansion in file names.
Eli Zaretskii <eliz@gnu.org>
parents:
36323
diff
changeset
|
130 which begin with a literal @samp{~} should also be quoted with @samp{/:}. |
25829 | 131 |
132 @findex substitute-in-file-name | |
133 The Lisp function that performs the substitution is called | |
134 @code{substitute-in-file-name}. The substitution is performed only on | |
135 file names read as such using the minibuffer. | |
136 | |
137 You can include non-ASCII characters in file names if you set the | |
138 variable @code{file-name-coding-system} to a non-@code{nil} value. | |
139 @xref{Specify Coding}. | |
140 | |
141 @node Visiting | |
142 @section Visiting Files | |
143 @cindex visiting files | |
144 | |
145 @table @kbd | |
146 @item C-x C-f | |
147 Visit a file (@code{find-file}). | |
148 @item C-x C-r | |
149 Visit a file for viewing, without allowing changes to it | |
150 (@code{find-file-read-only}). | |
151 @item C-x C-v | |
152 Visit a different file instead of the one visited last | |
153 (@code{find-alternate-file}). | |
154 @item C-x 4 f | |
155 Visit a file, in another window (@code{find-file-other-window}). Don't | |
156 alter what is displayed in the selected window. | |
157 @item C-x 5 f | |
158 Visit a file, in a new frame (@code{find-file-other-frame}). Don't | |
159 alter what is displayed in the selected frame. | |
160 @item M-x find-file-literally | |
161 Visit a file with no conversion of the contents. | |
162 @end table | |
163 | |
164 @cindex files, visiting and saving | |
165 @cindex saving files | |
38739 | 166 @dfn{Visiting} a file means copying its contents into an Emacs |
167 buffer so you can edit them. Emacs makes a new buffer for each file | |
168 that you visit. We often say that this buffer ``is visiting'' that | |
169 file, or that the buffer's ``visited file'' is that file. Emacs | |
170 constructs the buffer name from the file name by throwing away the | |
171 directory, keeping just the name proper. For example, a file named | |
172 @file{/usr/rms/emacs.tex} would get a buffer named @samp{emacs.tex}. | |
173 If there is already a buffer with that name, Emacs constructs a unique | |
174 name---the normal method is to append @samp{<2>}, @samp{<3>}, and so | |
175 on, but you can select other methods (@pxref{Uniquify}). | |
25829 | 176 |
177 Each window's mode line shows the name of the buffer that is being displayed | |
178 in that window, so you can always tell what buffer you are editing. | |
179 | |
180 The changes you make with editing commands are made in the Emacs | |
181 buffer. They do not take effect in the file that you visited, or any | |
182 place permanent, until you @dfn{save} the buffer. Saving the buffer | |
183 means that Emacs writes the current contents of the buffer into its | |
184 visited file. @xref{Saving}. | |
185 | |
186 @cindex modified (buffer) | |
187 If a buffer contains changes that have not been saved, we say the | |
188 buffer is @dfn{modified}. This is important because it implies that | |
189 some changes will be lost if the buffer is not saved. The mode line | |
190 displays two stars near the left margin to indicate that the buffer is | |
191 modified. | |
192 | |
193 @kindex C-x C-f | |
194 @findex find-file | |
195 To visit a file, use the command @kbd{C-x C-f} (@code{find-file}). Follow | |
196 the command with the name of the file you wish to visit, terminated by a | |
197 @key{RET}. | |
198 | |
199 The file name is read using the minibuffer (@pxref{Minibuffer}), with | |
200 defaulting and completion in the standard manner (@pxref{File Names}). | |
38310
926054175878
(Visiting, File Names): Mention that completion ignores some file names,
Eli Zaretskii <eliz@gnu.org>
parents:
38064
diff
changeset
|
201 While in the minibuffer, you can abort @kbd{C-x C-f} by typing |
926054175878
(Visiting, File Names): Mention that completion ignores some file names,
Eli Zaretskii <eliz@gnu.org>
parents:
38064
diff
changeset
|
202 @kbd{C-g}. File-name completion ignores certain filenames; for more |
926054175878
(Visiting, File Names): Mention that completion ignores some file names,
Eli Zaretskii <eliz@gnu.org>
parents:
38064
diff
changeset
|
203 about this, see @ref{Completion Options}. |
25829 | 204 |
35647
d1a5bb6d3811
(Visiting): Document the file selection dialog popped by C-x C-f.
Eli Zaretskii <eliz@gnu.org>
parents:
35620
diff
changeset
|
205 @cindex file selection dialog |
d1a5bb6d3811
(Visiting): Document the file selection dialog popped by C-x C-f.
Eli Zaretskii <eliz@gnu.org>
parents:
35620
diff
changeset
|
206 When Emacs is built with a suitable GUI toolkit, it pops up the |
d1a5bb6d3811
(Visiting): Document the file selection dialog popped by C-x C-f.
Eli Zaretskii <eliz@gnu.org>
parents:
35620
diff
changeset
|
207 standard File Selection dialog of that toolkit instead of prompting for |
d1a5bb6d3811
(Visiting): Document the file selection dialog popped by C-x C-f.
Eli Zaretskii <eliz@gnu.org>
parents:
35620
diff
changeset
|
208 the file name in the minibuffer. On Unix and GNU/Linux platforms, Emacs |
d1a5bb6d3811
(Visiting): Document the file selection dialog popped by C-x C-f.
Eli Zaretskii <eliz@gnu.org>
parents:
35620
diff
changeset
|
209 does that when built with LessTif and Motif toolkits; on MS-Windows, the |
d1a5bb6d3811
(Visiting): Document the file selection dialog popped by C-x C-f.
Eli Zaretskii <eliz@gnu.org>
parents:
35620
diff
changeset
|
210 GUI version does that by default. |
d1a5bb6d3811
(Visiting): Document the file selection dialog popped by C-x C-f.
Eli Zaretskii <eliz@gnu.org>
parents:
35620
diff
changeset
|
211 |
25829 | 212 Your confirmation that @kbd{C-x C-f} has completed successfully is the |
213 appearance of new text on the screen and a new buffer name in the mode | |
214 line. If the specified file does not exist and could not be created, or | |
215 cannot be read, then you get an error, with an error message displayed | |
216 in the echo area. | |
217 | |
218 If you visit a file that is already in Emacs, @kbd{C-x C-f} does not make | |
219 another copy. It selects the existing buffer containing that file. | |
220 However, before doing so, it checks that the file itself has not changed | |
221 since you visited or saved it last. If the file has changed, a warning | |
38870
d44abb4e68b2
Don't use "print" for displaying a message.
Richard M. Stallman <rms@gnu.org>
parents:
38768
diff
changeset
|
222 message is shown. @xref{Interlocking,,Simultaneous Editing}. |
25829 | 223 |
37793
ec57e2733712
(Visiting): Document that files larger than the buffer size limit cannot
Eli Zaretskii <eliz@gnu.org>
parents:
37349
diff
changeset
|
224 @cindex maximum buffer size exceeded, error message |
ec57e2733712
(Visiting): Document that files larger than the buffer size limit cannot
Eli Zaretskii <eliz@gnu.org>
parents:
37349
diff
changeset
|
225 Since Emacs reads the visited file in its entirety, files whose size |
ec57e2733712
(Visiting): Document that files larger than the buffer size limit cannot
Eli Zaretskii <eliz@gnu.org>
parents:
37349
diff
changeset
|
226 is larger than the maximum Emacs buffer size (@pxref{Buffers}) cannot be |
38870
d44abb4e68b2
Don't use "print" for displaying a message.
Richard M. Stallman <rms@gnu.org>
parents:
38768
diff
changeset
|
227 visited; if you try, Emacs will display an error message saying that the |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
228 maximum buffer size has been exceeded. |
37793
ec57e2733712
(Visiting): Document that files larger than the buffer size limit cannot
Eli Zaretskii <eliz@gnu.org>
parents:
37349
diff
changeset
|
229 |
25829 | 230 @cindex creating files |
38870
d44abb4e68b2
Don't use "print" for displaying a message.
Richard M. Stallman <rms@gnu.org>
parents:
38768
diff
changeset
|
231 What if you want to create a new file? Just visit it. Emacs displays |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
232 @samp{(New file)} in the echo area, but in other respects behaves as if |
25829 | 233 you had visited an existing empty file. If you make any changes and |
234 save them, the file is created. | |
235 | |
236 Emacs recognizes from the contents of a file which convention it uses | |
237 to separate lines---newline (used on GNU/Linux and on Unix), | |
238 carriage-return linefeed (used on Microsoft systems), or just | |
239 carriage-return (used on the Macintosh)---and automatically converts the | |
240 contents to the normal Emacs convention, which is that the newline | |
241 character separates lines. This is a part of the general feature of | |
242 coding system conversion (@pxref{Coding Systems}), and makes it possible | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
243 to edit files imported from different operating systems with |
25829 | 244 equal convenience. If you change the text and save the file, Emacs |
245 performs the inverse conversion, changing newlines back into | |
246 carriage-return linefeed or just carriage-return if appropriate. | |
247 | |
248 @vindex find-file-run-dired | |
249 If the file you specify is actually a directory, @kbd{C-x C-f} invokes | |
250 Dired, the Emacs directory browser, so that you can ``edit'' the contents | |
251 of the directory (@pxref{Dired}). Dired is a convenient way to delete, | |
252 look at, or operate on the files in the directory. However, if the | |
253 variable @code{find-file-run-dired} is @code{nil}, then it is an error | |
254 to try to visit a directory. | |
255 | |
36326
70c08680c0bf
(Visiting): Add a note about visiting file archives.
Eli Zaretskii <eliz@gnu.org>
parents:
36325
diff
changeset
|
256 Files which are actually collections of other files, or @dfn{file |
70c08680c0bf
(Visiting): Add a note about visiting file archives.
Eli Zaretskii <eliz@gnu.org>
parents:
36325
diff
changeset
|
257 archives}, are visited in special modes which invoke a Dired-like |
70c08680c0bf
(Visiting): Add a note about visiting file archives.
Eli Zaretskii <eliz@gnu.org>
parents:
36325
diff
changeset
|
258 environment to allow operations on archive members. @xref{File |
70c08680c0bf
(Visiting): Add a note about visiting file archives.
Eli Zaretskii <eliz@gnu.org>
parents:
36325
diff
changeset
|
259 Archives}, for more about these features. |
70c08680c0bf
(Visiting): Add a note about visiting file archives.
Eli Zaretskii <eliz@gnu.org>
parents:
36325
diff
changeset
|
260 |
28327
f7b17a6af3db
(Visiting): List wildcard chars. Mention find-file-wildcards.
Dave Love <fx@gnu.org>
parents:
28123
diff
changeset
|
261 @cindex wildcard characters in file names |
f7b17a6af3db
(Visiting): List wildcard chars. Mention find-file-wildcards.
Dave Love <fx@gnu.org>
parents:
28123
diff
changeset
|
262 @vindex find-file-wildcards |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
263 If the file name you specify contains shell-style wildcard characters, |
38739 | 264 Emacs visits all the files that match it. Wildcards include @samp{?}, |
265 @samp{*}, and @samp{[@dots{}]} sequences. @xref{Quoted File Names}, for | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
266 information on how to visit a file whose name actually contains wildcard |
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
267 characters. You can disable the wildcard feature by customizing |
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
268 @code{find-file-wildcards}. |
25829 | 269 |
270 If you visit a file that the operating system won't let you modify, | |
271 Emacs makes the buffer read-only, so that you won't go ahead and make | |
272 changes that you'll have trouble saving afterward. You can make the | |
273 buffer writable with @kbd{C-x C-q} (@code{vc-toggle-read-only}). | |
274 @xref{Misc Buffer}. | |
275 | |
276 @kindex C-x C-r | |
277 @findex find-file-read-only | |
278 Occasionally you might want to visit a file as read-only in order to | |
279 protect yourself from entering changes accidentally; do so by visiting | |
280 the file with the command @kbd{C-x C-r} (@code{find-file-read-only}). | |
281 | |
282 @kindex C-x C-v | |
283 @findex find-alternate-file | |
284 If you visit a nonexistent file unintentionally (because you typed the | |
285 wrong file name), use the @kbd{C-x C-v} command | |
286 (@code{find-alternate-file}) to visit the file you really wanted. | |
287 @kbd{C-x C-v} is similar to @kbd{C-x C-f}, but it kills the current | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
288 buffer (after first offering to save it if it is modified). When |
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
289 @kbd{C-x C-v} reads the file name to visit, it inserts the entire |
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
290 default file name in the buffer, with point just after the directory |
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
291 part; this is convenient if you made a slight error in typing the name. |
25829 | 292 |
293 If you find a file which exists but cannot be read, @kbd{C-x C-f} | |
294 signals an error. | |
295 | |
296 @kindex C-x 4 f | |
297 @findex find-file-other-window | |
298 @kbd{C-x 4 f} (@code{find-file-other-window}) is like @kbd{C-x C-f} | |
299 except that the buffer containing the specified file is selected in another | |
300 window. The window that was selected before @kbd{C-x 4 f} continues to | |
301 show the same buffer it was already showing. If this command is used when | |
302 only one window is being displayed, that window is split in two, with one | |
303 window showing the same buffer as before, and the other one showing the | |
304 newly requested file. @xref{Windows}. | |
305 | |
306 @kindex C-x 5 f | |
307 @findex find-file-other-frame | |
308 @kbd{C-x 5 f} (@code{find-file-other-frame}) is similar, but opens a | |
309 new frame, or makes visible any existing frame showing the file you | |
310 seek. This feature is available only when you are using a window | |
311 system. @xref{Frames}. | |
312 | |
313 @findex find-file-literally | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
314 If you wish to edit a file as a sequence of ASCII characters with no special |
25829 | 315 encoding or conversion, use the @kbd{M-x find-file-literally} command. |
316 It visits a file, like @kbd{C-x C-f}, but does not do format conversion | |
317 (@pxref{Formatted Text}), character code conversion (@pxref{Coding | |
33559 | 318 Systems}), or automatic uncompression (@pxref{Compressed Files}), and |
319 does not add a final newline because of @code{require-final-newline}. | |
25829 | 320 If you already have visited the same file in the usual (non-literal) |
321 manner, this command asks you whether to visit it literally instead. | |
322 | |
323 @vindex find-file-hooks | |
324 @vindex find-file-not-found-hooks | |
325 Two special hook variables allow extensions to modify the operation of | |
326 visiting files. Visiting a file that does not exist runs the functions | |
327 in the list @code{find-file-not-found-hooks}; this variable holds a list | |
328 of functions, and the functions are called one by one (with no | |
329 arguments) until one of them returns non-@code{nil}. This is not a | |
330 normal hook, and the name ends in @samp{-hooks} rather than @samp{-hook} | |
331 to indicate that fact. | |
332 | |
38739 | 333 Successful visiting of any file, whether existing or not, calls the |
334 functions in the list @code{find-file-hooks}, with no arguments. | |
335 This variable is really a normal hook, but it has an abnormal name for | |
336 historical compatibility. In the case of a nonexistent file, the | |
337 @code{find-file-not-found-hooks} are run first. @xref{Hooks}. | |
25829 | 338 |
339 There are several ways to specify automatically the major mode for | |
340 editing the file (@pxref{Choosing Modes}), and to specify local | |
341 variables defined for that file (@pxref{File Variables}). | |
342 | |
343 @node Saving | |
344 @section Saving Files | |
345 | |
346 @dfn{Saving} a buffer in Emacs means writing its contents back into the file | |
347 that was visited in the buffer. | |
348 | |
349 @table @kbd | |
350 @item C-x C-s | |
38739 | 351 Save the current buffer in its visited file on disk (@code{save-buffer}). |
25829 | 352 @item C-x s |
353 Save any or all buffers in their visited files (@code{save-some-buffers}). | |
354 @item M-~ | |
355 Forget that the current buffer has been changed (@code{not-modified}). | |
29556 | 356 With prefix argument (@kbd{C-u}), mark the current buffer as changed. |
25829 | 357 @item C-x C-w |
38739 | 358 Save the current buffer as a specified file name (@code{write-file}). |
25829 | 359 @item M-x set-visited-file-name |
36316
d79558eaaecb
(Saveing): Fix "file the name". From Nelson H. F. Beebe
Eli Zaretskii <eliz@gnu.org>
parents:
36274
diff
changeset
|
360 Change the file name under which the current buffer will be saved. |
25829 | 361 @end table |
362 | |
363 @kindex C-x C-s | |
364 @findex save-buffer | |
365 When you wish to save the file and make your changes permanent, type | |
366 @kbd{C-x C-s} (@code{save-buffer}). After saving is finished, @kbd{C-x C-s} | |
367 displays a message like this: | |
368 | |
369 @example | |
370 Wrote /u/rms/gnu/gnu.tasks | |
371 @end example | |
372 | |
373 @noindent | |
374 If the selected buffer is not modified (no changes have been made in it | |
375 since the buffer was created or last saved), saving is not really done, | |
376 because it would have no effect. Instead, @kbd{C-x C-s} displays a message | |
377 like this in the echo area: | |
378 | |
379 @example | |
380 (No changes need to be saved) | |
381 @end example | |
382 | |
383 @kindex C-x s | |
384 @findex save-some-buffers | |
385 The command @kbd{C-x s} (@code{save-some-buffers}) offers to save any | |
386 or all modified buffers. It asks you what to do with each buffer. The | |
387 possible responses are analogous to those of @code{query-replace}: | |
388 | |
389 @table @kbd | |
390 @item y | |
391 Save this buffer and ask about the rest of the buffers. | |
392 @item n | |
393 Don't save this buffer, but ask about the rest of the buffers. | |
394 @item ! | |
395 Save this buffer and all the rest with no more questions. | |
396 @c following generates acceptable underfull hbox | |
397 @item @key{RET} | |
398 Terminate @code{save-some-buffers} without any more saving. | |
399 @item . | |
400 Save this buffer, then exit @code{save-some-buffers} without even asking | |
401 about other buffers. | |
402 @item C-r | |
403 View the buffer that you are currently being asked about. When you exit | |
404 View mode, you get back to @code{save-some-buffers}, which asks the | |
405 question again. | |
406 @item C-h | |
407 Display a help message about these options. | |
408 @end table | |
409 | |
410 @kbd{C-x C-c}, the key sequence to exit Emacs, invokes | |
411 @code{save-some-buffers} and therefore asks the same questions. | |
412 | |
413 @kindex M-~ | |
414 @findex not-modified | |
415 If you have changed a buffer but you do not want to save the changes, | |
416 you should take some action to prevent it. Otherwise, each time you use | |
417 @kbd{C-x s} or @kbd{C-x C-c}, you are liable to save this buffer by | |
418 mistake. One thing you can do is type @kbd{M-~} (@code{not-modified}), | |
419 which clears out the indication that the buffer is modified. If you do | |
420 this, none of the save commands will believe that the buffer needs to be | |
421 saved. (@samp{~} is often used as a mathematical symbol for `not'; thus | |
422 @kbd{M-~} is `not', metafied.) You could also use | |
423 @code{set-visited-file-name} (see below) to mark the buffer as visiting | |
424 a different file name, one which is not in use for anything important. | |
425 Alternatively, you can cancel all the changes made since the file was | |
426 visited or saved, by reading the text from the file again. This is | |
427 called @dfn{reverting}. @xref{Reverting}. You could also undo all the | |
428 changes by repeating the undo command @kbd{C-x u} until you have undone | |
429 all the changes; but reverting is easier. | |
430 | |
431 @findex set-visited-file-name | |
432 @kbd{M-x set-visited-file-name} alters the name of the file that the | |
433 current buffer is visiting. It reads the new file name using the | |
38739 | 434 minibuffer. Then it marks the buffer as visiting that file name, and |
435 changes the buffer name correspondingly. @code{set-visited-file-name} | |
436 does not save the buffer in the newly visited file; it just alters the | |
437 records inside Emacs in case you do save later. It also marks the | |
438 buffer as ``modified'' so that @kbd{C-x C-s} in that buffer | |
439 @emph{will} save. | |
25829 | 440 |
441 @kindex C-x C-w | |
442 @findex write-file | |
443 If you wish to mark the buffer as visiting a different file and save it | |
444 right away, use @kbd{C-x C-w} (@code{write-file}). It is precisely | |
445 equivalent to @code{set-visited-file-name} followed by @kbd{C-x C-s}. | |
446 @kbd{C-x C-s} used on a buffer that is not visiting a file has the | |
447 same effect as @kbd{C-x C-w}; that is, it reads a file name, marks the | |
448 buffer as visiting that file, and saves it there. The default file name in | |
449 a buffer that is not visiting a file is made by combining the buffer name | |
38739 | 450 with the buffer's default directory (@pxref{File Names}). |
25829 | 451 |
452 If the new file name implies a major mode, then @kbd{C-x C-w} switches | |
453 to that major mode, in most cases. The command | |
454 @code{set-visited-file-name} also does this. @xref{Choosing Modes}. | |
455 | |
456 If Emacs is about to save a file and sees that the date of the latest | |
457 version on disk does not match what Emacs last read or wrote, Emacs | |
458 notifies you of this fact, because it probably indicates a problem caused | |
459 by simultaneous editing and requires your immediate attention. | |
460 @xref{Interlocking,, Simultaneous Editing}. | |
461 | |
462 @vindex require-final-newline | |
36319
77c56d3f0b8f
(Saving): Update the documentation of require-final-newline.
Eli Zaretskii <eliz@gnu.org>
parents:
36316
diff
changeset
|
463 If the value of the variable @code{require-final-newline} is @code{t}, |
77c56d3f0b8f
(Saving): Update the documentation of require-final-newline.
Eli Zaretskii <eliz@gnu.org>
parents:
36316
diff
changeset
|
464 Emacs silently puts a newline at the end of any file that doesn't |
77c56d3f0b8f
(Saving): Update the documentation of require-final-newline.
Eli Zaretskii <eliz@gnu.org>
parents:
36316
diff
changeset
|
465 already end in one, every time a file is saved or written. If the value |
77c56d3f0b8f
(Saving): Update the documentation of require-final-newline.
Eli Zaretskii <eliz@gnu.org>
parents:
36316
diff
changeset
|
466 is @code{nil}, Emacs leaves the end of the file unchanged; if it's |
77c56d3f0b8f
(Saving): Update the documentation of require-final-newline.
Eli Zaretskii <eliz@gnu.org>
parents:
36316
diff
changeset
|
467 neither @code{nil} nor @code{t}, Emacs asks you whether to add a |
77c56d3f0b8f
(Saving): Update the documentation of require-final-newline.
Eli Zaretskii <eliz@gnu.org>
parents:
36316
diff
changeset
|
468 newline. The default is @code{nil}. |
25829 | 469 |
470 @menu | |
471 * Backup:: How Emacs saves the old version of your file. | |
472 * Interlocking:: How Emacs protects against simultaneous editing | |
473 of one file by two users. | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
474 * Shadowing: File Shadowing. |
36185 | 475 Copying files to "shadows" automatically. |
35524 | 476 * Time Stamps:: Emacs can update time stamps on saved files. |
25829 | 477 @end menu |
478 | |
479 @node Backup | |
480 @subsection Backup Files | |
481 @cindex backup file | |
482 @vindex make-backup-files | |
483 @vindex vc-make-backup-files | |
484 | |
485 On most operating systems, rewriting a file automatically destroys all | |
486 record of what the file used to contain. Thus, saving a file from Emacs | |
487 throws away the old contents of the file---or it would, except that | |
488 Emacs carefully copies the old contents to another file, called the | |
489 @dfn{backup} file, before actually saving. | |
490 | |
491 For most files, the variable @code{make-backup-files} determines | |
492 whether to make backup files. On most operating systems, its default | |
493 value is @code{t}, so that Emacs does write backup files. | |
494 | |
495 For files managed by a version control system (@pxref{Version | |
496 Control}), the variable @code{vc-make-backup-files} determines whether | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
497 to make backup files. By default it is @code{nil}, since backup files |
25829 | 498 are redundant when you store all the previous versions in a version |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
499 control system. @xref{General VC Options}. |
25829 | 500 |
28526
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
501 @vindex backup-enable-predicate |
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
502 @vindex temporary-file-directory |
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
503 @vindex small-temporary-file-directory |
25829 | 504 The default value of the @code{backup-enable-predicate} variable |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
505 prevents backup files being written for files in the directories used |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
506 for temporary files, specified by @code{temporary-file-directory} or |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
507 @code{small-temporary-file-directory}. |
25829 | 508 |
509 At your option, Emacs can keep either a single backup file or a series of | |
510 numbered backup files for each file that you edit. | |
511 | |
512 Emacs makes a backup for a file only the first time the file is saved | |
513 from one buffer. No matter how many times you save a file, its backup file | |
514 continues to contain the contents from before the file was visited. | |
515 Normally this means that the backup file contains the contents from before | |
516 the current editing session; however, if you kill the buffer and then visit | |
517 the file again, a new backup file will be made by the next save. | |
518 | |
519 You can also explicitly request making another backup file from a | |
520 buffer even though it has already been saved at least once. If you save | |
521 the buffer with @kbd{C-u C-x C-s}, the version thus saved will be made | |
522 into a backup file if you save the buffer again. @kbd{C-u C-u C-x C-s} | |
523 saves the buffer, but first makes the previous file contents into a new | |
524 backup file. @kbd{C-u C-u C-u C-x C-s} does both things: it makes a | |
38739 | 525 backup from the previous contents, and arranges to make another from the |
526 newly saved contents if you save again. | |
25829 | 527 |
528 @menu | |
529 * Names: Backup Names. How backup files are named; | |
530 choosing single or numbered backup files. | |
531 * Deletion: Backup Deletion. Emacs deletes excess numbered backups. | |
532 * Copying: Backup Copying. Backups can be made by copying or renaming. | |
533 @end menu | |
534 | |
535 @node Backup Names | |
536 @subsubsection Single or Numbered Backups | |
537 | |
538 If you choose to have a single backup file (this is the default), | |
28526
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
539 the backup file's name is normally constructed by appending @samp{~} to the |
25829 | 540 file name being edited; thus, the backup file for @file{eval.c} would |
541 be @file{eval.c~}. | |
542 | |
28526
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
543 @vindex make-backup-file-name-function |
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
544 @vindex backup-directory-alist |
38017
32f10000ac35
Don't use the British spelling of "behaviour".
Eli Zaretskii <eliz@gnu.org>
parents:
37795
diff
changeset
|
545 You can change this behavior by defining the variable |
28526
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
546 @code{make-backup-file-name-function} to a suitable function. |
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
547 Alternatively you can customize the variable |
36874 | 548 @code{backup-directory-alist} to specify that files matching certain |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
549 patterns should be backed up in specific directories. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
550 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
551 A typical use is to add an element @code{("." . @var{dir})} to make |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
552 all backups in the directory with absolute name @var{dir}; Emacs |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
553 modifies the backup file names to avoid clashes between files with the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
554 same names originating in different directories. Alternatively, |
37090
41f1140b1f53
(Backup Names): Fix typo.
Andreas Schwab <schwab@suse.de>
parents:
36874
diff
changeset
|
555 adding, say, @code{("." . ".~")} would make backups in the invisible |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
556 subdirectory @file{.~} of the original file's directory. Emacs |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
557 creates the directory, if necessary, to make the backup. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
558 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
559 If access control stops Emacs from writing backup files under the usual |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
560 names, it writes the backup file as @file{%backup%~} in your home |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
561 directory. Only one such file can exist, so only the most recently |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
562 made such backup is available. |
28526
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
563 |
25829 | 564 If you choose to have a series of numbered backup files, backup file |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
565 names contain @samp{.~}, the number, and another @samp{~} after the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
566 original file name. Thus, the backup files of @file{eval.c} would be |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
567 called @file{eval.c.~1~}, @file{eval.c.~2~}, and so on, all the way |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
568 through names like @file{eval.c.~259~} and beyond. The variable |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
569 @code{backup-directory-alist} applies to numbered backups just as |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
570 usual. |
25829 | 571 |
572 @vindex version-control | |
573 The choice of single backup or numbered backups is controlled by the | |
574 variable @code{version-control}. Its possible values are | |
575 | |
576 @table @code | |
577 @item t | |
578 Make numbered backups. | |
579 @item nil | |
580 Make numbered backups for files that have numbered backups already. | |
581 Otherwise, make single backups. | |
582 @item never | |
36322
b95226aa58b9
(Backup names): Fix "Do not in any case". From Nelson H. F. Beebe
Eli Zaretskii <eliz@gnu.org>
parents:
36319
diff
changeset
|
583 Never make numbered backups; always make single backups. |
25829 | 584 @end table |
585 | |
586 @noindent | |
587 You can set @code{version-control} locally in an individual buffer to | |
588 control the making of backups for that buffer's file. For example, | |
589 Rmail mode locally sets @code{version-control} to @code{never} to make sure | |
590 that there is only one backup for an Rmail file. @xref{Locals}. | |
591 | |
29107 | 592 @cindex @env{VERSION_CONTROL} environment variable |
593 If you set the environment variable @env{VERSION_CONTROL}, to tell | |
25829 | 594 various GNU utilities what to do with backup files, Emacs also obeys the |
595 environment variable by setting the Lisp variable @code{version-control} | |
596 accordingly at startup. If the environment variable's value is @samp{t} | |
597 or @samp{numbered}, then @code{version-control} becomes @code{t}; if the | |
598 value is @samp{nil} or @samp{existing}, then @code{version-control} | |
599 becomes @code{nil}; if it is @samp{never} or @samp{simple}, then | |
600 @code{version-control} becomes @code{never}. | |
601 | |
602 @node Backup Deletion | |
603 @subsubsection Automatic Deletion of Backups | |
604 | |
38020 | 605 To prevent excessive consumption of disk space, Emacs can delete numbered |
25829 | 606 backup versions automatically. Generally Emacs keeps the first few backups |
607 and the latest few backups, deleting any in between. This happens every | |
608 time a new backup is made. | |
609 | |
610 @vindex kept-old-versions | |
611 @vindex kept-new-versions | |
612 The two variables @code{kept-old-versions} and | |
613 @code{kept-new-versions} control this deletion. Their values are, | |
38739 | 614 respectively, the number of oldest (lowest-numbered) backups to keep |
615 and the number of newest (highest-numbered) ones to keep, each time a | |
616 new backup is made. The backups in the middle (excluding those oldest | |
617 and newest) are the excess middle versions---those backups are | |
618 deleted. These variables' values are used when it is time to delete | |
619 excess versions, just after a new backup version is made; the newly | |
620 made backup is included in the count in @code{kept-new-versions}. By | |
621 default, both variables are 2. | |
25829 | 622 |
623 @vindex delete-old-versions | |
38739 | 624 If @code{delete-old-versions} is non-@code{nil}, Emacs deletes the |
625 excess backup files silently. If it is @code{nil}, the default, Emacs | |
626 asks you whether it should delete the excess backup versions. | |
25829 | 627 |
628 Dired's @kbd{.} (Period) command can also be used to delete old versions. | |
629 @xref{Dired Deletion}. | |
630 | |
631 @node Backup Copying | |
632 @subsubsection Copying vs.@: Renaming | |
633 | |
38739 | 634 Backup files can be made by copying the old file or by renaming it. |
635 This makes a difference when the old file has multiple names (hard | |
636 links). If the old file is renamed into the backup file, then the | |
637 alternate names become names for the backup file. If the old file is | |
638 copied instead, then the alternate names remain names for the file | |
639 that you are editing, and the contents accessed by those names will be | |
640 the new contents. | |
25829 | 641 |
642 The method of making a backup file may also affect the file's owner | |
643 and group. If copying is used, these do not change. If renaming is used, | |
644 you become the file's owner, and the file's group becomes the default | |
645 (different operating systems have different defaults for the group). | |
646 | |
647 Having the owner change is usually a good idea, because then the owner | |
648 always shows who last edited the file. Also, the owners of the backups | |
649 show who produced those versions. Occasionally there is a file whose | |
650 owner should not change; it is a good idea for such files to contain | |
651 local variable lists to set @code{backup-by-copying-when-mismatch} | |
652 locally (@pxref{File Variables}). | |
653 | |
654 @vindex backup-by-copying | |
655 @vindex backup-by-copying-when-linked | |
656 @vindex backup-by-copying-when-mismatch | |
31043
31a21ae1de1f
Document backup-by-copying-when-privileged-mismatch.
Eli Zaretskii <eliz@gnu.org>
parents:
29683
diff
changeset
|
657 @vindex backup-by-copying-when-privileged-mismatch |
31a21ae1de1f
Document backup-by-copying-when-privileged-mismatch.
Eli Zaretskii <eliz@gnu.org>
parents:
29683
diff
changeset
|
658 @cindex file ownership, and backup |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
659 @cindex backup, and user-id |
31043
31a21ae1de1f
Document backup-by-copying-when-privileged-mismatch.
Eli Zaretskii <eliz@gnu.org>
parents:
29683
diff
changeset
|
660 The choice of renaming or copying is controlled by four variables. |
25829 | 661 Renaming is the default choice. If the variable |
662 @code{backup-by-copying} is non-@code{nil}, copying is used. Otherwise, | |
663 if the variable @code{backup-by-copying-when-linked} is non-@code{nil}, | |
664 then copying is used for files that have multiple names, but renaming | |
665 may still be used when the file being edited has only one name. If the | |
666 variable @code{backup-by-copying-when-mismatch} is non-@code{nil}, then | |
667 copying is used if renaming would cause the file's owner or group to | |
668 change. @code{backup-by-copying-when-mismatch} is @code{t} by default | |
31043
31a21ae1de1f
Document backup-by-copying-when-privileged-mismatch.
Eli Zaretskii <eliz@gnu.org>
parents:
29683
diff
changeset
|
669 if you start Emacs as the superuser. The fourth variable, |
31a21ae1de1f
Document backup-by-copying-when-privileged-mismatch.
Eli Zaretskii <eliz@gnu.org>
parents:
29683
diff
changeset
|
670 @code{backup-by-copying-when-privileged-mismatch}, gives the highest |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
671 numeric user-id for which @code{backup-by-copying-when-mismatch} will be |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
672 forced on. This is useful when low-numbered user-ids are assigned to |
31043
31a21ae1de1f
Document backup-by-copying-when-privileged-mismatch.
Eli Zaretskii <eliz@gnu.org>
parents:
29683
diff
changeset
|
673 special system users, such as @code{root}, @code{bin}, @code{daemon}, |
31a21ae1de1f
Document backup-by-copying-when-privileged-mismatch.
Eli Zaretskii <eliz@gnu.org>
parents:
29683
diff
changeset
|
674 etc., which must maintain ownership of files. |
25829 | 675 |
676 When a file is managed with a version control system (@pxref{Version | |
677 Control}), Emacs does not normally make backups in the usual way for | |
678 that file. But check-in and check-out are similar in some ways to | |
679 making backups. One unfortunate similarity is that these operations | |
680 typically break hard links, disconnecting the file name you visited from | |
681 any alternate names for the same file. This has nothing to do with | |
682 Emacs---the version control system does it. | |
683 | |
684 @node Interlocking | |
685 @subsection Protection against Simultaneous Editing | |
686 | |
687 @cindex file dates | |
688 @cindex simultaneous editing | |
689 Simultaneous editing occurs when two users visit the same file, both | |
690 make changes, and then both save them. If nobody were informed that | |
691 this was happening, whichever user saved first would later find that his | |
692 changes were lost. | |
693 | |
694 On some systems, Emacs notices immediately when the second user starts | |
695 to change the file, and issues an immediate warning. On all systems, | |
696 Emacs checks when you save the file, and warns if you are about to | |
697 overwrite another user's changes. You can prevent loss of the other | |
698 user's work by taking the proper corrective action instead of saving the | |
699 file. | |
700 | |
701 @findex ask-user-about-lock | |
702 @cindex locking files | |
703 When you make the first modification in an Emacs buffer that is | |
704 visiting a file, Emacs records that the file is @dfn{locked} by you. | |
705 (It does this by creating a symbolic link in the same directory with a | |
706 different name.) Emacs removes the lock when you save the changes. The | |
707 idea is that the file is locked whenever an Emacs buffer visiting it has | |
708 unsaved changes. | |
709 | |
710 @cindex collision | |
711 If you begin to modify the buffer while the visited file is locked by | |
712 someone else, this constitutes a @dfn{collision}. When Emacs detects a | |
713 collision, it asks you what to do, by calling the Lisp function | |
714 @code{ask-user-about-lock}. You can redefine this function for the sake | |
715 of customization. The standard definition of this function asks you a | |
716 question and accepts three possible answers: | |
717 | |
718 @table @kbd | |
719 @item s | |
720 Steal the lock. Whoever was already changing the file loses the lock, | |
721 and you gain the lock. | |
722 @item p | |
723 Proceed. Go ahead and edit the file despite its being locked by someone else. | |
724 @item q | |
38739 | 725 Quit. This causes an error (@code{file-locked}), and the buffer |
726 contents remain unchanged---the modification you were trying to make | |
727 does not actually take place. | |
25829 | 728 @end table |
729 | |
730 Note that locking works on the basis of a file name; if a file has | |
731 multiple names, Emacs does not realize that the two names are the same file | |
732 and cannot prevent two users from editing it simultaneously under different | |
733 names. However, basing locking on names means that Emacs can interlock the | |
734 editing of new files that will not really exist until they are saved. | |
735 | |
736 Some systems are not configured to allow Emacs to make locks, and | |
737 there are cases where lock files cannot be written. In these cases, | |
738 Emacs cannot detect trouble in advance, but it still can detect the | |
739 collision when you try to save a file and overwrite someone else's | |
740 changes. | |
741 | |
742 If Emacs or the operating system crashes, this may leave behind lock | |
36327
f32c31c60f60
(Interlocking): Fix wording of "So you may".
Eli Zaretskii <eliz@gnu.org>
parents:
36326
diff
changeset
|
743 files which are stale, so you may occasionally get warnings about |
25829 | 744 spurious collisions. When you determine that the collision is spurious, |
745 just use @kbd{p} to tell Emacs to go ahead anyway. | |
746 | |
747 Every time Emacs saves a buffer, it first checks the last-modification | |
748 date of the existing file on disk to verify that it has not changed since the | |
749 file was last visited or saved. If the date does not match, it implies | |
750 that changes were made in the file in some other way, and these changes are | |
751 about to be lost if Emacs actually does save. To prevent this, Emacs | |
38870
d44abb4e68b2
Don't use "print" for displaying a message.
Richard M. Stallman <rms@gnu.org>
parents:
38768
diff
changeset
|
752 displays a warning message and asks for confirmation before saving. |
25829 | 753 Occasionally you will know why the file was changed and know that it does |
754 not matter; then you can answer @kbd{yes} and proceed. Otherwise, you should | |
755 cancel the save with @kbd{C-g} and investigate the situation. | |
756 | |
757 The first thing you should do when notified that simultaneous editing | |
758 has already taken place is to list the directory with @kbd{C-u C-x C-d} | |
759 (@pxref{Directories}). This shows the file's current author. You | |
760 should attempt to contact him to warn him not to continue editing. | |
761 Often the next step is to save the contents of your Emacs buffer under a | |
762 different name, and use @code{diff} to compare the two files.@refill | |
763 | |
31076 | 764 @node File Shadowing |
765 @subsection Shadowing Files | |
766 @cindex shadow files | |
767 @cindex file shadows | |
768 | |
769 @table @kbd | |
770 @item M-x shadow-initialize | |
771 Set up file shadowing. | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
772 @item M-x shadow-define-literal-group |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
773 Declare a single file to be shared between sites. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
774 @item M-x shadow-define-regexp-group |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
775 Make all files that match each of a group of files be shared between hosts. |
31076 | 776 @item M-x shadow-define-cluster @key{RET} @var{name} @key{RET} |
777 Define a shadow file cluster @var{name}. | |
778 @item M-x shadow-copy-files | |
779 Copy all pending shadow files. | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
780 @item M-x shadow-cancel |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
781 Cancel the instruction to shadow some files. |
31076 | 782 @end table |
783 | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
784 You can arrange to keep identical @dfn{shadow} copies of certain files |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
785 in more than one place---possibly on different machines. To do this, |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
786 first you must set up a @dfn{shadow file group}, which is a set of |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
787 identically-named files shared between a list of sites. The file |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
788 group is permanent and applies to further Emacs sessions as well as |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
789 the current one. Once the group is set up, every time you exit Emacs, |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
790 it will copy the file you edited to the other files in its group. You |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
791 can also do the copying without exiting Emacs, by typing @kbd{M-x |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
792 shadow-copy-files}. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
793 |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
794 To set up a shadow file group, use @kbd{M-x |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
795 shadow-define-literal-group} or @kbd{M-x shadow-define-regexp-group}. |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
796 See their documentation strings for further information. |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
797 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
798 Before copying a file to its shadows, Emacs asks for confirmation. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
799 You can answer ``no'' to bypass copying of this file, this time. If |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
800 you want to cancel the shadowing permanently for a certain file, use |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
801 @kbd{M-x shadow-cancel} to eliminate or change the shadow file group. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
802 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
803 A @dfn{shadow cluster} is a group of hosts that share directories, so |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
804 that copying to or from one of them is sufficient to update the file |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
805 on all of them. Each shadow cluster has a name, and specifies the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
806 network address of a primary host (the one we copy files to), and a |
39263 | 807 regular expression that matches the host names of all the other hosts |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
808 in the cluster. You can define a shadow cluster with @kbd{M-x |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
809 shadow-define-cluster}. |
31076 | 810 |
35524 | 811 @node Time Stamps |
812 @subsection Updating Time Stamps Automatically | |
813 @findex time-stamp | |
814 @cindex time stamps | |
815 @cindex modification dates | |
35620 | 816 @cindex locale, date format |
35524 | 817 |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
818 You can arrange to put a time stamp in a file, so that it will be updated |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
819 automatically each time you edit and save the file. The time stamp |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
820 has to be in the first eight lines of the file, and you should |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
821 insert it like this: |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
822 |
35524 | 823 @example |
824 Time-stamp: <> | |
825 @end example | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
826 |
35524 | 827 @noindent |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
828 or like this: |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
829 |
35524 | 830 @example |
831 Time-stamp: "" | |
832 @end example | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
833 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
834 Then add the hook function @code{time-stamp} to the hook |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
835 @code{write-file-hooks}; that hook function will automatically update |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
836 the time stamp, inserting the current date and time when you save the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
837 file. You can also use the command @kbd{M-x time-stamp} to update the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
838 time stamp manually. For other customizations, see the Custom group |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
839 @code{time-stamp}. Note that non-numeric fields in the time stamp are |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
840 formatted according to your locale setting (@pxref{Environment}). |
35524 | 841 |
25829 | 842 @node Reverting |
843 @section Reverting a Buffer | |
844 @findex revert-buffer | |
845 @cindex drastic changes | |
36547
4dff107cf2a1
(Reverting): Add an index entry "reread a file".
Eli Zaretskii <eliz@gnu.org>
parents:
36402
diff
changeset
|
846 @cindex reread a file |
25829 | 847 |
848 If you have made extensive changes to a file and then change your mind | |
849 about them, you can get rid of them by reading in the previous version | |
850 of the file. To do this, use @kbd{M-x revert-buffer}, which operates on | |
851 the current buffer. Since reverting a buffer unintentionally could lose | |
852 a lot of work, you must confirm this command with @kbd{yes}. | |
853 | |
854 @code{revert-buffer} keeps point at the same distance (measured in | |
855 characters) from the beginning of the file. If the file was edited only | |
856 slightly, you will be at approximately the same piece of text after | |
857 reverting as before. If you have made drastic changes, the same value of | |
858 point in the old file may address a totally different piece of text. | |
859 | |
860 Reverting marks the buffer as ``not modified'' until another change is | |
861 made. | |
862 | |
863 Some kinds of buffers whose contents reflect data bases other than files, | |
864 such as Dired buffers, can also be reverted. For them, reverting means | |
865 recalculating their contents from the appropriate data base. Buffers | |
866 created explicitly with @kbd{C-x b} cannot be reverted; @code{revert-buffer} | |
867 reports an error when asked to do so. | |
868 | |
869 @vindex revert-without-query | |
870 When you edit a file that changes automatically and frequently---for | |
871 example, a log of output from a process that continues to run---it may be | |
872 useful for Emacs to revert the file without querying you, whenever you | |
873 visit the file again with @kbd{C-x C-f}. | |
874 | |
875 To request this behavior, set the variable @code{revert-without-query} | |
876 to a list of regular expressions. When a file name matches one of these | |
877 regular expressions, @code{find-file} and @code{revert-buffer} will | |
878 revert it automatically if it has changed---provided the buffer itself | |
879 is not modified. (If you have edited the text, it would be wrong to | |
880 discard your changes.) | |
881 | |
36874 | 882 @cindex Global Auto-Revert mode |
883 @cindex mode, Global Auto-Revert | |
884 @cindex Auto-Revert mode | |
885 @cindex mode, Auto-Revert | |
886 @findex global-auto-revert-mode | |
887 @findex auto-revert-mode | |
888 @vindex auto-revert-interval | |
889 You may find it useful to have Emacs revert files automatically when | |
890 they change. Two minor modes are available to do this. In Global | |
891 Auto-Revert mode, Emacs periodically checks all file buffers and | |
892 reverts any when the corresponding file has changed. The local | |
893 variant, Auto-Revert mode, applies only to buffers in which it was | |
894 activated. Checking the files is done at intervals determined by the | |
895 variable @code{auto-revert-interval}. | |
896 | |
25829 | 897 @node Auto Save |
898 @section Auto-Saving: Protection Against Disasters | |
899 @cindex Auto Save mode | |
900 @cindex mode, Auto Save | |
901 @cindex crashes | |
902 | |
903 Emacs saves all the visited files from time to time (based on counting | |
904 your keystrokes) without being asked. This is called @dfn{auto-saving}. | |
905 It prevents you from losing more than a limited amount of work if the | |
906 system crashes. | |
907 | |
908 When Emacs determines that it is time for auto-saving, each buffer is | |
909 considered, and is auto-saved if auto-saving is turned on for it and it | |
910 has been changed since the last time it was auto-saved. The message | |
911 @samp{Auto-saving...} is displayed in the echo area during auto-saving, | |
912 if any files are actually auto-saved. Errors occurring during | |
913 auto-saving are caught so that they do not interfere with the execution | |
914 of commands you have been typing. | |
915 | |
916 @menu | |
917 * Files: Auto Save Files. The file where auto-saved changes are | |
918 actually made until you save the file. | |
919 * Control: Auto Save Control. Controlling when and how often to auto-save. | |
920 * Recover:: Recovering text from auto-save files. | |
921 @end menu | |
922 | |
923 @node Auto Save Files | |
924 @subsection Auto-Save Files | |
925 | |
926 Auto-saving does not normally save in the files that you visited, because | |
927 it can be very undesirable to save a program that is in an inconsistent | |
928 state when you have made half of a planned change. Instead, auto-saving | |
929 is done in a different file called the @dfn{auto-save file}, and the | |
930 visited file is changed only when you request saving explicitly (such as | |
931 with @kbd{C-x C-s}). | |
932 | |
933 Normally, the auto-save file name is made by appending @samp{#} to the | |
934 front and rear of the visited file name. Thus, a buffer visiting file | |
935 @file{foo.c} is auto-saved in a file @file{#foo.c#}. Most buffers that | |
936 are not visiting files are auto-saved only if you request it explicitly; | |
937 when they are auto-saved, the auto-save file name is made by appending | |
43682
02ff23017427
Update how auto-save file names are made for non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents:
42433
diff
changeset
|
938 @samp{#} to the front and rear of buffer name, then |
02ff23017427
Update how auto-save file names are made for non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents:
42433
diff
changeset
|
939 adding digits and letters at the end for uniqueness. For |
25829 | 940 example, the @samp{*mail*} buffer in which you compose messages to be |
43682
02ff23017427
Update how auto-save file names are made for non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents:
42433
diff
changeset
|
941 sent might auto-saved in a file named @file{#*mail*#704juu}. Auto-save file |
25829 | 942 names are made this way unless you reprogram parts of Emacs to do |
943 something different (the functions @code{make-auto-save-file-name} and | |
944 @code{auto-save-file-name-p}). The file name to be used for auto-saving | |
945 in a buffer is calculated when auto-saving is turned on in that buffer. | |
946 | |
44717
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
947 @cindex auto-save for remote files |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
948 @vindex auto-save-file-name-transforms |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
949 The variable @code{auto-save-file-name-transforms} allows a |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
950 degree of control over the auto-save file name. The default value is |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
951 set up to put the auto-save files for remote files |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
952 (@pxref{Remote Files}) into the temporary file directory on the local |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
953 machine. |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
954 |
25829 | 955 When you delete a substantial part of the text in a large buffer, auto |
956 save turns off temporarily in that buffer. This is because if you | |
957 deleted the text unintentionally, you might find the auto-save file more | |
958 useful if it contains the deleted text. To reenable auto-saving after | |
959 this happens, save the buffer with @kbd{C-x C-s}, or use @kbd{C-u 1 M-x | |
960 auto-save}. | |
961 | |
962 @vindex auto-save-visited-file-name | |
38739 | 963 If you want auto-saving to be done in the visited file rather than |
964 in a separate auto-save file, set the variable | |
965 @code{auto-save-visited-file-name} to a non-@code{nil} value. In this | |
966 mode, there is no real difference between auto-saving and explicit | |
967 saving. | |
25829 | 968 |
969 @vindex delete-auto-save-files | |
970 A buffer's auto-save file is deleted when you save the buffer in its | |
971 visited file. To inhibit this, set the variable @code{delete-auto-save-files} | |
972 to @code{nil}. Changing the visited file name with @kbd{C-x C-w} or | |
973 @code{set-visited-file-name} renames any auto-save file to go with | |
974 the new visited name. | |
975 | |
976 @node Auto Save Control | |
977 @subsection Controlling Auto-Saving | |
978 | |
979 @vindex auto-save-default | |
980 @findex auto-save-mode | |
981 Each time you visit a file, auto-saving is turned on for that file's | |
982 buffer if the variable @code{auto-save-default} is non-@code{nil} (but not | |
983 in batch mode; @pxref{Entering Emacs}). The default for this variable is | |
984 @code{t}, so auto-saving is the usual practice for file-visiting buffers. | |
985 Auto-saving can be turned on or off for any existing buffer with the | |
986 command @kbd{M-x auto-save-mode}. Like other minor mode commands, @kbd{M-x | |
987 auto-save-mode} turns auto-saving on with a positive argument, off with a | |
988 zero or negative argument; with no argument, it toggles. | |
989 | |
990 @vindex auto-save-interval | |
991 Emacs does auto-saving periodically based on counting how many characters | |
992 you have typed since the last time auto-saving was done. The variable | |
993 @code{auto-save-interval} specifies how many characters there are between | |
40682
e9a06f7efd3f
(Auto Save Control): Document that values of auto-save-interval less
Eli Zaretskii <eliz@gnu.org>
parents:
39263
diff
changeset
|
994 auto-saves. By default, it is 300. Emacs doesn't accept values that are |
e9a06f7efd3f
(Auto Save Control): Document that values of auto-save-interval less
Eli Zaretskii <eliz@gnu.org>
parents:
39263
diff
changeset
|
995 too small: if you customize @code{auto-save-interval} to a value less |
e9a06f7efd3f
(Auto Save Control): Document that values of auto-save-interval less
Eli Zaretskii <eliz@gnu.org>
parents:
39263
diff
changeset
|
996 than 20, Emacs will behave as if the value is 20. |
25829 | 997 |
998 @vindex auto-save-timeout | |
999 Auto-saving also takes place when you stop typing for a while. The | |
1000 variable @code{auto-save-timeout} says how many seconds Emacs should | |
1001 wait before it does an auto save (and perhaps also a garbage | |
1002 collection). (The actual time period is longer if the current buffer is | |
1003 long; this is a heuristic which aims to keep out of your way when you | |
1004 are editing long buffers, in which auto-save takes an appreciable amount | |
1005 of time.) Auto-saving during idle periods accomplishes two things: | |
1006 first, it makes sure all your work is saved if you go away from the | |
1007 terminal for a while; second, it may avoid some auto-saving while you | |
1008 are actually typing. | |
1009 | |
1010 Emacs also does auto-saving whenever it gets a fatal error. This | |
1011 includes killing the Emacs job with a shell command such as @samp{kill | |
1012 %emacs}, or disconnecting a phone line or network connection. | |
1013 | |
1014 @findex do-auto-save | |
1015 You can request an auto-save explicitly with the command @kbd{M-x | |
1016 do-auto-save}. | |
1017 | |
1018 @node Recover | |
1019 @subsection Recovering Data from Auto-Saves | |
1020 | |
1021 @findex recover-file | |
1022 You can use the contents of an auto-save file to recover from a loss | |
1023 of data with the command @kbd{M-x recover-file @key{RET} @var{file} | |
1024 @key{RET}}. This visits @var{file} and then (after your confirmation) | |
1025 restores the contents from its auto-save file @file{#@var{file}#}. | |
1026 You can then save with @kbd{C-x C-s} to put the recovered text into | |
1027 @var{file} itself. For example, to recover file @file{foo.c} from its | |
1028 auto-save file @file{#foo.c#}, do:@refill | |
1029 | |
1030 @example | |
1031 M-x recover-file @key{RET} foo.c @key{RET} | |
1032 yes @key{RET} | |
1033 C-x C-s | |
1034 @end example | |
1035 | |
1036 Before asking for confirmation, @kbd{M-x recover-file} displays a | |
1037 directory listing describing the specified file and the auto-save file, | |
1038 so you can compare their sizes and dates. If the auto-save file | |
1039 is older, @kbd{M-x recover-file} does not offer to read it. | |
1040 | |
1041 @findex recover-session | |
1042 If Emacs or the computer crashes, you can recover all the files you | |
1043 were editing from their auto save files with the command @kbd{M-x | |
1044 recover-session}. This first shows you a list of recorded interrupted | |
1045 sessions. Move point to the one you choose, and type @kbd{C-c C-c}. | |
1046 | |
1047 Then @code{recover-session} asks about each of the files that were | |
1048 being edited during that session, asking whether to recover that file. | |
1049 If you answer @kbd{y}, it calls @code{recover-file}, which works in its | |
1050 normal fashion. It shows the dates of the original file and its | |
1051 auto-save file, and asks once again whether to recover that file. | |
1052 | |
1053 When @code{recover-session} is done, the files you've chosen to | |
1054 recover are present in Emacs buffers. You should then save them. Only | |
1055 this---saving them---updates the files themselves. | |
1056 | |
1057 @vindex auto-save-list-file-prefix | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1058 Emacs records interrupted sessions for later recovery in files named |
44327
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
1059 @file{~/.emacs.d/auto-save-list/.saves-@var{pid}-@var{hostname}}. All |
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
1060 of this name except @file{@var{pid}-@var{hostname}} comes from the |
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
1061 value of @code{auto-save-list-file-prefix}. You can record sessions |
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
1062 in a different place by customizing that variable. If you set |
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
1063 @code{auto-save-list-file-prefix} to @code{nil} in your @file{.emacs} |
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
1064 file, sessions are not recorded for recovery. |
25829 | 1065 |
1066 @node File Aliases | |
1067 @section File Name Aliases | |
1068 | |
1069 Symbolic links and hard links both make it possible for several file | |
1070 names to refer to the same file. Hard links are alternate names that | |
1071 refer directly to the file; all the names are equally valid, and no one | |
1072 of them is preferred. By contrast, a symbolic link is a kind of defined | |
1073 alias: when @file{foo} is a symbolic link to @file{bar}, you can use | |
1074 either name to refer to the file, but @file{bar} is the real name, while | |
1075 @file{foo} is just an alias. More complex cases occur when symbolic | |
1076 links point to directories. | |
1077 | |
1078 If you visit two names for the same file, normally Emacs makes | |
1079 two different buffers, but it warns you about the situation. | |
1080 | |
33278
7b666d4d4007
(File Aliases): Change description of find-file-existing-other-name
Gerd Moellmann <gerd@gnu.org>
parents:
32221
diff
changeset
|
1081 @vindex find-file-existing-other-name |
38922
526466ad5a06
(File Aliases): Document find-file-suppress-same-file-warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
38870
diff
changeset
|
1082 @vindex find-file-suppress-same-file-warnings |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1083 Normally, if you visit a file which Emacs is already visiting under |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1084 a different name, Emacs displays a message in the echo area and uses |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1085 the existing buffer visiting that file. This can happen on systems |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1086 that support symbolic links, or if you use a long file name on a |
38922
526466ad5a06
(File Aliases): Document find-file-suppress-same-file-warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
38870
diff
changeset
|
1087 system that truncates long file names. You can suppress the message by |
526466ad5a06
(File Aliases): Document find-file-suppress-same-file-warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
38870
diff
changeset
|
1088 setting the variable @code{find-file-suppress-same-file-warnings} to a |
526466ad5a06
(File Aliases): Document find-file-suppress-same-file-warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
38870
diff
changeset
|
1089 non-@code{nil} value. You can disable this feature entirely by setting |
526466ad5a06
(File Aliases): Document find-file-suppress-same-file-warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
38870
diff
changeset
|
1090 the variable @code{find-file-existing-other-name} to @code{nil}: then |
526466ad5a06
(File Aliases): Document find-file-suppress-same-file-warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
38870
diff
changeset
|
1091 if you visit the same file under two different names, you get a separate |
526466ad5a06
(File Aliases): Document find-file-suppress-same-file-warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
38870
diff
changeset
|
1092 buffer for each file name. |
25829 | 1093 |
1094 @vindex find-file-visit-truename | |
1095 @cindex truenames of files | |
1096 @cindex file truenames | |
1097 If the variable @code{find-file-visit-truename} is non-@code{nil}, | |
1098 then the file name recorded for a buffer is the file's @dfn{truename} | |
1099 (made by replacing all symbolic links with their target names), rather | |
1100 than the name you specify. Setting @code{find-file-visit-truename} also | |
1101 implies the effect of @code{find-file-existing-other-name}. | |
1102 | |
1103 @node Version Control | |
1104 @section Version Control | |
1105 @cindex version control | |
1106 | |
1107 @dfn{Version control systems} are packages that can record multiple | |
1108 versions of a source file, usually storing the unchanged parts of the | |
1109 file just once. Version control systems also record history information | |
1110 such as the creation time of each version, who created it, and a | |
1111 description of what was changed in that version. | |
1112 | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1113 The Emacs version control interface is called VC. Its commands work |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1114 with three version control systems---RCS, CVS, and SCCS. The GNU |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1115 project recommends RCS and CVS, which are free software and available |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1116 from the Free Software Foundation. We also have free software to |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1117 replace SCCS, known as CSSC; if you are using SCCS and don't want to |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1118 make the incompatible change to RCS or CVS, you can switch to CSSC. |
25829 | 1119 |
1120 @menu | |
1121 * Introduction to VC:: How version control works in general. | |
42338
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1122 * VC Mode Line:: How the mode line shows version control status. |
25829 | 1123 * Basic VC Editing:: How to edit a file under version control. |
1124 * Old Versions:: Examining and comparing old versions. | |
1125 * Secondary VC Commands:: The commands used a little less frequently. | |
1126 * Branches:: Multiple lines of development. | |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1127 * Remote Repositories:: Efficient access to remote CVS servers. |
25829 | 1128 * Snapshots:: Sets of file versions treated as a unit. |
1129 * Miscellaneous VC:: Various other commands and features of VC. | |
1130 * Customizing VC:: Variables that change VC's behavior. | |
1131 @end menu | |
1132 | |
1133 @node Introduction to VC | |
1134 @subsection Introduction to Version Control | |
1135 | |
1136 VC allows you to use a version control system from within Emacs, | |
1137 integrating the version control operations smoothly with editing. VC | |
1138 provides a uniform interface to version control, so that regardless of | |
1139 which version control system is in use, you can use it the same way. | |
1140 | |
1141 This section provides a general overview of version control, and | |
1142 describes the version control systems that VC supports. You can skip | |
1143 this section if you are already familiar with the version control system | |
1144 you want to use. | |
1145 | |
1146 @menu | |
1147 * Version Systems:: Supported version control back-end systems. | |
1148 * VC Concepts:: Words and concepts related to version control. | |
42327
86a0b7cc1600
Explain the difference between the per-file log maintained by the
Robert J. Chassell <bob@rattlesnake.com>
parents:
40682
diff
changeset
|
1149 * Types of Log File:: The per-file VC log in contrast to the ChangeLog. |
25829 | 1150 @end menu |
1151 | |
1152 @node Version Systems | |
1153 @subsubsection Supported Version Control Systems | |
1154 | |
1155 @cindex RCS | |
1156 @cindex back end (version control) | |
1157 VC currently works with three different version control systems or | |
1158 ``back ends'': RCS, CVS, and SCCS. | |
1159 | |
1160 RCS is a free version control system that is available from the Free | |
1161 Software Foundation. It is perhaps the most mature of the supported | |
1162 back ends, and the VC commands are conceptually closest to RCS. Almost | |
1163 everything you can do with RCS can be done through VC. | |
1164 | |
1165 @cindex CVS | |
1166 CVS is built on top of RCS, and extends the features of RCS, allowing | |
1167 for more sophisticated release management, and concurrent multi-user | |
1168 development. VC supports basic editing operations under CVS, but for | |
1169 some less common tasks you still need to call CVS from the command line. | |
1170 Note also that before using CVS you must set up a repository, which is a | |
1171 subject too complex to treat here. | |
1172 | |
1173 @cindex SCCS | |
1174 SCCS is a proprietary but widely used version control system. In | |
1175 terms of capabilities, it is the weakest of the three that VC | |
1176 supports. VC compensates for certain features missing in SCCS | |
1177 (snapshots, for example) by implementing them itself, but some other VC | |
1178 features, such as multiple branches, are not available with SCCS. You | |
1179 should use SCCS only if for some reason you cannot use RCS. | |
1180 | |
1181 @node VC Concepts | |
1182 @subsubsection Concepts of Version Control | |
1183 | |
1184 @cindex master file | |
1185 @cindex registered file | |
1186 When a file is under version control, we also say that it is | |
1187 @dfn{registered} in the version control system. Each registered file | |
1188 has a corresponding @dfn{master file} which represents the file's | |
1189 present state plus its change history---enough to reconstruct the | |
1190 current version or any earlier version. Usually the master file also | |
1191 records a @dfn{log entry} for each version, describing in words what was | |
1192 changed in that version. | |
1193 | |
1194 @cindex work file | |
1195 @cindex checking out files | |
1196 The file that is maintained under version control is sometimes called | |
1197 the @dfn{work file} corresponding to its master file. You edit the work | |
1198 file and make changes in it, as you would with an ordinary file. (With | |
1199 SCCS and RCS, you must @dfn{lock} the file before you start to edit it.) | |
1200 After you are done with a set of changes, you @dfn{check the file in}, | |
1201 which records the changes in the master file, along with a log entry for | |
1202 them. | |
1203 | |
1204 With CVS, there are usually multiple work files corresponding to a | |
1205 single master file---often each user has his own copy. It is also | |
1206 possible to use RCS in this way, but this is not the usual way to use | |
1207 RCS. | |
1208 | |
1209 @cindex locking and version control | |
1210 A version control system typically has some mechanism to coordinate | |
1211 between users who want to change the same file. One method is | |
1212 @dfn{locking} (analogous to the locking that Emacs uses to detect | |
1213 simultaneous editing of a file, but distinct from it). The other method | |
1214 is to merge your changes with other people's changes when you check them | |
1215 in. | |
1216 | |
1217 With version control locking, work files are normally read-only so | |
1218 that you cannot change them. You ask the version control system to make | |
1219 a work file writable for you by locking it; only one user can do | |
1220 this at any given time. When you check in your changes, that unlocks | |
1221 the file, making the work file read-only again. This allows other users | |
1222 to lock the file to make further changes. SCCS always uses locking, and | |
1223 RCS normally does. | |
1224 | |
1225 The other alternative for RCS is to let each user modify the work file | |
1226 at any time. In this mode, locking is not required, but it is | |
1227 permitted; check-in is still the way to record a new version. | |
1228 | |
1229 CVS normally allows each user to modify his own copy of the work file | |
1230 at any time, but requires merging with changes from other users at | |
1231 check-in time. However, CVS can also be set up to require locking. | |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1232 (@pxref{CVS Options}). |
25829 | 1233 |
42327
86a0b7cc1600
Explain the difference between the per-file log maintained by the
Robert J. Chassell <bob@rattlesnake.com>
parents:
40682
diff
changeset
|
1234 @node Types of Log File |
86a0b7cc1600
Explain the difference between the per-file log maintained by the
Robert J. Chassell <bob@rattlesnake.com>
parents:
40682
diff
changeset
|
1235 @subsubsection Types of Log File |
42338
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1236 @cindex types of log file |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1237 @cindex log File, types of |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1238 @cindex version control log |
42327
86a0b7cc1600
Explain the difference between the per-file log maintained by the
Robert J. Chassell <bob@rattlesnake.com>
parents:
40682
diff
changeset
|
1239 |
86a0b7cc1600
Explain the difference between the per-file log maintained by the
Robert J. Chassell <bob@rattlesnake.com>
parents:
40682
diff
changeset
|
1240 GNU projects under a revision control system generally possess |
42338
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1241 @emph{two} types of log for changes. One is the per-file log |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1242 maintained by the revision control system: each time you check in a |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1243 change, you must fill out a @dfn{log entry} for the change (@pxref{Log |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1244 Buffer}). This kind of log is called the @dfn{version control log}, |
42433
21907e7569d1
Minor cleanup of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42338
diff
changeset
|
1245 also the @dfn{revision control log}, @dfn{RCS log}, or @dfn{CVS log}. |
21907e7569d1
Minor cleanup of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42338
diff
changeset
|
1246 |
21907e7569d1
Minor cleanup of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42338
diff
changeset
|
1247 The other kind of log is the change log file, typically a file called |
42338
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1248 @file{ChangeLog}. It provides a chronological record of all changes |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1249 to a large portion of a program---one directory and its |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1250 subdirectories. A small program would use one @file{ChangeLog} file; |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1251 a large program may well merit a @file{ChangeLog} file in each major |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1252 directory. @xref{Change Log}. |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1253 |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1254 When you use version control, you can use just the per-file log if you |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1255 wish, or you can use both kinds of logs. When you use both, you |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1256 typically want to write just one entry for each change. You can write |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1257 the entry in @file{ChangeLog}, then copy it to the log buffer when you |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1258 check in the change. Or you can write the entry in the log buffer |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1259 while checking in the change, and later use the @kbd{C-x v a} command |
8649ccc72076
Rewrite Types of Log File node.
Richard M. Stallman <rms@gnu.org>
parents:
42327
diff
changeset
|
1260 to copy it to @file{ChangeLog} (@pxref{Change Logs and VC}). |
42327
86a0b7cc1600
Explain the difference between the per-file log maintained by the
Robert J. Chassell <bob@rattlesnake.com>
parents:
40682
diff
changeset
|
1261 |
25829 | 1262 @node VC Mode Line |
1263 @subsection Version Control and the Mode Line | |
1264 | |
1265 When you visit a file that is under version control, Emacs indicates | |
1266 this on the mode line. For example, @samp{RCS-1.3} says that RCS is | |
1267 used for that file, and the current version is 1.3. | |
1268 | |
1269 The character between the back-end name and the version number | |
1270 indicates the version control status of the file. @samp{-} means that | |
1271 the work file is not locked (if locking is in use), or not modified (if | |
1272 locking is not in use). @samp{:} indicates that the file is locked, or | |
1273 that it is modified. If the file is locked by some other user (for | |
1274 instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}. | |
1275 | |
1276 @node Basic VC Editing | |
1277 @subsection Basic Editing under Version Control | |
1278 | |
1279 The principal VC command is an all-purpose command that performs | |
1280 either locking or check-in, depending on the situation. | |
1281 | |
1282 @table @kbd | |
1283 @item C-x C-q | |
1284 @itemx C-x v v | |
1285 Perform the next logical version control operation on this file. | |
1286 @end table | |
1287 | |
1288 @findex vc-next-action | |
1289 @findex vc-toggle-read-only | |
1290 @kindex C-x v v | |
1291 @kindex C-x C-q @r{(Version Control)} | |
1292 Strictly speaking, the command for this job is @code{vc-next-action}, | |
1293 bound to @kbd{C-x v v}. However, the normal meaning of @kbd{C-x C-q} is | |
1294 to make a read-only buffer writable, or vice versa; we have extended it | |
1295 to do the same job properly for files managed by version control, by | |
1296 performing the appropriate version control operations. When you type | |
1297 @kbd{C-x C-q} on a registered file, it acts like @kbd{C-x v v}. | |
1298 | |
1299 The precise action of this command depends on the state of the file, | |
1300 and whether the version control system uses locking or not. SCCS and | |
1301 RCS normally use locking; CVS normally does not use locking. | |
1302 | |
1303 @menu | |
1304 * VC with Locking:: RCS in its default mode, SCCS, and optionally CVS. | |
1305 * Without Locking:: Without locking: default mode for CVS. | |
36402
e06c9b1a0b04
(Advanced C-x C-q): Fix prev change.
André Spiegel <spiegel@gnu.org>
parents:
36385
diff
changeset
|
1306 * Advanced C-x C-q:: Advanced features available with a prefix argument. |
25829 | 1307 * Log Buffer:: Features available in log entry buffers. |
1308 @end menu | |
1309 | |
1310 @node VC with Locking | |
1311 @subsubsection Basic Version Control with Locking | |
1312 | |
1313 If locking is used for the file (as with SCCS, and RCS in its default | |
1314 mode), @kbd{C-x C-q} can either lock a file or check it in: | |
1315 | |
1316 @itemize @bullet | |
1317 @item | |
1318 If the file is not locked, @kbd{C-x C-q} locks it, and | |
1319 makes it writable so that you can change it. | |
1320 | |
1321 @item | |
1322 If the file is locked by you, and contains changes, @kbd{C-x C-q} checks | |
1323 in the changes. In order to do this, it first reads the log entry | |
1324 for the new version. @xref{Log Buffer}. | |
1325 | |
1326 @item | |
1327 If the file is locked by you, but you have not changed it since you | |
1328 locked it, @kbd{C-x C-q} releases the lock and makes the file read-only | |
1329 again. | |
1330 | |
1331 @item | |
1332 If the file is locked by some other user, @kbd{C-x C-q} asks you whether | |
1333 you want to ``steal the lock'' from that user. If you say yes, the file | |
1334 becomes locked by you, but a message is sent to the person who had | |
1335 formerly locked the file, to inform him of what has happened. | |
1336 @end itemize | |
1337 | |
1338 These rules also apply when you use CVS in locking mode, except | |
1339 that there is no such thing as stealing a lock. | |
1340 | |
1341 @node Without Locking | |
1342 @subsubsection Basic Version Control without Locking | |
1343 | |
1344 When there is no locking---the default for CVS---work files are always | |
1345 writable; you do not need to do anything before you begin to edit a | |
1346 file. The status indicator on the mode line is @samp{-} if the file is | |
1347 unmodified; it flips to @samp{:} as soon as you save any changes in the | |
1348 work file. | |
1349 | |
1350 Here is what @kbd{C-x C-q} does when using CVS: | |
1351 | |
1352 @itemize @bullet | |
1353 @item | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1354 If some other user has checked in changes into the master file, Emacs |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1355 asks you whether you want to merge those changes into your own work |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1356 file. You must do this before you can check in your own changes. (To |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1357 pick up any recent changes from the master file @emph{without} trying |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1358 to commit your own changes, type @kbd{C-x v m @key{RET}}.) |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1359 @xref{Merging}. |
25829 | 1360 |
1361 @item | |
1362 If there are no new changes in the master file, but you have made | |
1363 modifications in your work file, @kbd{C-x C-q} checks in your changes. | |
1364 In order to do this, it first reads the log entry for the new version. | |
1365 @xref{Log Buffer}. | |
1366 | |
1367 @item | |
1368 If the file is not modified, the @kbd{C-x C-q} does nothing. | |
1369 @end itemize | |
1370 | |
1371 These rules also apply when you use RCS in the mode that does not | |
1372 require locking, except that automatic merging of changes from the | |
1373 master file is not implemented. Unfortunately, this means that nothing | |
1374 informs you if another user has checked in changes in the same file | |
1375 since you began editing it, and when this happens, his changes will be | |
1376 effectively removed when you check in your version (though they will | |
1377 remain in the master file, so they will not be entirely lost). You must | |
1378 therefore verify the current version is unchanged, before you check in your | |
1379 changes. We hope to eliminate this risk and provide automatic merging | |
1380 with RCS in a future Emacs version. | |
1381 | |
1382 In addition, locking is possible with RCS even in this mode, although | |
1383 it is not required; @kbd{C-x C-q} with an unmodified file locks the | |
1384 file, just as it does with RCS in its normal (locking) mode. | |
1385 | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1386 @node Advanced C-x C-q |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1387 @subsubsection Advanced Control in @kbd{C-x C-q} |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1388 |
44588 | 1389 @cindex version number to check in/out |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1390 When you give a prefix argument to @code{vc-next-action} (@kbd{C-u |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1391 C-x C-q}), it still performs the next logical version control |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1392 operation, but accepts additional arguments to specify precisely how |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1393 to do the operation. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1394 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1395 @itemize @bullet |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1396 @item |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1397 If the file is modified (or locked), you can specify the version |
38739 | 1398 number to use for the new version that you check in. This is one way |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1399 to create a new branch (@pxref{Branches}). |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1400 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1401 @item |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1402 If the file is not modified (and unlocked), you can specify the |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1403 version to select; this lets you start working from an older version, |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1404 or on another branch. If you do not enter any version, that takes you |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1405 to the highest version on the current branch; therefore @kbd{C-u C-x |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1406 C-q @key{RET}} is a convenient way to get the latest version of a file from |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1407 the repository. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1408 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1409 @item |
44588 | 1410 @cindex specific version control system |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1411 Instead of the version number, you can also specify the name of a |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1412 version control system. This is useful when one file is being managed |
38739 | 1413 with two version control systems at the same time (@pxref{Local |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1414 Version Control}). |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1415 @end itemize |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1416 |
25829 | 1417 @node Log Buffer |
1418 @subsubsection Features of the Log Entry Buffer | |
1419 | |
1420 When you check in changes, @kbd{C-x C-q} first reads a log entry. It | |
1421 pops up a buffer called @samp{*VC-Log*} for you to enter the log entry. | |
1422 When you are finished, type @kbd{C-c C-c} in the @samp{*VC-Log*} buffer. | |
1423 That is when check-in really happens. | |
1424 | |
1425 To abort check-in, just @strong{don't} type @kbd{C-c C-c} in that | |
1426 buffer. You can switch buffers and do other editing. As long as you | |
1427 don't try to check in another file, the entry you were editing remains | |
1428 in the @samp{*VC-Log*} buffer, and you can go back to that buffer at any | |
1429 time to complete the check-in. | |
1430 | |
1431 If you change several source files for the same reason, it is often | |
1432 convenient to specify the same log entry for many of the files. To do | |
1433 this, use the history of previous log entries. The commands @kbd{M-n}, | |
1434 @kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this work just like the | |
1435 minibuffer history commands (except that these versions are used outside | |
1436 the minibuffer). | |
1437 | |
1438 @vindex vc-log-mode-hook | |
1439 Each time you check in a file, the log entry buffer is put into VC Log | |
1440 mode, which involves running two hooks: @code{text-mode-hook} and | |
1441 @code{vc-log-mode-hook}. @xref{Hooks}. | |
1442 | |
1443 @node Old Versions | |
1444 @subsection Examining And Comparing Old Versions | |
1445 | |
1446 One of the convenient features of version control is the ability | |
1447 to examine any version of a file, or compare two versions. | |
1448 | |
1449 @table @kbd | |
1450 @item C-x v ~ @var{version} @key{RET} | |
1451 Examine version @var{version} of the visited file, in a buffer of its | |
1452 own. | |
1453 | |
1454 @item C-x v = | |
1455 Compare the current buffer contents with the latest checked-in version | |
1456 of the file. | |
1457 | |
1458 @item C-u C-x v = @var{file} @key{RET} @var{oldvers} @key{RET} @var{newvers} @key{RET} | |
1459 Compare the specified two versions of @var{file}. | |
1460 | |
1461 @item C-x v g | |
1462 Display the result of the CVS annotate command using colors. | |
1463 @end table | |
1464 | |
1465 @findex vc-version-other-window | |
1466 @kindex C-x v ~ | |
38739 | 1467 To examine an old version in its entirety, visit the file and then type |
25829 | 1468 @kbd{C-x v ~ @var{version} @key{RET}} (@code{vc-version-other-window}). |
1469 This puts the text of version @var{version} in a file named | |
1470 @file{@var{filename}.~@var{version}~}, and visits it in its own buffer | |
1471 in a separate window. (In RCS, you can also select an old version | |
1472 and create a branch from it. @xref{Branches}.) | |
1473 | |
1474 @findex vc-diff | |
1475 @kindex C-x v = | |
36323
7ecef0fc04b0
(Old versions): Fix "But usually is". From Nelson H. F. Beebe
Eli Zaretskii <eliz@gnu.org>
parents:
36322
diff
changeset
|
1476 It is usually more convenient to compare two versions of the file, |
25829 | 1477 with the command @kbd{C-x v =} (@code{vc-diff}). Plain @kbd{C-x v =} |
1478 compares the current buffer contents (saving them in the file if | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1479 necessary) with the last checked-in version of the file. @kbd{C-u C-x |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1480 v =}, with a numeric argument, reads a file name and two version |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1481 numbers, then compares those versions of the specified file. Both |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1482 forms display the output in a special buffer in another window. |
25829 | 1483 |
1484 You can specify a checked-in version by its number; an empty input | |
1485 specifies the current contents of the work file (which may be different | |
1486 from all the checked-in versions). You can also specify a snapshot name | |
1487 (@pxref{Snapshots}) instead of one or both version numbers. | |
1488 | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1489 If you supply a directory name instead of the name of a registered |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1490 file, this command compares the two specified versions of all registered |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1491 files in that directory and its subdirectories. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1492 |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1493 @vindex vc-diff-switches |
38739 | 1494 @vindex vc-rcs-diff-switches |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1495 @kbd{C-x v =} works by running a variant of the @code{diff} utility |
38739 | 1496 designed to work with the version control system in use. When you |
1497 invoke @code{diff} this way, in addition to the options specified by | |
38768
b08b8519c0ab
Fix a stale reference to "Comparing Files".
Eli Zaretskii <eliz@gnu.org>
parents:
38739
diff
changeset
|
1498 @code{diff-switches} (@pxref{Comparing Files}), it receives those |
38739 | 1499 specified by @code{vc-diff-switches}, plus those specified for the |
1500 specific back end by @code{vc-@var{backend}-diff-switches}. For | |
1501 instance, when the version control back end is RCS, @code{diff} uses | |
1502 the options in @code{vc-rcs-diff-switches}. The | |
1503 @samp{vc@dots{}diff-switches} variables are @code{nil} by default. | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1504 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1505 Unlike the @kbd{M-x diff} command, @kbd{C-x v =} does not try to |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1506 locate the changes in the old and new versions. This is because |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1507 normally one or both versions do not exist as files when you compare |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1508 them; they exist only in the records of the master file. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1509 @xref{Comparing Files}, for more information about @kbd{M-x diff}. |
25829 | 1510 |
1511 @findex vc-annotate | |
1512 @kindex C-x v g | |
1513 For CVS-controlled files, you can display the result of the CVS | |
1514 annotate command, using colors to enhance the visual appearance. Use | |
39163
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1515 the command @kbd{M-x vc-annotate} to do this. It creates a new buffer |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1516 to display file's text, colored to show how old each part is. Text |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1517 colored red is new, blue means old, and intermediate colors indicate |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1518 intermediate ages. By default, the time scale is 360 days, so that |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1519 everything more than one year old is shown in blue. |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1520 |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1521 When you give a prefix argument to this command, it uses the |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1522 minibuffer to read two arguments: which version number to display and |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1523 annotate (instead of the current file contents), and a stretch factor |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1524 for the time scale. A stretch factor of 0.1 means that the color |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1525 range from red to blue spans the past 36 days instead of 360 days. A |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1526 stretch factor greater than 1 means the color range spans more than a |
8c66ad9acae0
Clarify description of vc-annotate.
Richard M. Stallman <rms@gnu.org>
parents:
38922
diff
changeset
|
1527 year. |
25829 | 1528 |
1529 @node Secondary VC Commands | |
1530 @subsection The Secondary Commands of VC | |
1531 | |
1532 This section explains the secondary commands of VC; those that you might | |
1533 use once a day. | |
1534 | |
1535 @menu | |
1536 * Registering:: Putting a file under version control. | |
1537 * VC Status:: Viewing the VC status of files. | |
1538 * VC Undo:: Cancelling changes before or after check-in. | |
1539 * VC Dired Mode:: Listing files managed by version control. | |
1540 * VC Dired Commands:: Commands to use in a VC Dired buffer. | |
1541 @end menu | |
1542 | |
1543 @node Registering | |
1544 @subsubsection Registering a File for Version Control | |
1545 | |
1546 @kindex C-x v i | |
1547 @findex vc-register | |
1548 You can put any file under version control by simply visiting it, and | |
1549 then typing @w{@kbd{C-x v i}} (@code{vc-register}). | |
1550 | |
1551 @table @kbd | |
1552 @item C-x v i | |
1553 Register the visited file for version control. | |
1554 @end table | |
1555 | |
1556 To register the file, Emacs must choose which version control system | |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1557 to use for it. If the file's directory already contains files |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1558 registered in a version control system, Emacs uses that system. If |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1559 there is more than one system in use for a directory, Emacs uses the one |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
1560 that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}). |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1561 On the other hand, if there are no files already registered, |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
1562 Emacs uses the first system from @code{vc-handled-backends} that could |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1563 register the file---for example, you cannot register a file under CVS if |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1564 its directory is not already part of a CVS tree. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1565 |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
1566 With the default value of @code{vc-handled-backends}, this means |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
1567 that Emacs uses RCS if there are any files under RCS control, CVS if |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
1568 there are any files under CVS, SCCS if any files are under SCCS, or |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
1569 RCS as the ultimate default. |
25829 | 1570 |
1571 If locking is in use, @kbd{C-x v i} leaves the file unlocked and | |
1572 read-only. Type @kbd{C-x C-q} if you wish to start editing it. After | |
1573 registering a file with CVS, you must subsequently commit the initial | |
1574 version by typing @kbd{C-x C-q}. | |
1575 | |
1576 @vindex vc-default-init-version | |
44588 | 1577 @cindex initial version number to register |
25829 | 1578 The initial version number for a newly registered file is 1.1, by |
1579 default. You can specify a different default by setting the variable | |
1580 @code{vc-default-init-version}, or you can give @kbd{C-x v i} a numeric | |
1581 argument; then it reads the initial version number for this particular | |
1582 file using the minibuffer. | |
1583 | |
1584 @vindex vc-initial-comment | |
1585 If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads an | |
1586 initial comment to describe the purpose of this source file. Reading | |
1587 the initial comment works like reading a log entry (@pxref{Log Buffer}). | |
1588 | |
1589 @node VC Status | |
1590 @subsubsection VC Status Commands | |
1591 | |
1592 @table @kbd | |
1593 @item C-x v l | |
1594 Display version control state and change history. | |
1595 @end table | |
1596 | |
1597 @kindex C-x v l | |
1598 @findex vc-print-log | |
1599 To view the detailed version control status and history of a file, | |
1600 type @kbd{C-x v l} (@code{vc-print-log}). It displays the history of | |
1601 changes to the current file, including the text of the log entries. The | |
1602 output appears in a separate window. | |
1603 | |
1604 @node VC Undo | |
1605 @subsubsection Undoing Version Control Actions | |
1606 | |
1607 @table @kbd | |
1608 @item C-x v u | |
1609 Revert the buffer and the file to the last checked-in version. | |
1610 | |
1611 @item C-x v c | |
1612 Remove the last-entered change from the master for the visited file. | |
1613 This undoes your last check-in. | |
1614 @end table | |
1615 | |
1616 @kindex C-x v u | |
1617 @findex vc-revert-buffer | |
1618 If you want to discard your current set of changes and revert to the | |
1619 last version checked in, use @kbd{C-x v u} (@code{vc-revert-buffer}). | |
1620 This leaves the file unlocked; if locking is in use, you must first lock | |
1621 the file again before you change it again. @kbd{C-x v u} requires | |
1622 confirmation, unless it sees that you haven't made any changes since the | |
1623 last checked-in version. | |
1624 | |
1625 @kbd{C-x v u} is also the command to unlock a file if you lock it and | |
1626 then decide not to change it. | |
1627 | |
1628 @kindex C-x v c | |
1629 @findex vc-cancel-version | |
1630 To cancel a change that you already checked in, use @kbd{C-x v c} | |
1631 (@code{vc-cancel-version}). This command discards all record of the | |
1632 most recent checked-in version. @kbd{C-x v c} also offers to revert | |
1633 your work file and buffer to the previous version (the one that precedes | |
1634 the version that is deleted). | |
1635 | |
1636 If you answer @kbd{no}, VC keeps your changes in the buffer, and locks | |
1637 the file. The no-revert option is useful when you have checked in a | |
1638 change and then discover a trivial error in it; you can cancel the | |
1639 erroneous check-in, fix the error, and check the file in again. | |
1640 | |
1641 When @kbd{C-x v c} does not revert the buffer, it unexpands all | |
1642 version control headers in the buffer instead (@pxref{Version Headers}). | |
1643 This is because the buffer no longer corresponds to any existing | |
1644 version. If you check it in again, the check-in process will expand the | |
1645 headers properly for the new version number. | |
1646 | |
1647 However, it is impossible to unexpand the RCS @samp{@w{$}Log$} header | |
1648 automatically. If you use that header feature, you have to unexpand it | |
1649 by hand---by deleting the entry for the version that you just canceled. | |
1650 | |
1651 Be careful when invoking @kbd{C-x v c}, as it is easy to lose a lot of | |
1652 work with it. To help you be careful, this command always requires | |
1653 confirmation with @kbd{yes}. Note also that this command is disabled | |
1654 under CVS, because canceling versions is very dangerous and discouraged | |
1655 with CVS. | |
1656 | |
1657 @node VC Dired Mode | |
1658 @subsubsection Dired under VC | |
1659 | |
31076 | 1660 @cindex PCL-CVS |
1661 @pindex cvs | |
1662 @cindex CVS Dired Mode | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1663 The VC Dired Mode described here works with all the version control |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1664 systems that VC supports. Another more powerful facility, designed |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1665 specifically for CVS, is called PCL-CVS. @xref{Top, , About PCL-CVS, |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
1666 pcl-cvs, PCL-CVS --- The Emacs Front-End to CVS}. |
31076 | 1667 |
25829 | 1668 @kindex C-x v d |
1669 @findex vc-directory | |
1670 When you are working on a large program, it is often useful to find | |
1671 out which files have changed within an entire directory tree, or to view | |
1672 the status of all files under version control at once, and to perform | |
1673 version control operations on collections of files. You can use the | |
1674 command @kbd{C-x v d} (@code{vc-directory}) to make a directory listing | |
1675 that includes only files relevant for version control. | |
1676 | |
1677 @vindex vc-dired-terse-display | |
1678 @kbd{C-x v d} creates a buffer which uses VC Dired Mode. This looks | |
1679 much like an ordinary Dired buffer (@pxref{Dired}); however, normally it | |
1680 shows only the noteworthy files (those locked or not up-to-date). This | |
1681 is called @dfn{terse display}. If you set the variable | |
1682 @code{vc-dired-terse-display} to @code{nil}, then VC Dired shows all | |
1683 relevant files---those managed under version control, plus all | |
1684 subdirectories (@dfn{full display}). The command @kbd{v t} in a VC | |
1685 Dired buffer toggles between terse display and full display (@pxref{VC | |
1686 Dired Commands}). | |
1687 | |
1688 @vindex vc-dired-recurse | |
1689 By default, VC Dired produces a recursive listing of noteworthy or | |
1690 relevant files at or below the given directory. You can change this by | |
1691 setting the variable @code{vc-dired-recurse} to @code{nil}; then VC | |
1692 Dired shows only the files in the given directory. | |
1693 | |
1694 The line for an individual file shows the version control state in the | |
1695 place of the hard link count, owner, group, and size of the file. If | |
1696 the file is unmodified, in sync with the master file, the version | |
1697 control state shown is blank. Otherwise it consists of text in | |
1698 parentheses. Under RCS and SCCS, the name of the user locking the file | |
1699 is shown; under CVS, an abbreviated version of the @samp{cvs status} | |
1700 output is used. Here is an example using RCS: | |
1701 | |
1702 @smallexample | |
1703 @group | |
1704 /home/jim/project: | |
1705 | |
1706 -rw-r--r-- (jim) Apr 2 23:39 file1 | |
1707 -r--r--r-- Apr 5 20:21 file2 | |
1708 @end group | |
1709 @end smallexample | |
1710 | |
1711 @noindent | |
1712 The files @samp{file1} and @samp{file2} are under version control, | |
1713 @samp{file1} is locked by user jim, and @samp{file2} is unlocked. | |
1714 | |
1715 Here is an example using CVS: | |
1716 | |
1717 @smallexample | |
1718 @group | |
1719 /home/joe/develop: | |
1720 | |
1721 -rw-r--r-- (modified) Aug 2 1997 file1.c | |
1722 -rw-r--r-- Apr 4 20:09 file2.c | |
1723 -rw-r--r-- (merge) Sep 13 1996 file3.c | |
1724 @end group | |
1725 @end smallexample | |
1726 | |
1727 Here @samp{file1.c} is modified with respect to the repository, and | |
1728 @samp{file2.c} is not. @samp{file3.c} is modified, but other changes | |
1729 have also been checked in to the repository---you need to merge them | |
1730 with the work file before you can check it in. | |
1731 | |
1732 @vindex vc-directory-exclusion-list | |
1733 When VC Dired displays subdirectories (in the ``full'' display mode), | |
1734 it omits some that should never contain any files under version control. | |
1735 By default, this includes Version Control subdirectories such as | |
1736 @samp{RCS} and @samp{CVS}; you can customize this by setting the | |
1737 variable @code{vc-directory-exclusion-list}. | |
1738 | |
1739 You can fine-tune VC Dired's format by typing @kbd{C-u C-x v d}---as in | |
1740 ordinary Dired, that allows you to specify additional switches for the | |
1741 @samp{ls} command. | |
1742 | |
1743 @node VC Dired Commands | |
1744 @subsubsection VC Dired Commands | |
1745 | |
1746 All the usual Dired commands work normally in VC Dired mode, except | |
1747 for @kbd{v}, which is redefined as the version control prefix. You can | |
1748 invoke VC commands such as @code{vc-diff} and @code{vc-print-log} by | |
1749 typing @kbd{v =}, or @kbd{v l}, and so on. Most of these commands apply | |
1750 to the file name on the current line. | |
1751 | |
1752 The command @kbd{v v} (@code{vc-next-action}) operates on all the | |
1753 marked files, so that you can lock or check in several files at once. | |
1754 If it operates on more than one file, it handles each file according to | |
1755 its current state; thus, it might lock one file, but check in another | |
1756 file. This could be confusing; it is up to you to avoid confusing | |
1757 behavior by marking a set of files that are in a similar state. | |
1758 | |
1759 If any files call for check-in, @kbd{v v} reads a single log entry, | |
1760 then uses it for all the files being checked in. This is convenient for | |
1761 registering or checking in several files at once, as part of the same | |
1762 change. | |
1763 | |
1764 @findex vc-dired-toggle-terse-mode | |
1765 @findex vc-dired-mark-locked | |
1766 You can toggle between terse display (only locked files, or files not | |
1767 up-to-date) and full display at any time by typing @kbd{v t} | |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
1768 (@code{vc-dired-toggle-terse-mode}). There is also a special command |
25829 | 1769 @kbd{* l} (@code{vc-dired-mark-locked}), which marks all files currently |
1770 locked (or, with CVS, all files not up-to-date). Thus, typing @kbd{* l | |
1771 t k} is another way to delete from the buffer all files except those | |
1772 currently locked. | |
1773 | |
1774 @node Branches | |
1775 @subsection Multiple Branches of a File | |
1776 @cindex branch (version control) | |
1777 @cindex trunk (version control) | |
1778 | |
1779 One use of version control is to maintain multiple ``current'' | |
1780 versions of a file. For example, you might have different versions of a | |
1781 program in which you are gradually adding various unfinished new | |
1782 features. Each such independent line of development is called a | |
1783 @dfn{branch}. VC allows you to create branches, switch between | |
1784 different branches, and merge changes from one branch to another. | |
1785 Please note, however, that branches are only supported for RCS at the | |
1786 moment. | |
1787 | |
1788 A file's main line of development is usually called the @dfn{trunk}. | |
1789 The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At | |
1790 any such version, you can start an independent branch. A branch | |
1791 starting at version 1.2 would have version number 1.2.1.1, and consecutive | |
1792 versions on this branch would have numbers 1.2.1.2, 1.2.1.3, 1.2.1.4, | |
1793 and so on. If there is a second branch also starting at version 1.2, it | |
1794 would consist of versions 1.2.2.1, 1.2.2.2, 1.2.2.3, etc. | |
1795 | |
1796 @cindex head version | |
1797 If you omit the final component of a version number, that is called a | |
1798 @dfn{branch number}. It refers to the highest existing version on that | |
1799 branch---the @dfn{head version} of that branch. The branches in the | |
1800 example above have branch numbers 1.2.1 and 1.2.2. | |
1801 | |
1802 @menu | |
1803 * Switching Branches:: How to get to another existing branch. | |
1804 * Creating Branches:: How to start a new branch. | |
1805 * Merging:: Transferring changes between branches. | |
1806 * Multi-User Branching:: Multiple users working at multiple branches | |
1807 in parallel. | |
1808 @end menu | |
1809 | |
1810 @node Switching Branches | |
1811 @subsubsection Switching between Branches | |
1812 | |
1813 To switch between branches, type @kbd{C-u C-x C-q} and specify the | |
1814 version number you want to select. This version is then visited | |
1815 @emph{unlocked} (write-protected), so you can examine it before locking | |
1816 it. Switching branches in this way is allowed only when the file is not | |
1817 locked. | |
1818 | |
1819 You can omit the minor version number, thus giving only the branch | |
1820 number; this takes you to the head version on the chosen branch. If you | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1821 only type @key{RET}, Emacs goes to the highest version on the trunk. |
25829 | 1822 |
1823 After you have switched to any branch (including the main branch), you | |
1824 stay on it for subsequent VC commands, until you explicitly select some | |
1825 other branch. | |
1826 | |
1827 @node Creating Branches | |
1828 @subsubsection Creating New Branches | |
1829 | |
1830 To create a new branch from a head version (one that is the latest in | |
1831 the branch that contains it), first select that version if necessary, | |
1832 lock it with @kbd{C-x C-q}, and make whatever changes you want. Then, | |
1833 when you check in the changes, use @kbd{C-u C-x C-q}. This lets you | |
1834 specify the version number for the new version. You should specify a | |
1835 suitable branch number for a branch starting at the current version. | |
1836 For example, if the current version is 2.5, the branch number should be | |
1837 2.5.1, 2.5.2, and so on, depending on the number of existing branches at | |
1838 that point. | |
1839 | |
1840 To create a new branch at an older version (one that is no longer the | |
1841 head of a branch), first select that version (@pxref{Switching | |
1842 Branches}), then lock it with @kbd{C-x C-q}. You'll be asked to | |
1843 confirm, when you lock the old version, that you really mean to create a | |
1844 new branch---if you say no, you'll be offered a chance to lock the | |
1845 latest version instead. | |
1846 | |
1847 Then make your changes and type @kbd{C-x C-q} again to check in a new | |
1848 version. This automatically creates a new branch starting from the | |
1849 selected version. You need not specially request a new branch, because | |
1850 that's the only way to add a new version at a point that is not the head | |
1851 of a branch. | |
1852 | |
1853 After the branch is created, you ``stay'' on it. That means that | |
1854 subsequent check-ins create new versions on that branch. To leave the | |
1855 branch, you must explicitly select a different version with @kbd{C-u C-x | |
1856 C-q}. To transfer changes from one branch to another, use the merge | |
1857 command, described in the next section. | |
1858 | |
1859 @node Merging | |
1860 @subsubsection Merging Branches | |
1861 | |
1862 @cindex merging changes | |
1863 When you have finished the changes on a certain branch, you will | |
1864 often want to incorporate them into the file's main line of development | |
1865 (the trunk). This is not a trivial operation, because development might | |
1866 also have proceeded on the trunk, so that you must @dfn{merge} the | |
1867 changes into a file that has already been changed otherwise. VC allows | |
1868 you to do this (and other things) with the @code{vc-merge} command. | |
1869 | |
1870 @table @kbd | |
1871 @item C-x v m (vc-merge) | |
1872 Merge changes into the work file. | |
1873 @end table | |
1874 | |
1875 @kindex C-x v m | |
1876 @findex vc-merge | |
1877 @kbd{C-x v m} (@code{vc-merge}) takes a set of changes and merges it | |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1878 into the current version of the work file. It firsts asks you in the |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1879 minibuffer where the changes should come from. If you just type |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1880 @key{RET}, Emacs merges any changes that were made on the same branch |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1881 since you checked the file out (we call this @dfn{merging the news}). |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1882 This is the common way to pick up recent changes from the repository, |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1883 regardless of whether you have already changed the file yourself. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1884 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1885 You can also enter a branch number or a pair of version numbers in |
38739 | 1886 the minibuffer. Then @kbd{C-x v m} finds the changes from that |
1887 branch, or the differences between the two versions you specified, and | |
1888 merges them into the current version of the current file. | |
25829 | 1889 |
1890 As an example, suppose that you have finished a certain feature on | |
1891 branch 1.3.1. In the meantime, development on the trunk has proceeded | |
1892 to version 1.5. To merge the changes from the branch to the trunk, | |
1893 first go to the head version of the trunk, by typing @kbd{C-u C-x C-q | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1894 @key{RET}}. Version 1.5 is now current. If locking is used for the file, |
25829 | 1895 type @kbd{C-x C-q} to lock version 1.5 so that you can change it. Next, |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1896 type @kbd{C-x v m 1.3.1 @key{RET}}. This takes the entire set of changes on |
25829 | 1897 branch 1.3.1 (relative to version 1.3, where the branch started, up to |
1898 the last version on the branch) and merges it into the current version | |
1899 of the work file. You can now check in the changed file, thus creating | |
1900 version 1.6 containing the changes from the branch. | |
1901 | |
1902 It is possible to do further editing after merging the branch, before | |
1903 the next check-in. But it is usually wiser to check in the merged | |
1904 version, then lock it and make the further changes. This will keep | |
1905 a better record of the history of changes. | |
1906 | |
1907 @cindex conflicts | |
1908 @cindex resolving conflicts | |
1909 When you merge changes into a file that has itself been modified, the | |
1910 changes might overlap. We call this situation a @dfn{conflict}, and | |
1911 reconciling the conflicting changes is called @dfn{resolving a | |
1912 conflict}. | |
1913 | |
1914 Whenever conflicts occur during merging, VC detects them, tells you | |
1915 about them in the echo area, and asks whether you want help in merging. | |
1916 If you say yes, it starts an Ediff session (@pxref{Top, | |
1917 Ediff, Ediff, ediff, The Ediff Manual}). | |
1918 | |
1919 If you say no, the conflicting changes are both inserted into the | |
1920 file, surrounded by @dfn{conflict markers}. The example below shows how | |
1921 a conflict region looks; the file is called @samp{name} and the current | |
1922 master file version with user B's changes in it is 1.11. | |
1923 | |
1924 @c @w here is so CVS won't think this is a conflict. | |
1925 @smallexample | |
1926 @group | |
1927 @w{<}<<<<<< name | |
1928 @var{User A's version} | |
1929 ======= | |
1930 @var{User B's version} | |
1931 @w{>}>>>>>> 1.11 | |
1932 @end group | |
1933 @end smallexample | |
1934 | |
1935 @cindex vc-resolve-conflicts | |
1936 Then you can resolve the conflicts by editing the file manually. Or | |
1937 you can type @code{M-x vc-resolve-conflicts} after visiting the file. | |
38739 | 1938 This starts an Ediff session, as described above. Don't forget to |
1939 check in the merged version afterwards. | |
25829 | 1940 |
1941 @node Multi-User Branching | |
1942 @subsubsection Multi-User Branching | |
1943 | |
1944 It is often useful for multiple developers to work simultaneously on | |
1945 different branches of a file. CVS allows this by default; for RCS, it | |
1946 is possible if you create multiple source directories. Each source | |
1947 directory should have a link named @file{RCS} which points to a common | |
1948 directory of RCS master files. Then each source directory can have its | |
1949 own choice of selected versions, but all share the same common RCS | |
1950 records. | |
1951 | |
1952 This technique works reliably and automatically, provided that the | |
1953 source files contain RCS version headers (@pxref{Version Headers}). The | |
1954 headers enable Emacs to be sure, at all times, which version number is | |
1955 present in the work file. | |
1956 | |
1957 If the files do not have version headers, you must instead tell Emacs | |
1958 explicitly in each session which branch you are working on. To do this, | |
1959 first find the file, then type @kbd{C-u C-x C-q} and specify the correct | |
1960 branch number. This ensures that Emacs knows which branch it is using | |
1961 during this particular editing session. | |
1962 | |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1963 @node Remote Repositories |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1964 @subsection Remote Repositories |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1965 @cindex remote repositories (CVS) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1966 |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1967 A common way of using CVS is to set up a central CVS repository on |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1968 some Internet host, then have each developer check out a personal |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1969 working copy of the files on his local machine. Committing changes to |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1970 the repository, and picking up changes from other users into one's own |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1971 working area, then works by direct interactions with the CVS server. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1972 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1973 One difficulty is that access to the CVS server is often slow, and |
39263 | 1974 that developers might need to work off-line as well. VC is designed |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1975 to reduce the amount of network interaction necessary. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1976 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1977 @menu |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1978 * Version Backups:: Keeping local copies of repository versions. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1979 * Local Version Control:: Using another version system for local editing. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1980 @end menu |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1981 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1982 @node Version Backups |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1983 @subsubsection Version Backups |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1984 @cindex version backups |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1985 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
1986 @cindex automatic version backups |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1987 When VC sees that the CVS repository for a file is on a remote |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1988 machine, it automatically makes local backups of unmodified versions |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1989 of the file---@dfn{automatic version backups}. This means that you |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1990 can compare the file to the repository version (@kbd{C-x v =}), or |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1991 revert to that version (@kbd{C-x v u}), without any network |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1992 interactions. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1993 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1994 The local copy of the unmodified file is called a @dfn{version |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1995 backup} to indicate that it corresponds exactly to a version that is |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1996 stored in the repository. Note that version backups are not the same |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1997 as ordinary Emacs backup files (@pxref{Backup}). But they follow a |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1998 similar naming convention. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
1999 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2000 For a file that comes from a remote CVS repository, VC makes a |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2001 version backup whenever you save the first changes to the file, and |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2002 removes it after you have committed your modified version to the |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2003 repository. You can disable the making of automatic version backups by |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2004 setting @code{vc-cvs-stay-local} to @code{nil} (@pxref{CVS Options}). |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2005 |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2006 @cindex manual version backups |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2007 The name of the automatic version backup for version @var{version} |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2008 of file @var{file} is @code{@var{file}.~@var{version}.~}. This is |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2009 almost the same as the name used by @kbd{C-x v ~} (@pxref{Old |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2010 Versions}), the only difference being the additional dot (@samp{.}) |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2011 after the version number. This similarity is intentional, because |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2012 both kinds of files store the same kind of information. The file made |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2013 by @kbd{C-x v ~} acts as a @dfn{manual version backup}. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2014 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2015 All the VC commands that operate on old versions of a file can use |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2016 both kinds of version backups. For instance, @kbd{C-x v ~} uses |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2017 either an automatic or a manual version backup, if possible, to get |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2018 the contents of the version you request. Likewise, @kbd{C-x v =} and |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2019 @kbd{C-x v u} use either an automatic or a manual version backup, if |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2020 one of them exists, to get the contents of a version to compare or |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2021 revert to. If you changed a file outside of Emacs, so that no |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2022 automatic version backup was created for the previous text, you can |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2023 create a manual backup of that version using @kbd{C-x v ~}, and thus |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2024 obtain the benefit of the local copy for Emacs commands. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2025 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2026 The only difference in Emacs's handling of manual and automatic |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2027 version backups, once they exist, is that Emacs deletes automatic |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2028 version backups when you commit to the repository. By contrast, |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2029 manual version backups remain until you delete them. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2030 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2031 @node Local Version Control |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2032 @subsubsection Local Version Control |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2033 @cindex local version control |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2034 @cindex local back end (version control) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2035 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2036 When you make many changes to a file that comes from a remote |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2037 repository, it can be convenient to have version control on your local |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2038 machine as well. You can then record intermediate versions, revert to |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2039 a previous state, etc., before you actually commit your changes to the |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2040 remote server. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2041 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2042 VC lets you do this by putting a file under a second, local version |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2043 control system, so that the file is effectively registered in two |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2044 systems at the same time. For the description here, we will assume |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2045 that the remote system is CVS, and you use RCS locally, although the |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2046 mechanism works with any combination of version control systems |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2047 (@dfn{back ends}). |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2048 |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2049 To make it work with other back ends, you must make sure that the |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2050 ``more local'' back end comes before the ``more remote'' back end in |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2051 the setting of @code{vc-handled-backends} (@pxref{Customizing VC}). By |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2052 default, this variable is set up so that you can use remote CVS and |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2053 local RCS as described here. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2054 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2055 To start using local RCS for a file that comes from a remote CVS |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2056 server, you must @emph{register the file in RCS}, by typing @kbd{C-u |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2057 C-x v v rcs @key{RET}}. (In other words, use @code{vc-next-action} with a |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2058 prefix argument, and specify RCS as the back end.) |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2059 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2060 You can do this at any time; it does not matter whether you have |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2061 already modified the file with respect to the version in the CVS |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2062 repository. If possible, VC tries to make the RCS master start with |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
2063 the unmodified repository version, then checks in any local changes |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2064 as a new version. This works if you have not made any changes yet, or |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2065 if the unmodified repository version exists locally as a version |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2066 backup (@pxref{Version Backups}). If the unmodified version is not |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2067 available locally, the RCS master starts with the modified version; |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
2068 the only drawback to this is that you cannot compare your changes |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2069 locally to what is stored in the repository. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2070 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2071 The version number of the RCS master is derived from the current CVS |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2072 version, starting a branch from it. For example, if the current CVS |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2073 version is 1.23, the local RCS branch will be 1.23.1. Version 1.23 in |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2074 the RCS master will be identical to version 1.23 under CVS; your first |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2075 changes are checked in as 1.23.1.1. (If the unmodified file is not |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2076 available locally, VC will check in the modified file twice, both as |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2077 1.23 and 1.23.1.1, to make the revision numbers consistent.) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2078 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2079 If you do not use locking under CVS (the default), locking is also |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2080 disabled for RCS, so that editing under RCS works exactly as under |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2081 CVS. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2082 |
36728
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2083 When you are done with local editing, you can commit the final version |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2084 back to the CVS repository by typing @kbd{C-u C-x v v cvs @key{RET}}. |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2085 This initializes the log entry buffer (@pxref{Log Buffer}) to contain |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2086 all the log entries you have recorded in the RCS master; you can edit |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2087 them as you wish, and then commit in CVS by typing @kbd{C-c C-c}. If |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2088 the commit is successful, VC removes the RCS master, so that the file |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2089 is once again registered under CVS only. (The RCS master is not |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2090 actually deleted, just renamed by appending @samp{~} to the name, so |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2091 that you can refer to it later if you wish.) |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2092 |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2093 While using local RCS, you can pick up recent changes from the CVS |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2094 repository into your local file, or commit some of your changes back |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2095 to CVS, without terminating local RCS version control. To do this, |
39263 | 2096 switch to the CVS back end temporarily, with the @kbd{C-x v b} command: |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2097 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2098 @table @kbd |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2099 @item C-x v b |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2100 Switch to another back end that the current file is registered |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2101 under (@code{vc-switch-backend}). |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2102 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2103 @item C-u C-x v b @var{backend} @key{RET} |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2104 Switch to @var{backend} for the current file. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2105 @end table |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2106 |
36360
0774daebf700
(Local Version Control): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
36356
diff
changeset
|
2107 @kindex C-x v b |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2108 @findex vc-switch-backend |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2109 @kbd{C-x v b} does not change the buffer contents, or any files; it |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2110 only changes VC's perspective on how to handle the file. Any |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2111 subsequent VC commands for that file will operate on the back end that |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2112 is currently selected. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2113 |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2114 If the current file is registered in more than one back end, typing |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2115 @kbd{C-x v b} ``cycles'' through all of these back ends. With a |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2116 prefix argument, it asks for the back end to use in the minibuffer. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2117 |
36728
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2118 Thus, if you are using local RCS, and you want to pick up some recent |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2119 changes in the file from remote CVS, first visit the file, then type |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2120 @kbd{C-x v b} to switch to CVS, and finally use @kbd{C-x v m |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2121 @key{RET}} to merge the news (@pxref{Merging}). You can then switch |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2122 back to RCS by typing @kbd{C-x v b} again, and continue to edit |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2123 locally. |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2124 |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2125 But if you do this, the revision numbers in the RCS master no longer |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2126 correspond to those of CVS. Technically, this is not a problem, but |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2127 it can become difficult to keep track of what is in the CVS repository |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2128 and what is not. So we suggest that you return from time to time to |
4906c8088ad5
Clarify C-u C-x v v cvs RET. Clarify the purpose of C-x v b.
Richard M. Stallman <rms@gnu.org>
parents:
36547
diff
changeset
|
2129 CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2130 |
25829 | 2131 @node Snapshots |
2132 @subsection Snapshots | |
2133 @cindex snapshots and version control | |
2134 | |
2135 A @dfn{snapshot} is a named set of file versions (one for each | |
2136 registered file) that you can treat as a unit. One important kind of | |
2137 snapshot is a @dfn{release}, a (theoretically) stable version of the | |
2138 system that is ready for distribution to users. | |
2139 | |
2140 @menu | |
2141 * Making Snapshots:: The snapshot facilities. | |
2142 * Snapshot Caveats:: Things to be careful of when using snapshots. | |
2143 @end menu | |
2144 | |
2145 @node Making Snapshots | |
2146 @subsubsection Making and Using Snapshots | |
2147 | |
2148 There are two basic commands for snapshots; one makes a | |
2149 snapshot with a given name, the other retrieves a named snapshot. | |
2150 | |
2151 @table @code | |
2152 @kindex C-x v s | |
2153 @findex vc-create-snapshot | |
2154 @item C-x v s @var{name} @key{RET} | |
2155 Define the last saved versions of every registered file in or under the | |
2156 current directory as a snapshot named @var{name} | |
2157 (@code{vc-create-snapshot}). | |
2158 | |
2159 @kindex C-x v r | |
2160 @findex vc-retrieve-snapshot | |
2161 @item C-x v r @var{name} @key{RET} | |
2162 For all registered files at or below the current directory level, select | |
2163 whatever versions correspond to the snapshot @var{name} | |
2164 (@code{vc-retrieve-snapshot}). | |
2165 | |
2166 This command reports an error if any files are locked at or below the | |
2167 current directory, without changing anything; this is to avoid | |
2168 overwriting work in progress. | |
2169 @end table | |
2170 | |
2171 A snapshot uses a very small amount of resources---just enough to record | |
2172 the list of file names and which version belongs to the snapshot. Thus, | |
2173 you need not hesitate to create snapshots whenever they are useful. | |
2174 | |
2175 You can give a snapshot name as an argument to @kbd{C-x v =} or | |
2176 @kbd{C-x v ~} (@pxref{Old Versions}). Thus, you can use it to compare a | |
2177 snapshot against the current files, or two snapshots against each other, | |
2178 or a snapshot against a named version. | |
2179 | |
2180 @node Snapshot Caveats | |
2181 @subsubsection Snapshot Caveats | |
2182 | |
2183 @cindex named configurations (RCS) | |
2184 VC's snapshot facilities are modeled on RCS's named-configuration | |
2185 support. They use RCS's native facilities for this, so under VC | |
2186 snapshots made using RCS are visible even when you bypass VC. | |
2187 | |
2188 @c worded verbosely to avoid overfull hbox. | |
2189 For SCCS, VC implements snapshots itself. The files it uses contain | |
2190 name/file/version-number triples. These snapshots are visible only | |
2191 through VC. | |
2192 | |
2193 A snapshot is a set of checked-in versions. So make sure that all the | |
2194 files are checked in and not locked when you make a snapshot. | |
2195 | |
2196 File renaming and deletion can create some difficulties with snapshots. | |
2197 This is not a VC-specific problem, but a general design issue in version | |
2198 control systems that no one has solved very well yet. | |
2199 | |
2200 If you rename a registered file, you need to rename its master along | |
2201 with it (the command @code{vc-rename-file} does this automatically). If | |
2202 you are using SCCS, you must also update the records of the snapshot, to | |
2203 mention the file by its new name (@code{vc-rename-file} does this, | |
2204 too). An old snapshot that refers to a master file that no longer | |
2205 exists under the recorded name is invalid; VC can no longer retrieve | |
2206 it. It would be beyond the scope of this manual to explain enough about | |
2207 RCS and SCCS to explain how to update the snapshots by hand. | |
2208 | |
2209 Using @code{vc-rename-file} makes the snapshot remain valid for | |
2210 retrieval, but it does not solve all problems. For example, some of the | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
2211 files in your program probably refer to others by name. At the very |
25829 | 2212 least, the makefile probably mentions the file that you renamed. If you |
2213 retrieve an old snapshot, the renamed file is retrieved under its new | |
2214 name, which is not the name that the makefile expects. So the program | |
2215 won't really work as retrieved. | |
2216 | |
2217 @node Miscellaneous VC | |
2218 @subsection Miscellaneous Commands and Features of VC | |
2219 | |
2220 This section explains the less-frequently-used features of VC. | |
2221 | |
2222 @menu | |
2223 * Change Logs and VC:: Generating a change log file from log entries. | |
2224 * Renaming and VC:: A command to rename both the source and master | |
2225 file correctly. | |
2226 * Version Headers:: Inserting version control headers into working files. | |
2227 @end menu | |
2228 | |
2229 @node Change Logs and VC | |
2230 @subsubsection Change Logs and VC | |
2231 | |
2232 If you use RCS or CVS for a program and also maintain a change log | |
2233 file for it (@pxref{Change Log}), you can generate change log entries | |
2234 automatically from the version control log entries: | |
2235 | |
2236 @table @kbd | |
2237 @item C-x v a | |
2238 @kindex C-x v a | |
2239 @findex vc-update-change-log | |
2240 Visit the current directory's change log file and, for registered files | |
2241 in that directory, create new entries for versions checked in since the | |
2242 most recent entry in the change log file. | |
2243 (@code{vc-update-change-log}). | |
2244 | |
2245 This command works with RCS or CVS only, not with SCCS. | |
2246 | |
2247 @item C-u C-x v a | |
2248 As above, but only find entries for the current buffer's file. | |
2249 | |
2250 @item M-1 C-x v a | |
2251 As above, but find entries for all the currently visited files that are | |
2252 maintained with version control. This works only with RCS, and it puts | |
2253 all entries in the log for the default directory, which may not be | |
2254 appropriate. | |
2255 @end table | |
2256 | |
2257 For example, suppose the first line of @file{ChangeLog} is dated | |
2258 1999-04-10, and that the only check-in since then was by Nathaniel | |
2259 Bowditch to @file{rcs2log} on 1999-05-22 with log text @samp{Ignore log | |
2260 messages that start with `#'.}. Then @kbd{C-x v a} visits | |
2261 @file{ChangeLog} and inserts text like this: | |
2262 | |
2263 @iftex | |
2264 @medbreak | |
2265 @end iftex | |
2266 @smallexample | |
2267 @group | |
2268 1999-05-22 Nathaniel Bowditch <nat@@apn.org> | |
2269 | |
2270 * rcs2log: Ignore log messages that start with `#'. | |
2271 @end group | |
2272 @end smallexample | |
2273 @iftex | |
2274 @medbreak | |
2275 @end iftex | |
2276 | |
2277 @noindent | |
2278 You can then edit the new change log entry further as you wish. | |
2279 | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
2280 Some of the new change log entries may duplicate what's already in |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2281 ChangeLog. You will have to remove these duplicates by hand. |
25829 | 2282 |
2283 Normally, the log entry for file @file{foo} is displayed as @samp{* | |
2284 foo: @var{text of log entry}}. The @samp{:} after @file{foo} is omitted | |
2285 if the text of the log entry starts with @w{@samp{(@var{functionname}): | |
2286 }}. For example, if the log entry for @file{vc.el} is | |
2287 @samp{(vc-do-command): Check call-process status.}, then the text in | |
2288 @file{ChangeLog} looks like this: | |
2289 | |
2290 @iftex | |
2291 @medbreak | |
2292 @end iftex | |
2293 @smallexample | |
2294 @group | |
2295 1999-05-06 Nathaniel Bowditch <nat@@apn.org> | |
2296 | |
2297 * vc.el (vc-do-command): Check call-process status. | |
2298 @end group | |
2299 @end smallexample | |
2300 @iftex | |
2301 @medbreak | |
2302 @end iftex | |
2303 | |
2304 When @kbd{C-x v a} adds several change log entries at once, it groups | |
2305 related log entries together if they all are checked in by the same | |
2306 author at nearly the same time. If the log entries for several such | |
2307 files all have the same text, it coalesces them into a single entry. | |
2308 For example, suppose the most recent check-ins have the following log | |
2309 entries: | |
2310 | |
2311 @flushleft | |
2312 @bullet{} For @file{vc.texinfo}: @samp{Fix expansion typos.} | |
2313 @bullet{} For @file{vc.el}: @samp{Don't call expand-file-name.} | |
2314 @bullet{} For @file{vc-hooks.el}: @samp{Don't call expand-file-name.} | |
2315 @end flushleft | |
2316 | |
2317 @noindent | |
2318 They appear like this in @file{ChangeLog}: | |
2319 | |
2320 @iftex | |
2321 @medbreak | |
2322 @end iftex | |
2323 @smallexample | |
2324 @group | |
2325 1999-04-01 Nathaniel Bowditch <nat@@apn.org> | |
2326 | |
2327 * vc.texinfo: Fix expansion typos. | |
2328 | |
2329 * vc.el, vc-hooks.el: Don't call expand-file-name. | |
2330 @end group | |
2331 @end smallexample | |
2332 @iftex | |
2333 @medbreak | |
2334 @end iftex | |
2335 | |
2336 Normally, @kbd{C-x v a} separates log entries by a blank line, but you | |
2337 can mark several related log entries to be clumped together (without an | |
2338 intervening blank line) by starting the text of each related log entry | |
2339 with a label of the form @w{@samp{@{@var{clumpname}@} }}. The label | |
2340 itself is not copied to @file{ChangeLog}. For example, suppose the log | |
2341 entries are: | |
2342 | |
2343 @flushleft | |
2344 @bullet{} For @file{vc.texinfo}: @samp{@{expand@} Fix expansion typos.} | |
2345 @bullet{} For @file{vc.el}: @samp{@{expand@} Don't call expand-file-name.} | |
2346 @bullet{} For @file{vc-hooks.el}: @samp{@{expand@} Don't call expand-file-name.} | |
2347 @end flushleft | |
2348 | |
2349 @noindent | |
2350 Then the text in @file{ChangeLog} looks like this: | |
2351 | |
2352 @iftex | |
2353 @medbreak | |
2354 @end iftex | |
2355 @smallexample | |
2356 @group | |
2357 1999-04-01 Nathaniel Bowditch <nat@@apn.org> | |
2358 | |
2359 * vc.texinfo: Fix expansion typos. | |
2360 * vc.el, vc-hooks.el: Don't call expand-file-name. | |
2361 @end group | |
2362 @end smallexample | |
2363 @iftex | |
2364 @medbreak | |
2365 @end iftex | |
2366 | |
2367 A log entry whose text begins with @samp{#} is not copied to | |
2368 @file{ChangeLog}. For example, if you merely fix some misspellings in | |
2369 comments, you can log the change with an entry beginning with @samp{#} | |
2370 to avoid putting such trivia into @file{ChangeLog}. | |
2371 | |
2372 @node Renaming and VC | |
2373 @subsubsection Renaming VC Work Files and Master Files | |
2374 | |
2375 @findex vc-rename-file | |
2376 When you rename a registered file, you must also rename its master | |
2377 file correspondingly to get proper results. Use @code{vc-rename-file} | |
2378 to rename the source file as you specify, and rename its master file | |
2379 accordingly. It also updates any snapshots (@pxref{Snapshots}) that | |
2380 mention the file, so that they use the new name; despite this, the | |
2381 snapshot thus modified may not completely work (@pxref{Snapshot | |
2382 Caveats}). | |
2383 | |
2384 You cannot use @code{vc-rename-file} on a file that is locked by | |
2385 someone else. | |
2386 | |
2387 @node Version Headers | |
2388 @subsubsection Inserting Version Control Headers | |
2389 | |
2390 Sometimes it is convenient to put version identification strings | |
2391 directly into working files. Certain special strings called | |
2392 @dfn{version headers} are replaced in each successive version by the | |
2393 number of that version. | |
2394 | |
2395 If you are using RCS, and version headers are present in your working | |
2396 files, Emacs can use them to determine the current version and the | |
2397 locking state of the files. This is more reliable than referring to the | |
2398 master files, which is done when there are no version headers. Note | |
2399 that in a multi-branch environment, version headers are necessary to | |
2400 make VC behave correctly (@pxref{Multi-User Branching}). | |
2401 | |
2402 Searching for version headers is controlled by the variable | |
38739 | 2403 @code{vc-consult-headers}. If it is non-@code{nil} (the default), |
2404 Emacs searches for headers to determine the version number you are | |
2405 editing. Setting it to @code{nil} disables this feature. | |
25829 | 2406 |
2407 @kindex C-x v h | |
2408 @findex vc-insert-headers | |
2409 You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to | |
2410 insert a suitable header string. | |
2411 | |
2412 @table @kbd | |
2413 @item C-x v h | |
2414 Insert headers in a file for use with your version-control system. | |
2415 @end table | |
2416 | |
2417 @vindex vc-header-alist | |
2418 The default header string is @samp{@w{$}Id$} for RCS and | |
2419 @samp{@w{%}W%} for SCCS. You can specify other headers to insert by | |
2420 setting the variable @code{vc-header-alist}. Its value is a list of | |
2421 elements of the form @code{(@var{program} . @var{string})} where | |
2422 @var{program} is @code{RCS} or @code{SCCS} and @var{string} is the | |
2423 string to use. | |
2424 | |
2425 Instead of a single string, you can specify a list of strings; then | |
2426 each string in the list is inserted as a separate header on a line of | |
2427 its own. | |
2428 | |
38739 | 2429 It is often necessary to use ``superfluous'' backslashes when |
2430 writing the strings that you put in this variable. For instance, you | |
2431 might write @code{"$Id\$"} rather than @code{"$Id@w{$}"}. The extra | |
2432 backslash prevents the string constant from being interpreted as a | |
2433 header, if the Emacs Lisp file containing it is maintained with | |
2434 version control. | |
25829 | 2435 |
2436 @vindex vc-comment-alist | |
2437 Each header is inserted surrounded by tabs, inside comment delimiters, | |
2438 on a new line at point. Normally the ordinary comment | |
2439 start and comment end strings of the current mode are used, but for | |
2440 certain modes, there are special comment delimiters for this purpose; | |
2441 the variable @code{vc-comment-alist} specifies them. Each element of | |
2442 this list has the form @code{(@var{mode} @var{starter} @var{ender})}. | |
2443 | |
2444 @vindex vc-static-header-alist | |
2445 The variable @code{vc-static-header-alist} specifies further strings | |
2446 to add based on the name of the buffer. Its value should be a list of | |
2447 elements of the form @code{(@var{regexp} . @var{format})}. Whenever | |
2448 @var{regexp} matches the buffer name, @var{format} is inserted as part | |
2449 of the header. A header line is inserted for each element that matches | |
2450 the buffer name, and for each string specified by | |
2451 @code{vc-header-alist}. The header line is made by processing the | |
2452 string from @code{vc-header-alist} with the format taken from the | |
2453 element. The default value for @code{vc-static-header-alist} is as follows: | |
2454 | |
2455 @example | |
2456 @group | |
2457 (("\\.c$" . | |
2458 "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\ | |
2459 #endif /* lint */\n")) | |
2460 @end group | |
2461 @end example | |
2462 | |
2463 @noindent | |
2464 It specifies insertion of text of this form: | |
2465 | |
2466 @example | |
2467 @group | |
2468 | |
2469 #ifndef lint | |
2470 static char vcid[] = "@var{string}"; | |
2471 #endif /* lint */ | |
2472 @end group | |
2473 @end example | |
2474 | |
2475 @noindent | |
2476 Note that the text above starts with a blank line. | |
2477 | |
2478 If you use more than one version header in a file, put them close | |
2479 together in the file. The mechanism in @code{revert-buffer} that | |
2480 preserves markers may not handle markers positioned between two version | |
2481 headers. | |
2482 | |
2483 @node Customizing VC | |
2484 @subsection Customizing VC | |
2485 | |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2486 @vindex vc-handled-backends |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2487 The variable @code{vc-handled-backends} determines which version |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2488 control systems VC should handle. The default value is @code{(RCS CVS |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2489 SCCS)}, so it contains all three version systems that are currently |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2490 supported. If you want VC to ignore one or more of these systems, |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2491 exclude its name from the list. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2492 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2493 The order of systems in the list is significant: when you visit a file |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2494 registered in more than one system (@pxref{Local Version Control}), |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2495 VC uses the system that comes first in @code{vc-handled-backends} by |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2496 default. The order is also significant when you register a file for |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2497 the first time, @pxref{Registering} for details. |
25829 | 2498 |
2499 @menu | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2500 * General VC Options:: Options that apply to multiple back ends. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2501 * RCS and SCCS:: Options for RCS and SCCS. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2502 * CVS Options:: Options for CVS. |
25829 | 2503 @end menu |
2504 | |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2505 @node General VC Options |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2506 @subsubsection General Options |
25829 | 2507 |
2508 @vindex vc-make-backup-files | |
2509 Emacs normally does not save backup files for source files that are | |
2510 maintained with version control. If you want to make backup files even | |
2511 for files that use version control, set the variable | |
2512 @code{vc-make-backup-files} to a non-@code{nil} value. | |
2513 | |
2514 @vindex vc-keep-workfiles | |
2515 Normally the work file exists all the time, whether it is locked or | |
2516 not. If you set @code{vc-keep-workfiles} to @code{nil}, then checking | |
2517 in a new version with @kbd{C-x C-q} deletes the work file; but any | |
2518 attempt to visit the file with Emacs creates it again. (With CVS, work | |
2519 files are always kept.) | |
2520 | |
2521 @vindex vc-follow-symlinks | |
2522 Editing a version-controlled file through a symbolic link can be | |
2523 dangerous. It bypasses the version control system---you can edit the | |
2524 file without locking it, and fail to check your changes in. Also, | |
2525 your changes might overwrite those of another user. To protect against | |
2526 this, VC checks each symbolic link that you visit, to see if it points | |
2527 to a file under version control. | |
2528 | |
2529 The variable @code{vc-follow-symlinks} controls what to do when a | |
2530 symbolic link points to a version-controlled file. If it is @code{nil}, | |
2531 VC only displays a warning message. If it is @code{t}, VC automatically | |
2532 follows the link, and visits the real file instead, telling you about | |
2533 this in the echo area. If the value is @code{ask} (the default), VC | |
2534 asks you each time whether to follow the link. | |
2535 | |
2536 @vindex vc-suppress-confirm | |
2537 If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x C-q} | |
2538 and @kbd{C-x v i} can save the current buffer without asking, and | |
2539 @kbd{C-x v u} also operates without asking for confirmation. (This | |
2540 variable does not affect @kbd{C-x v c}; that operation is so drastic | |
2541 that it should always ask for confirmation.) | |
2542 | |
2543 @vindex vc-command-messages | |
2544 VC mode does much of its work by running the shell commands for RCS, | |
2545 CVS and SCCS. If @code{vc-command-messages} is non-@code{nil}, VC | |
2546 displays messages to indicate which shell commands it runs, and | |
2547 additional messages when the commands finish. | |
2548 | |
2549 @vindex vc-path | |
2550 You can specify additional directories to search for version control | |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2551 programs by setting the variable @code{vc-path}. These directories |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2552 are searched before the usual search path. It is rarely necessary to |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2553 set this variable, because VC normally finds the proper files |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2554 automatically. |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2555 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2556 @node RCS and SCCS |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2557 @subsubsection Options for RCS and SCCS |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2558 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2559 @cindex non-strict locking (RCS) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2560 @cindex locking, non-strict (RCS) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2561 By default, RCS uses locking to coordinate the activities of several |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2562 users, but there is a mode called @dfn{non-strict locking} in which |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2563 you can check-in changes without locking the file first. Use |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2564 @samp{rcs -U} to switch to non-strict locking for a particular file, |
39263 | 2565 see the @code{rcs} manual page for details. |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2566 |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2567 When deducing the version control state of an RCS file, VC first |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2568 looks for an RCS version header string in the file (@pxref{Version |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2569 Headers}). If there is no header string, VC normally looks at the |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2570 file permissions of the work file; this is fast. But there might be |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2571 situations when the file permissions cannot be trusted. In this case |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2572 the master file has to be consulted, which is rather expensive. Also |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2573 the master file can only tell you @emph{if} there's any lock on the |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2574 file, but not whether your work file really contains that locked |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2575 version. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2576 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2577 @vindex vc-consult-headers |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2578 You can tell VC not to use version headers to determine the file |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2579 status by setting @code{vc-consult-headers} to @code{nil}. VC then |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2580 always uses the file permissions (if it is supposed to trust them), or |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2581 else checks the master file. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2582 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2583 @vindex vc-mistrust-permissions |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2584 You can specify the criterion for whether to trust the file |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2585 permissions by setting the variable @code{vc-mistrust-permissions}. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2586 Its value can be @code{t} (always mistrust the file permissions and |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2587 check the master file), @code{nil} (always trust the file |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2588 permissions), or a function of one argument which makes the decision. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2589 The argument is the directory name of the @file{RCS} subdirectory. A |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2590 non-@code{nil} value from the function says to mistrust the file |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2591 permissions. If you find that the file permissions of work files are |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2592 changed erroneously, set @code{vc-mistrust-permissions} to @code{t}. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2593 Then VC always checks the master file to determine the file's status. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2594 |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2595 VC determines the version control state of files under SCCS much as |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2596 with RCS. It does not consider SCCS version headers, though. Thus, |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2597 the variable @code{vc-mistrust-permissions} affects SCCS use, but |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2598 @code{vc-consult-headers} does not. |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2599 |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2600 @node CVS Options |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2601 @subsubsection Options specific for CVS |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2602 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2603 @cindex locking (CVS) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2604 By default, CVS does not use locking to coordinate the activities of |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2605 several users; anyone can change a work file at any time. However, |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2606 there are ways to restrict this, resulting in behavior that resembles |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2607 locking. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2608 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2609 @cindex CVSREAD environment variable (CVS) |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2610 For one thing, you can set the @env{CVSREAD} environment variable |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2611 (the value you use makes no difference). If this variable is defined, |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2612 CVS makes your work files read-only by default. In Emacs, you must |
39263 | 2613 type @kbd{C-x C-q} to make the file writable, so that editing works |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2614 in fact similar as if locking was used. Note however, that no actual |
39263 | 2615 locking is performed, so several users can make their files writable |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2616 at the same time. When setting @env{CVSREAD} for the first time, make |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2617 sure to check out all your modules anew, so that the file protections |
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2618 are set correctly. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2619 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2620 @cindex cvs watch feature |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2621 @cindex watching files (CVS) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2622 Another way to achieve something similar to locking is to use the |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2623 @dfn{watch} feature of CVS. If a file is being watched, CVS makes it |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2624 read-only by default, and you must also use @kbd{C-x C-q} in Emacs to |
39263 | 2625 make it writable. VC calls @code{cvs edit} to make the file writable, |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2626 and CVS takes care to notify other developers of the fact that you |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2627 intend to change the file. See the CVS documentation for details on |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2628 using the watch feature. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2629 |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2630 @vindex vc-cvs-stay-local |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2631 @cindex remote repositories (CVS) |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2632 When a file's repository is on a remote machine, VC tries to keep |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2633 network interactions to a minimum. This is controlled by the variable |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2634 @code{vc-cvs-stay-local}. If it is @code{t} (the default), then VC uses |
36356
a10bf38295d2
(CVS Options): Mention that t is the default for vc-cvs-stay-local.
André Spiegel <spiegel@gnu.org>
parents:
36355
diff
changeset
|
2635 only the entry in the local CVS subdirectory to determine the file's |
a10bf38295d2
(CVS Options): Mention that t is the default for vc-cvs-stay-local.
André Spiegel <spiegel@gnu.org>
parents:
36355
diff
changeset
|
2636 state (and possibly information returned by previous CVS commands). One |
a10bf38295d2
(CVS Options): Mention that t is the default for vc-cvs-stay-local.
André Spiegel <spiegel@gnu.org>
parents:
36355
diff
changeset
|
2637 consequence of this is that when you have modified a file, and somebody |
a10bf38295d2
(CVS Options): Mention that t is the default for vc-cvs-stay-local.
André Spiegel <spiegel@gnu.org>
parents:
36355
diff
changeset
|
2638 else has already checked in other changes to the file, you are not |
a10bf38295d2
(CVS Options): Mention that t is the default for vc-cvs-stay-local.
André Spiegel <spiegel@gnu.org>
parents:
36355
diff
changeset
|
2639 notified of it until you actually try to commit. (But you can try to |
a10bf38295d2
(CVS Options): Mention that t is the default for vc-cvs-stay-local.
André Spiegel <spiegel@gnu.org>
parents:
36355
diff
changeset
|
2640 pick up any recent changes from the repository first, using @kbd{C-x v m |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2641 @key{RET}}, @pxref{Merging}). |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2642 |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2643 When @code{vc-cvs-stay-local} is @code{t}, VC also makes local |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2644 version backups, so that simple diff and revert operations are |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2645 completely local (@pxref{Version Backups}). |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2646 |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2647 On the other hand, if you set @code{vc-cvs-stay-local} to @code{nil}, |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2648 then VC queries the remote repository @emph{before} it decides what to |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2649 do in @code{vc-next-action} (@kbd{C-x v v}), just as it does for local |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2650 repositories. It also does not make any version backups. |
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2651 |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2652 You can also set @code{vc-cvs-stay-local} to a regular expression |
39263 | 2653 that is matched against the repository host name; VC then stays local |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2654 only for repositories from hosts that match the pattern. |
36355
d8c0e3d0f0aa
VC section updated. Added a subsection on remote repositories,
André Spiegel <spiegel@gnu.org>
parents:
36327
diff
changeset
|
2655 |
25829 | 2656 @node Directories |
2657 @section File Directories | |
2658 | |
2659 @cindex file directory | |
2660 @cindex directory listing | |
2661 The file system groups files into @dfn{directories}. A @dfn{directory | |
2662 listing} is a list of all the files in a directory. Emacs provides | |
2663 commands to create and delete directories, and to make directory | |
2664 listings in brief format (file names only) and verbose format (sizes, | |
2665 dates, and authors included). There is also a directory browser called | |
2666 Dired; see @ref{Dired}. | |
2667 | |
2668 @table @kbd | |
2669 @item C-x C-d @var{dir-or-pattern} @key{RET} | |
2670 Display a brief directory listing (@code{list-directory}). | |
2671 @item C-u C-x C-d @var{dir-or-pattern} @key{RET} | |
2672 Display a verbose directory listing. | |
2673 @item M-x make-directory @key{RET} @var{dirname} @key{RET} | |
2674 Create a new directory named @var{dirname}. | |
2675 @item M-x delete-directory @key{RET} @var{dirname} @key{RET} | |
2676 Delete the directory named @var{dirname}. It must be empty, | |
2677 or you get an error. | |
2678 @end table | |
2679 | |
2680 @findex list-directory | |
2681 @kindex C-x C-d | |
2682 The command to display a directory listing is @kbd{C-x C-d} | |
2683 (@code{list-directory}). It reads using the minibuffer a file name | |
2684 which is either a directory to be listed or a wildcard-containing | |
2685 pattern for the files to be listed. For example, | |
2686 | |
2687 @example | |
2688 C-x C-d /u2/emacs/etc @key{RET} | |
2689 @end example | |
2690 | |
2691 @noindent | |
2692 lists all the files in directory @file{/u2/emacs/etc}. Here is an | |
2693 example of specifying a file name pattern: | |
2694 | |
2695 @example | |
2696 C-x C-d /u2/emacs/src/*.c @key{RET} | |
2697 @end example | |
2698 | |
38870
d44abb4e68b2
Don't use "print" for displaying a message.
Richard M. Stallman <rms@gnu.org>
parents:
38768
diff
changeset
|
2699 Normally, @kbd{C-x C-d} displays a brief directory listing containing |
25829 | 2700 just file names. A numeric argument (regardless of value) tells it to |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2701 make a verbose listing including sizes, dates, and owners (like |
25829 | 2702 @samp{ls -l}). |
2703 | |
2704 @vindex list-directory-brief-switches | |
2705 @vindex list-directory-verbose-switches | |
2706 The text of a directory listing is obtained by running @code{ls} in an | |
2707 inferior process. Two Emacs variables control the switches passed to | |
2708 @code{ls}: @code{list-directory-brief-switches} is a string giving the | |
2709 switches to use in brief listings (@code{"-CF"} by default), and | |
2710 @code{list-directory-verbose-switches} is a string giving the switches to | |
2711 use in a verbose listing (@code{"-l"} by default). | |
2712 | |
2713 @node Comparing Files | |
2714 @section Comparing Files | |
2715 @cindex comparing files | |
2716 | |
2717 @findex diff | |
2718 @vindex diff-switches | |
2719 The command @kbd{M-x diff} compares two files, displaying the | |
38739 | 2720 differences in an Emacs buffer named @samp{*diff*}. It works by |
2721 running the @code{diff} program, using options taken from the variable | |
2722 @code{diff-switches}. The value of @code{diff-switches} should be a | |
2723 string; the default is @code{"-c"} to specify a context diff. | |
25829 | 2724 |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2725 The buffer @samp{*diff*} has Compilation mode as its major mode, so |
25829 | 2726 you can use @kbd{C-x `} to visit successive changed locations in the two |
2727 source files. You can also move to a particular hunk of changes and | |
2728 type @key{RET} or @kbd{C-c C-c}, or click @kbd{Mouse-2} on it, to move | |
2729 to the corresponding source location. You can also use the other | |
2730 special commands of Compilation mode: @key{SPC} and @key{DEL} for | |
2731 scrolling, and @kbd{M-p} and @kbd{M-n} for cursor motion. | |
2732 @xref{Compilation}. | |
2733 | |
2734 @findex diff-backup | |
2735 The command @kbd{M-x diff-backup} compares a specified file with its most | |
2736 recent backup. If you specify the name of a backup file, | |
2737 @code{diff-backup} compares it with the source file that it is a backup | |
2738 of. | |
2739 | |
2740 @findex compare-windows | |
2741 The command @kbd{M-x compare-windows} compares the text in the current | |
2742 window with that in the next window. Comparison starts at point in each | |
2743 window, and each starting position is pushed on the mark ring in its | |
2744 respective buffer. Then point moves forward in each window, a character | |
2745 at a time, until a mismatch between the two windows is reached. Then | |
2746 the command is finished. For more information about windows in Emacs, | |
2747 @ref{Windows}. | |
2748 | |
2749 @vindex compare-ignore-case | |
2750 With a numeric argument, @code{compare-windows} ignores changes in | |
2751 whitespace. If the variable @code{compare-ignore-case} is | |
2752 non-@code{nil}, it ignores differences in case as well. | |
2753 | |
31076 | 2754 @findex diff-mode |
2755 @cindex diffs | |
2756 @cindex patches | |
2757 @cindex Diff mode | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2758 Differences between versions of files are often distributed as |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2759 @dfn{patches}, which are the output from @command{diff} or a version |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2760 control system that uses @command{diff}. @kbd{M-x diff-mode} turns on |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2761 Diff mode, a major mode for viewing and editing patches, either as |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2762 ``unified diffs'' or ``context diffs.'' |
31076 | 2763 |
2764 @cindex Smerge mode | |
2765 @findex smerge-mode | |
2766 @cindex failed merges | |
2767 @cindex merges, failed | |
36274
91f2160d4468
Remove two more redundant index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
36263
diff
changeset
|
2768 @cindex comparing 3 files (@code{diff3}) |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2769 You can use @kbd{M-x smerge-mode} to turn on Smerge mode, a minor |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2770 mode for editing output from the @command{diff3} program. This is |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2771 typically the result of a failed merge from a version control system |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2772 ``update'' outside VC, due to conflicting changes to a file. Smerge |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2773 mode provides commands to resolve conflicts by selecting specific |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2774 changes. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2775 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2776 See also @ref{Emerge}, and @ref{Top,,, ediff, The Ediff Manual}, for |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2777 convenient facilities for merging two similar files. |
25829 | 2778 |
2779 @node Misc File Ops | |
2780 @section Miscellaneous File Operations | |
2781 | |
2782 Emacs has commands for performing many other operations on files. | |
2783 All operate on one file; they do not accept wildcard file names. | |
2784 | |
2785 @findex view-file | |
2786 @cindex viewing | |
2787 @cindex View mode | |
2788 @cindex mode, View | |
2789 @kbd{M-x view-file} allows you to scan or read a file by sequential | |
2790 screenfuls. It reads a file name argument using the minibuffer. After | |
2791 reading the file into an Emacs buffer, @code{view-file} displays the | |
2792 beginning. You can then type @key{SPC} to scroll forward one windowful, | |
2793 or @key{DEL} to scroll backward. Various other commands are provided | |
2794 for moving around in the file, but none for changing it; type @kbd{?} | |
2795 while viewing for a list of them. They are mostly the same as normal | |
2796 Emacs cursor motion commands. To exit from viewing, type @kbd{q}. | |
2797 The commands for viewing are defined by a special major mode called View | |
2798 mode. | |
2799 | |
2800 A related command, @kbd{M-x view-buffer}, views a buffer already present | |
2801 in Emacs. @xref{Misc Buffer}. | |
2802 | |
38739 | 2803 @kindex C-x i |
25829 | 2804 @findex insert-file |
38739 | 2805 @kbd{M-x insert-file} (also @kbd{C-x i}) inserts a copy of the |
2806 contents of the specified file into the current buffer at point, | |
2807 leaving point unchanged before the contents and the mark after them. | |
25829 | 2808 |
2809 @findex write-region | |
2810 @kbd{M-x write-region} is the inverse of @kbd{M-x insert-file}; it | |
2811 copies the contents of the region into the specified file. @kbd{M-x | |
2812 append-to-file} adds the text of the region to the end of the specified | |
2813 file. @xref{Accumulating Text}. | |
2814 | |
2815 @findex delete-file | |
2816 @cindex deletion (of files) | |
2817 @kbd{M-x delete-file} deletes the specified file, like the @code{rm} | |
2818 command in the shell. If you are deleting many files in one directory, it | |
2819 may be more convenient to use Dired (@pxref{Dired}). | |
2820 | |
2821 @findex rename-file | |
2822 @kbd{M-x rename-file} reads two file names @var{old} and @var{new} using | |
38739 | 2823 the minibuffer, then renames file @var{old} as @var{new}. If the file name |
25829 | 2824 @var{new} already exists, you must confirm with @kbd{yes} or renaming is not |
2825 done; this is because renaming causes the old meaning of the name @var{new} | |
2826 to be lost. If @var{old} and @var{new} are on different file systems, the | |
2827 file @var{old} is copied and deleted. | |
2828 | |
2829 @findex add-name-to-file | |
38739 | 2830 @cindex hard links (creation) |
25829 | 2831 The similar command @kbd{M-x add-name-to-file} is used to add an |
2832 additional name to an existing file without removing its old name. | |
38739 | 2833 The new name is created as a ``hard link'' to the existing file. |
25829 | 2834 The new name must belong on the same file system that the file is on. |
37349
9aada84f08c8
Clarify link commands for MS systems.
Richard M. Stallman <rms@gnu.org>
parents:
37315
diff
changeset
|
2835 On Windows, this command works only if the file resides in an NTFS |
9aada84f08c8
Clarify link commands for MS systems.
Richard M. Stallman <rms@gnu.org>
parents:
37315
diff
changeset
|
2836 file system. On MS-DOS, it works by copying the file. |
25829 | 2837 |
2838 @findex copy-file | |
2839 @cindex copying files | |
2840 @kbd{M-x copy-file} reads the file @var{old} and writes a new file named | |
2841 @var{new} with the same contents. Confirmation is required if a file named | |
2842 @var{new} already exists, because copying has the consequence of overwriting | |
2843 the old contents of the file @var{new}. | |
2844 | |
2845 @findex make-symbolic-link | |
2846 @kbd{M-x make-symbolic-link} reads two file names @var{target} and | |
38064
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
2847 @var{linkname}, then creates a symbolic link named @var{linkname}, which |
b8ea59337400
Proofreading fixes from Art the Lemming <lemming@gimp.shacknet.nu>.
Eli Zaretskii <eliz@gnu.org>
parents:
38020
diff
changeset
|
2848 points at @var{target}. The effect is that future attempts to open file |
25829 | 2849 @var{linkname} will refer to whatever file is named @var{target} at the |
2850 time the opening is done, or will get an error if the name @var{target} is | |
2851 not in use at that time. This command does not expand the argument | |
2852 @var{target}, so that it allows you to specify a relative name | |
2853 as the target of the link. | |
2854 | |
2855 Confirmation is required when creating the link if @var{linkname} is | |
37349
9aada84f08c8
Clarify link commands for MS systems.
Richard M. Stallman <rms@gnu.org>
parents:
37315
diff
changeset
|
2856 in use. Note that not all systems support symbolic links; on systems |
9aada84f08c8
Clarify link commands for MS systems.
Richard M. Stallman <rms@gnu.org>
parents:
37315
diff
changeset
|
2857 that don't support them, this command is not defined. |
25829 | 2858 |
2859 @node Compressed Files | |
2860 @section Accessing Compressed Files | |
2861 @cindex compression | |
2862 @cindex uncompression | |
2863 @cindex Auto Compression mode | |
2864 @cindex mode, Auto Compression | |
2865 @pindex gzip | |
2866 | |
2867 @findex auto-compression-mode | |
28123
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2868 @vindex auto-compression-mode |
25829 | 2869 Emacs comes with a library that can automatically uncompress |
2870 compressed files when you visit them, and automatically recompress them | |
2871 if you alter them and save them. To enable this feature, type the | |
28123
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2872 command @kbd{M-x auto-compression-mode}. You can enable it permanently |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2873 by customizing the option @code{auto-compression-mode}. |
25829 | 2874 |
2875 When automatic compression (which implies automatic uncompression as | |
2876 well) is enabled, Emacs recognizes compressed files by their file names. | |
2877 File names ending in @samp{.gz} indicate a file compressed with | |
2878 @code{gzip}. Other endings indicate other compression programs. | |
2879 | |
2880 Automatic uncompression and compression apply to all the operations in | |
2881 which Emacs uses the contents of a file. This includes visiting it, | |
2882 saving it, inserting its contents into a buffer, loading it, and byte | |
2883 compiling it. | |
2884 | |
28123
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2885 @node File Archives |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2886 @section File Archives |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2887 @cindex mode, tar |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2888 @cindex Tar mode |
36274
91f2160d4468
Remove two more redundant index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
36263
diff
changeset
|
2889 @cindex file archives |
29683
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2890 |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2891 A file whose name ends in @samp{.tar} is normally an @dfn{archive} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2892 made by the @code{tar} program. Emacs views these files in a special |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2893 mode called Tar mode which provides a Dired-like list of the contents |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2894 (@pxref{Dired}). You can move around through the list just as you |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2895 would in Dired, and visit the subfiles contained in the archive. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2896 However, not all Dired commands are available in Tar mode. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2897 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2898 If you enable Auto Compression mode (@pxref{Compressed Files}), then |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2899 Tar mode is used also for compressed archives---files with extensions |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2900 @samp{.tgz}, @code{.tar.Z} and @code{.tar.gz}. |
29683
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2901 |
36385
d7ca85bd6906
Clean up recent VC updates.
Richard M. Stallman <rms@gnu.org>
parents:
36360
diff
changeset
|
2902 The keys @kbd{e}, @kbd{f} and @key{RET} all extract a component file |
29683
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2903 into its own buffer. You can edit it there and when you save the buffer |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2904 the edited version will replace the version in the Tar buffer. @kbd{v} |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2905 extracts a file into a buffer in View mode. @kbd{o} extracts the file |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2906 and displays it in another window, so you could edit the file and |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2907 operate on the archive simultaneously. @kbd{d} marks a file for |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2908 deletion when you later use @kbd{x}, and @kbd{u} unmarks a file, as in |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2909 Dired. @kbd{C} copies a file from the archive to disk and @kbd{R} |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2910 renames a file. @kbd{g} reverts the buffer from the archive on disk. |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2911 |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2912 The keys @kbd{M}, @kbd{G}, and @kbd{O} change the file's permission |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2913 bits, group, and owner, respectively. |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2914 |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2915 If your display supports colors and the mouse, moving the mouse |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2916 pointer across a file name highlights that file name, indicating that |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2917 you can click on it. Clicking @kbd{Mouse-2} on the highlighted file |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2918 name extracts the file into a buffer and displays that buffer. |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2919 |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2920 Saving the Tar buffer writes a new version of the archive to disk with |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2921 the changes you made to the components. |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2922 |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2923 You don't need the @code{tar} program to use Tar mode---Emacs reads |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2924 the archives directly. However, accessing compressed archives |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2925 requires the appropriate uncompression program. |
31076 | 2926 |
28123
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2927 @cindex Archive mode |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2928 @cindex mode, archive |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2929 @cindex @code{arc} |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2930 @cindex @code{jar} |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2931 @cindex @code{zip} |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2932 @cindex @code{lzh} |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2933 @cindex @code{zoo} |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2934 @pindex arc |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2935 @pindex jar |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2936 @pindex zip |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2937 @pindex lzh |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2938 @pindex zoo |
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2939 @cindex Java class archives |
29683
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2940 @cindex unzip archives |
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2941 A separate but similar Archive mode is used for archives produced by |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2942 the programs @code{arc}, @code{jar}, @code{lzh}, @code{zip}, and |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2943 @code{zoo}, which have extensions corresponding to the program names. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2944 |
39263 | 2945 The key bindings of Archive mode are similar to those in Tar mode, |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2946 with the addition of the @kbd{m} key which marks a file for subsequent |
29683
324386e590b7
(File Archives): Remove redundant index entries. Add some more Tar
Eli Zaretskii <eliz@gnu.org>
parents:
29556
diff
changeset
|
2947 operations, and @kbd{M-@key{DEL}} which unmarks all the marked files. |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2948 Also, the @kbd{a} key toggles the display of detailed file |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2949 information, for those archive types where it won't fit in a single |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2950 line. Operations such as renaming a subfile, or changing its mode or |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2951 owner, are supported only for some of the archive formats. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2952 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2953 Unlike Tar mode, Archive mode runs the archiving program to unpack |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2954 and repack archives. Details of the program names and their options |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
2955 can be set in the @samp{Archive} Customize group. However, you don't |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2956 need these programs to look at the archive table of contents, only to |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
2957 extract or manipulate the subfiles in the archive. |
28123
6e2e72ee55a6
(Compressed Files): Note custom option.
Dave Love <fx@gnu.org>
parents:
26105
diff
changeset
|
2958 |
25829 | 2959 @node Remote Files |
2960 @section Remote Files | |
2961 | |
2962 @cindex FTP | |
2963 @cindex remote file access | |
2964 You can refer to files on other machines using a special file name syntax: | |
2965 | |
2966 @example | |
2967 @group | |
2968 /@var{host}:@var{filename} | |
2969 /@var{user}@@@var{host}:@var{filename} | |
26105 | 2970 /@var{user}@@@var{host}#@var{port}:@var{filename} |
25829 | 2971 @end group |
2972 @end example | |
2973 | |
2974 @noindent | |
2975 When you do this, Emacs uses the FTP program to read and write files on | |
2976 the specified host. It logs in through FTP using your user name or the | |
2977 name @var{user}. It may ask you for a password from time to time; this | |
26105 | 2978 is used for logging in on @var{host}. The form using @var{port} allows |
2979 you to access servers running on a non-default TCP port. | |
25829 | 2980 |
35908
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
2981 @cindex backups for remote files |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
2982 @vindex ange-ftp-make-backup-files |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
2983 If you want to disable backups for remote files, set the variable |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
2984 @code{ange-ftp-make-backup-files} to @code{nil}. |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
2985 |
44717
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
2986 By default, the auto-save files (@pxref{Auto Save Files}) for remote |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
2987 files are made in the temporary file directory on the local machine. |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
2988 This is achieved using the variable @code{auto-save-file-name-transforms}. |
1fdf19dbc2e8
(Auto Save Files): Mention auto-save-file-name-transforms.
Glenn Morris <rgm@gnu.org>
parents:
44588
diff
changeset
|
2989 |
25829 | 2990 @cindex ange-ftp |
2991 @vindex ange-ftp-default-user | |
35908
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
2992 @cindex user name for remote file access |
25829 | 2993 Normally, if you do not specify a user name in a remote file name, |
2994 that means to use your own user name. But if you set the variable | |
2995 @code{ange-ftp-default-user} to a string, that string is used instead. | |
2996 (The Emacs package that implements FTP file access is called | |
2997 @code{ange-ftp}.) | |
2998 | |
35908
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
2999 @cindex anonymous FTP |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3000 @vindex ange-ftp-generate-anonymous-password |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3001 To visit files accessible by anonymous FTP, you use special user |
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36136
diff
changeset
|
3002 names @samp{anonymous} or @samp{ftp}. Passwords for these user names |
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36136
diff
changeset
|
3003 are handled specially. The variable |
35908
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3004 @code{ange-ftp-generate-anonymous-password} controls what happens: if |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3005 the value of this variable is a string, then that string is used as |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3006 the password; if non-@code{nil} (the default), then the value of |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3007 @code{user-mail-address} is used; if @code{nil}, the user is prompted |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3008 for a password as normal. |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3009 |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3010 @cindex firewall, and accessing remote files |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3011 @cindex gateway, and remote file access with @code{ange-ftp} |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3012 @vindex ange-ftp-smart-gateway |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3013 @vindex ange-ftp-gateway-host |
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3014 Sometimes you may be unable to access files on a remote machine |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3015 because a @dfn{firewall} in between blocks the connection for security |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3016 reasons. If you can log in on a @dfn{gateway} machine from which the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3017 target files @emph{are} accessible, and whose FTP server supports |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3018 gatewaying features, you can still use remote file names; all you have |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3019 to do is specify the name of the gateway machine by setting the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3020 variable @code{ange-ftp-gateway-host}, and set |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3021 @code{ange-ftp-smart-gateway} to @code{t}. Otherwise you may be able |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3022 to make remote file names work, but the procedure is complex. You can |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3023 read the instructions by typing @kbd{M-x finder-commentary @key{RET} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3024 ange-ftp @key{RET}}. |
35908
4ba2a6029c03
(Remote Files): Explain how to use ange-ftp behind firewalls. Add a
Eli Zaretskii <eliz@gnu.org>
parents:
35731
diff
changeset
|
3025 |
25829 | 3026 @vindex file-name-handler-alist |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3027 @cindex disabling remote files |
26105 | 3028 You can entirely turn off the FTP file name feature by removing the |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
3029 entries @code{ange-ftp-completion-hook-function} and |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
3030 @code{ange-ftp-hook-function} from the variable |
28327
f7b17a6af3db
(Visiting): List wildcard chars. Mention find-file-wildcards.
Dave Love <fx@gnu.org>
parents:
28123
diff
changeset
|
3031 @code{file-name-handler-alist}. You can turn off the feature in |
f7b17a6af3db
(Visiting): List wildcard chars. Mention find-file-wildcards.
Dave Love <fx@gnu.org>
parents:
28123
diff
changeset
|
3032 individual cases by quoting the file name with @samp{/:} (@pxref{Quoted |
f7b17a6af3db
(Visiting): List wildcard chars. Mention find-file-wildcards.
Dave Love <fx@gnu.org>
parents:
28123
diff
changeset
|
3033 File Names}). |
25829 | 3034 |
3035 @node Quoted File Names | |
3036 @section Quoted File Names | |
3037 | |
3038 @cindex quoting file names | |
3039 You can @dfn{quote} an absolute file name to prevent special | |
3040 characters and syntax in it from having their special effects. | |
3041 The way to do this is to add @samp{/:} at the beginning. | |
3042 | |
3043 For example, you can quote a local file name which appears remote, to | |
3044 prevent it from being treated as a remote file name. Thus, if you have | |
3045 a directory named @file{/foo:} and a file named @file{bar} in it, you | |
3046 can refer to that file in Emacs as @samp{/:/foo:/bar}. | |
3047 | |
3048 @samp{/:} can also prevent @samp{~} from being treated as a special | |
3049 character for a user's home directory. For example, @file{/:/tmp/~hack} | |
3050 refers to a file whose name is @file{~hack} in directory @file{/tmp}. | |
3051 | |
44143
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3052 Quoting with @samp{/:} is also a way to enter in the minibuffer a |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3053 file name that contains @samp{$}. In order for this to work, the |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3054 @samp{/:} must be at the beginning of the minibuffer contents. (You |
44327
1e166973cd8b
Don't use @samp in an anchor.
Richard M. Stallman <rms@gnu.org>
parents:
44143
diff
changeset
|
3055 can also double each @samp{$}; see @ref{File Names with $}.) |
25829 | 3056 |
3057 You can also quote wildcard characters with @samp{/:}, for visiting. | |
44143
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3058 For example, @file{/:/tmp/foo*bar} visits the file |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3059 @file{/tmp/foo*bar}. |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3060 |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3061 Another method of getting the same result is to enter |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3062 @file{/tmp/foo[*]bar}, which is a wildcard specification that matches |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3063 only @file{/tmp/foo*bar}. However, in many cases there is no need to |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3064 quote the wildcard characters because even unquoted they give the |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3065 right result. For example, if the only file name in @file{/tmp} that |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3066 starts with @samp{foo} and ends with @samp{bar} is @file{foo*bar}, |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3067 then specifying @file{/tmp/foo*bar} will visit only |
f7a64b7a993d
(Quoted File Names): Minor clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
44086
diff
changeset
|
3068 @file{/tmp/foo*bar}. |
28526
297e03ccd7e6
(Backup): backup-enable-predicate.
Dave Love <fx@gnu.org>
parents:
28327
diff
changeset
|
3069 |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3070 @node File Name Cache |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3071 @section File Name Cache |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3072 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3073 @cindex file name caching |
28671 | 3074 @cindex cache of file names |
3075 @pindex find | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3076 @kindex C-@key{TAB} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3077 @findex file-cache-minibuffer-complete |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3078 You can use the @dfn{file name cache} to make it easy to locate a |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3079 file by name, without having to remember exactly where it is located. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3080 When typing a file name in the minibuffer, @kbd{C-@key{tab}} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3081 (@code{file-cache-minibuffer-complete}) completes it using the file |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3082 name cache. If you repeat @kbd{C-@key{tab}}, that cycles through the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3083 possible completions of what you had originally typed. Note that the |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3084 @kbd{C-@key{tab}} character cannot be typed on most text-only |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3085 terminals. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3086 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3087 The file name cache does not fill up automatically. Instead, you |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3088 load file names into the cache using these commands: |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3089 |
31076 | 3090 @findex file-cache-add-directory |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3091 @table @kbd |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3092 @item M-x file-cache-add-directory @key{RET} @var{directory} @key{RET} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3093 Add each file name in @var{directory} to the file name cache. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3094 @item M-x file-cache-add-directory-using-find @key{RET} @var{directory} @key{RET} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3095 Add each file name in @var{directory} and all of its nested |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3096 subdirectories to the file name cache. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3097 @item M-x file-cache-add-directory-using-locate @key{RET} @var{directory} @key{RET} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3098 Add each file name in @var{directory} and all of its nested |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3099 subdirectories to the file name cache, using @command{locate} to find |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3100 them all. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3101 @item M-x file-cache-add-directory-list @key{RET} @var{variable} @key{RET} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3102 Add each file name in each directory listed in @var{variable} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3103 to the file name cache. @var{variable} should be a Lisp variable |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3104 such as @code{load-path} or @code{exec-path}, whose value is a list |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3105 of directory names. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3106 @item M-x file-cache-clear-cache @key{RET} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3107 Clear the cache; that is, remove all file names from it. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3108 @end table |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3109 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3110 @node File Conveniences |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3111 @section Convenience Features for Finding Files |
31076 | 3112 |
3113 @findex recentf-mode | |
3114 @vindex recentf-mode | |
3115 @findex recentf-save-list | |
3116 @findex recentf-edit-list | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3117 If you enable Recentf mode, with @kbd{M-x recentf-mode}, the |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
3118 @samp{File} menu includes a submenu containing a list of recently |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3119 opened files. @kbd{M-x recentf-save-list} saves the current |
37315
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
3120 @code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} |
702729e72132
Change @var to @code in many places.
Richard M. Stallman <rms@gnu.org>
parents:
37090
diff
changeset
|
3121 edits it. |
32221 | 3122 |
3123 @findex auto-image-file-mode | |
3124 @findex mode, auto-image-file | |
3125 @cindex images, visiting | |
3126 @cindex visiting image files | |
3127 @vindex image-file-name-regexps | |
3128 @vindex image-file-name-extensions | |
36136
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3129 When Auto-image-file minor mode is enabled, visiting an image file |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3130 displays it as an image, not as text. Likewise, inserting an image |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3131 file into a buffer inserts it as an image. This works only when Emacs |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3132 can display the relevant image type. The variables |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3133 @code{image-file-name-extensions} or @code{image-file-name-regexps} |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3134 control which file names are recognized as containing images. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3135 |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3136 The @kbd{M-x ffap} command generalizes @code{find-file} with more |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3137 powerful heuristic defaults (@pxref{FFAP}), often based on the text at |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3138 point. Partial Completion mode offers other features extending |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3139 @code{find-file}, which can be used with @code{ffap}. |
a5ae50ec6fe7
Many small clarifications.
Richard M. Stallman <rms@gnu.org>
parents:
35919
diff
changeset
|
3140 @xref{Completion Options}. |