annotate man/xemacs/files.texi @ 5146:88bd4f3ef8e4

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