(Overlay Properties): Clarify how priorities affect use of the properties.
[bpt/emacs.git] / lispref / backups.texi
CommitLineData
b1b12a8e
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
fd897522 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1999
177c0ea7 4@c Free Software Foundation, Inc.
b1b12a8e
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/backups
7@node Backups and Auto-Saving, Buffers, Files, Top
8@chapter Backups and Auto-Saving
9
10 Backup files and auto-save files are two methods by which Emacs tries
11to protect the user from the consequences of crashes or of the user's
12own errors. Auto-saving preserves the text from earlier in the current
13editing session; backup files preserve file contents prior to the
14current session.
15
16@menu
17* Backup Files:: How backup files are made; how their names are chosen.
18* Auto-Saving:: How auto-save files are made; how their names are chosen.
19* Reverting:: @code{revert-buffer}, and how to customize what it does.
20@end menu
21
0680592c 22@node Backup Files
b1b12a8e
RS
23@section Backup Files
24@cindex backup file
25
26 A @dfn{backup file} is a copy of the old contents of a file you are
27editing. Emacs makes a backup file the first time you save a buffer
28into its visited file. Normally, this means that the backup file
29contains the contents of the file as it was before the current editing
30session. The contents of the backup file normally remain unchanged once
31it exists.
32
33 Backups are usually made by renaming the visited file to a new name.
34Optionally, you can specify that backup files should be made by copying
35the visited file. This choice makes a difference for files with
36multiple names; it also can affect whether the edited file remains owned
37by the original owner or becomes owned by the user editing it.
38
39 By default, Emacs makes a single backup file for each file edited.
40You can alternatively request numbered backups; then each new backup
41file gets a new name. You can delete old numbered backups when you
42don't want them any more, or Emacs can delete them automatically.
43
44@menu
45* Making Backups:: How Emacs makes backup files, and when.
46* Rename or Copy:: Two alternatives: renaming the old file or copying it.
47* Numbered Backups:: Keeping multiple backups for each source file.
48* Backup Names:: How backup file names are computed; customization.
49@end menu
50
0680592c 51@node Making Backups
b1b12a8e
RS
52@subsection Making Backup Files
53
54@defun backup-buffer
55 This function makes a backup of the file visited by the current
56buffer, if appropriate. It is called by @code{save-buffer} before
57saving the buffer the first time.
58@end defun
59
60@defvar buffer-backed-up
61 This buffer-local variable indicates whether this buffer's file has
62been backed up on account of this buffer. If it is non-@code{nil}, then
63the backup file has been written. Otherwise, the file should be backed
2e00781a 64up when it is next saved (if backups are enabled). This is a
29b677db 65permanent local; @code{kill-all-local-variables} does not alter it.
b1b12a8e
RS
66@end defvar
67
68@defopt make-backup-files
bfe721d1 69This variable determines whether or not to make backup files. If it
b1b12a8e 70is non-@code{nil}, then Emacs creates a backup of each file when it is
bfe721d1
KH
71saved for the first time---provided that @code{backup-inhibited}
72is @code{nil} (see below).
b1b12a8e 73
bfe721d1 74The following example shows how to change the @code{make-backup-files}
f9f59935
RS
75variable only in the Rmail buffers and not elsewhere. Setting it
76@code{nil} stops Emacs from making backups of these files, which may
a40d4712 77save disk space. (You would put this code in your init file.)
b1b12a8e
RS
78
79@smallexample
80@group
177c0ea7 81(add-hook 'rmail-mode-hook
b1b12a8e 82 (function (lambda ()
177c0ea7 83 (make-local-variable
b1b12a8e
RS
84 'make-backup-files)
85 (setq make-backup-files nil))))
86@end group
87@end smallexample
88@end defopt
89
2e00781a 90@defvar backup-enable-predicate
b1b12a8e 91This variable's value is a function to be called on certain occasions to
2e00781a
RS
92decide whether a file should have backup files. The function receives
93one argument, a file name to consider. If the function returns
94@code{nil}, backups are disabled for that file. Otherwise, the other
95variables in this section say whether and how to make backups.
b1b12a8e 96
bae2aa40
DL
97@findex normal-backup-enable-predicate
98The default value is @code{normal-backup-enable-predicate}, which checks
99for files in @code{temporary-file-directory} and
100@code{small-temporary-file-directory}.
b1b12a8e
RS
101@end defvar
102
103@defvar backup-inhibited
104If this variable is non-@code{nil}, backups are inhibited. It records
105the result of testing @code{backup-enable-predicate} on the visited file
106name. It can also coherently be used by other mechanisms that inhibit
bfe721d1
KH
107backups based on which file is visited. For example, VC sets this
108variable non-@code{nil} to prevent making backups for files managed
109with a version control system.
2e00781a 110
bfe721d1
KH
111This is a permanent local, so that changing the major mode does not lose
112its value. Major modes should not set this variable---they should set
2e00781a 113@code{make-backup-files} instead.
b1b12a8e
RS
114@end defvar
115
bae2aa40 116@defvar backup-directory-alist
87b3b129 117@tindex backup-directory-alist
bae2aa40
DL
118This variable's value is an alist of filename patterns and backup
119directory names. Each element looks like
120@smallexample
121(@var{regexp} . @var{directory})
122@end smallexample
123
124@noindent
125Backups of files with names matching @var{regexp} will be made in
126@var{directory}. @var{directory} may be relative or absolute. If it is
127absolute, so that all matching files are backed up into the same
128directory, the file names in this directory will be the full name of the
129file backed up with all directory separators changed to @samp{!} to
130prevent clashes. This will not work correctly if your filesystem
131truncates the resulting name.
132
133For the common case of all backups going into one directory, the alist
134should contain a single element pairing @samp{"."} with the appropriate
135directory name.
136
137If this variable is @code{nil}, or it fails to match a filename, the
138backup is made in the original file's directory.
139
140On MS-DOS filesystems without long names this variable is always
141ignored.
142@end defvar
143
144@defvar make-backup-file-name-function
87b3b129 145@tindex make-backup-file-name-function
9a8dc0d3
RS
146This variable's value is a function to use for making backups instead
147of the default @code{make-backup-file-name}. A value of @code{nil}
148gives the default @code{make-backup-file-name} behaviour.
bae2aa40 149
5bf6f93d 150This could be buffer-local to do something special for specific
bae2aa40
DL
151files. If you define it, you may need to change
152@code{backup-file-name-p} and @code{file-name-sans-versions} too.
153@end defvar
154
155
0680592c 156@node Rename or Copy
b1b12a8e
RS
157@subsection Backup by Renaming or by Copying?
158@cindex backup files, how to make them
159
177c0ea7 160 There are two ways that Emacs can make a backup file:
b1b12a8e
RS
161
162@itemize @bullet
163@item
164Emacs can rename the original file so that it becomes a backup file, and
165then write the buffer being saved into a new file. After this
166procedure, any other names (i.e., hard links) of the original file now
167refer to the backup file. The new file is owned by the user doing the
168editing, and its group is the default for new files written by the user
169in that directory.
170
171@item
172Emacs can copy the original file into a backup file, and then overwrite
173the original file with new contents. After this procedure, any other
f9f59935
RS
174names (i.e., hard links) of the original file continue to refer to the
175current (updated) version of the file. The file's owner and group will
176be unchanged.
b1b12a8e
RS
177@end itemize
178
179 The first method, renaming, is the default.
180
181 The variable @code{backup-by-copying}, if non-@code{nil}, says to use
182the second method, which is to copy the original file and overwrite it
183with the new buffer contents. The variable @code{file-precious-flag},
184if non-@code{nil}, also has this effect (as a sideline of its main
185significance). @xref{Saving Buffers}.
186
187@defvar backup-by-copying
188If this variable is non-@code{nil}, Emacs always makes backup files by
189copying.
190@end defvar
191
192 The following two variables, when non-@code{nil}, cause the second
193method to be used in certain special cases. They have no effect on the
194treatment of files that don't fall into the special cases.
195
196@defvar backup-by-copying-when-linked
197If this variable is non-@code{nil}, Emacs makes backups by copying for
198files with multiple names (hard links).
199
200This variable is significant only if @code{backup-by-copying} is
201@code{nil}, since copying is always used when that variable is
202non-@code{nil}.
203@end defvar
204
205@defvar backup-by-copying-when-mismatch
206If this variable is non-@code{nil}, Emacs makes backups by copying in cases
207where renaming would change either the owner or the group of the file.
208
209The value has no effect when renaming would not alter the owner or
210group of the file; that is, for files which are owned by the user and
211whose group matches the default for a new file created there by the
212user.
213
214This variable is significant only if @code{backup-by-copying} is
215@code{nil}, since copying is always used when that variable is
216non-@code{nil}.
217@end defvar
218
8241495d
RS
219@defvar backup-by-copying-when-privileged-mismatch
220This variable, if non-@code{nil}, specifies the same behavior as
221@code{backup-by-copying-when-mismatch}, but only for certain user-id
222values: namely, those less than or equal to a certain number. You set
223this variable to that number.
224
225Thus, if you set @code{backup-by-copying-when-privileged-mismatch}
226to 0, backup by copying is done for the superuser only,
227when necessary to prevent a change in the owner of the file.
228
229The default is 200.
230@end defvar
231
0680592c 232@node Numbered Backups
b1b12a8e
RS
233@subsection Making and Deleting Numbered Backup Files
234
235 If a file's name is @file{foo}, the names of its numbered backup
236versions are @file{foo.~@var{v}~}, for various integers @var{v}, like
237this: @file{foo.~1~}, @file{foo.~2~}, @file{foo.~3~}, @dots{},
238@file{foo.~259~}, and so on.
239
240@defopt version-control
241This variable controls whether to make a single non-numbered backup
242file or multiple numbered backups.
243
244@table @asis
245@item @code{nil}
246Make numbered backups if the visited file already has numbered backups;
247otherwise, do not.
248
249@item @code{never}
250Do not make numbered backups.
251
252@item @var{anything else}
2e00781a 253Make numbered backups.
b1b12a8e
RS
254@end table
255@end defopt
256
257 The use of numbered backups ultimately leads to a large number of
258backup versions, which must then be deleted. Emacs can do this
2e00781a 259automatically or it can ask the user whether to delete them.
b1b12a8e
RS
260
261@defopt kept-new-versions
2e00781a 262The value of this variable is the number of newest versions to keep
b1b12a8e
RS
263when a new numbered backup is made. The newly made backup is included
264in the count. The default value is 2.
265@end defopt
266
267@defopt kept-old-versions
268The value of this variable is the number of oldest versions to keep
269when a new numbered backup is made. The default value is 2.
270@end defopt
271
272 If there are backups numbered 1, 2, 3, 5, and 7, and both of these
273variables have the value 2, then the backups numbered 1 and 2 are kept
274as old versions and those numbered 5 and 7 are kept as new versions;
2e00781a 275backup version 3 is excess. The function @code{find-backup-file-name}
b1b12a8e
RS
276(@pxref{Backup Names}) is responsible for determining which backup
277versions to delete, but does not delete them itself.
278
f9f59935 279@defopt delete-old-versions
29b677db
RS
280If this variable is @code{t}, then saving a file deletes excess
281backup versions silently. If it is @code{nil}, that means
282to ask for confirmation before deleting excess backups.
283Otherwise, they are not deleted at all.
b1b12a8e
RS
284@end defopt
285
286@defopt dired-kept-versions
287This variable specifies how many of the newest backup versions to keep
288in the Dired command @kbd{.} (@code{dired-clean-directory}). That's the
2e00781a 289same thing @code{kept-new-versions} specifies when you make a new backup
b1b12a8e
RS
290file. The default value is 2.
291@end defopt
292
0680592c 293@node Backup Names
b1b12a8e
RS
294@subsection Naming Backup Files
295
296 The functions in this section are documented mainly because you can
297customize the naming conventions for backup files by redefining them.
298If you change one, you probably need to change the rest.
299
300@defun backup-file-name-p filename
301This function returns a non-@code{nil} value if @var{filename} is a
302possible name for a backup file. A file with the name @var{filename}
303need not exist; the function just checks the name.
304
305@smallexample
306@group
307(backup-file-name-p "foo")
308 @result{} nil
309@end group
310@group
311(backup-file-name-p "foo~")
312 @result{} 3
313@end group
314@end smallexample
315
316The standard definition of this function is as follows:
317
318@smallexample
319@group
320(defun backup-file-name-p (file)
321 "Return non-nil if FILE is a backup file \
322name (numeric or not)..."
29b677db 323 (string-match "~\\'" file))
b1b12a8e
RS
324@end group
325@end smallexample
326
327@noindent
328Thus, the function returns a non-@code{nil} value if the file name ends
329with a @samp{~}. (We use a backslash to split the documentation
330string's first line into two lines in the text, but produce just one
331line in the string itself.)
332
333This simple expression is placed in a separate function to make it easy
334to redefine for customization.
335@end defun
336
337@defun make-backup-file-name filename
2e00781a 338This function returns a string that is the name to use for a
b1b12a8e
RS
339non-numbered backup file for file @var{filename}. On Unix, this is just
340@var{filename} with a tilde appended.
341
a9f0a989
RS
342The standard definition of this function, on most operating systems, is
343as follows:
b1b12a8e
RS
344
345@smallexample
346@group
347(defun make-backup-file-name (file)
29b677db 348 "Create the non-numeric backup file name for FILE..."
b1b12a8e
RS
349 (concat file "~"))
350@end group
351@end smallexample
352
2e00781a 353You can change the backup-file naming convention by redefining this
b1b12a8e 354function. The following example redefines @code{make-backup-file-name}
2e00781a 355to prepend a @samp{.} in addition to appending a tilde:
b1b12a8e
RS
356
357@smallexample
358@group
359(defun make-backup-file-name (filename)
a9f0a989
RS
360 (expand-file-name
361 (concat "." (file-name-nondirectory filename) "~")
362 (file-name-directory filename)))
b1b12a8e
RS
363@end group
364
365@group
366(make-backup-file-name "backups.texi")
367 @result{} ".backups.texi~"
368@end group
369@end smallexample
a9f0a989
RS
370
371Some parts of Emacs, including some Dired commands, assume that backup
372file names end with @samp{~}. If you do not follow that convention, it
373will not cause serious problems, but these commands may give
374less-than-desirable results.
b1b12a8e
RS
375@end defun
376
377@defun find-backup-file-name filename
378This function computes the file name for a new backup file for
379@var{filename}. It may also propose certain existing backup files for
380deletion. @code{find-backup-file-name} returns a list whose @sc{car} is
381the name for the new backup file and whose @sc{cdr} is a list of backup
382files whose deletion is proposed.
383
384Two variables, @code{kept-old-versions} and @code{kept-new-versions},
385determine which backup versions should be kept. This function keeps
386those versions by excluding them from the @sc{cdr} of the value.
387@xref{Numbered Backups}.
388
389In this example, the value says that @file{~rms/foo.~5~} is the name
390to use for the new backup file, and @file{~rms/foo.~3~} is an ``excess''
391version that the caller should consider deleting now.
392
393@smallexample
394@group
395(find-backup-file-name "~rms/foo")
396 @result{} ("~rms/foo.~5~" "~rms/foo.~3~")
397@end group
398@end smallexample
399@end defun
400
401@c Emacs 19 feature
402@defun file-newest-backup filename
403This function returns the name of the most recent backup file for
2e00781a 404@var{filename}, or @code{nil} if that file has no backup files.
b1b12a8e 405
2e00781a
RS
406Some file comparison commands use this function so that they can
407automatically compare a file with its most recent backup.
177c0ea7 408@end defun
b1b12a8e 409
0680592c 410@node Auto-Saving
b1b12a8e
RS
411@section Auto-Saving
412@cindex auto-saving
413
414 Emacs periodically saves all files that you are visiting; this is
415called @dfn{auto-saving}. Auto-saving prevents you from losing more
416than a limited amount of work if the system crashes. By default,
417auto-saves happen every 300 keystrokes, or after around 30 seconds of
333c5fc5 418idle time. @xref{Auto Save, Auto Save, Auto-Saving: Protection Against
b1b12a8e
RS
419Disasters, emacs, The GNU Emacs Manual}, for information on auto-save
420for users. Here we describe the functions used to implement auto-saving
421and the variables that control them.
422
423@defvar buffer-auto-save-file-name
424This buffer-local variable is the name of the file used for
425auto-saving the current buffer. It is @code{nil} if the buffer
426should not be auto-saved.
427
428@example
429@group
430buffer-auto-save-file-name
29b677db 431 @result{} "/xcssun/users/rms/lewis/#backups.texi#"
b1b12a8e
RS
432@end group
433@end example
434@end defvar
435
436@deffn Command auto-save-mode arg
437When used interactively without an argument, this command is a toggle
438switch: it turns on auto-saving of the current buffer if it is off, and
29b677db 439vice versa. With an argument @var{arg}, the command turns auto-saving
b1b12a8e
RS
440on if the value of @var{arg} is @code{t}, a nonempty list, or a positive
441integer. Otherwise, it turns auto-saving off.
442@end deffn
443
444@defun auto-save-file-name-p filename
445This function returns a non-@code{nil} value if @var{filename} is a
8241495d
RS
446string that could be the name of an auto-save file. It assumes
447the usual naming convention for auto-save files: a name that
b1b12a8e
RS
448begins and ends with hash marks (@samp{#}) is a possible auto-save file
449name. The argument @var{filename} should not contain a directory part.
450
451@example
452@group
453(make-auto-save-file-name)
29b677db 454 @result{} "/xcssun/users/rms/lewis/#backups.texi#"
b1b12a8e
RS
455@end group
456@group
29b677db 457(auto-save-file-name-p "#backups.texi#")
b1b12a8e
RS
458 @result{} 0
459@end group
460@group
29b677db 461(auto-save-file-name-p "backups.texi")
b1b12a8e
RS
462 @result{} nil
463@end group
464@end example
465
466The standard definition of this function is as follows:
467
468@example
469@group
470(defun auto-save-file-name-p (filename)
471 "Return non-nil if FILENAME can be yielded by..."
472 (string-match "^#.*#$" filename))
473@end group
474@end example
475
476This function exists so that you can customize it if you wish to
477change the naming convention for auto-save files. If you redefine it,
478be sure to redefine the function @code{make-auto-save-file-name}
479correspondingly.
480@end defun
481
482@defun make-auto-save-file-name
483This function returns the file name to use for auto-saving the current
86494bd5
KH
484buffer. This is just the file name with hash marks (@samp{#}) prepended
485and appended to it. This function does not look at the variable
8241495d
RS
486@code{auto-save-visited-file-name} (described below); callers of this
487function should check that variable first.
b1b12a8e
RS
488
489@example
490@group
491(make-auto-save-file-name)
29b677db 492 @result{} "/xcssun/users/rms/lewis/#backups.texi#"
b1b12a8e
RS
493@end group
494@end example
495
496The standard definition of this function is as follows:
497
498@example
499@group
500(defun make-auto-save-file-name ()
501 "Return file name to use for auto-saves \
29b677db 502of current buffer.."
b1b12a8e
RS
503 (if buffer-file-name
504@end group
505@group
506 (concat
507 (file-name-directory buffer-file-name)
508 "#"
509 (file-name-nondirectory buffer-file-name)
510 "#")
511 (expand-file-name
512 (concat "#%" (buffer-name) "#"))))
513@end group
514@end example
515
516This exists as a separate function so that you can redefine it to
517customize the naming convention for auto-save files. Be sure to
518change @code{auto-save-file-name-p} in a corresponding way.
519@end defun
520
521@defvar auto-save-visited-file-name
522If this variable is non-@code{nil}, Emacs auto-saves buffers in
523the files they are visiting. That is, the auto-save is done in the same
2e00781a 524file that you are editing. Normally, this variable is @code{nil}, so
b1b12a8e
RS
525auto-save files have distinct names that are created by
526@code{make-auto-save-file-name}.
527
8241495d
RS
528When you change the value of this variable, the new value does not take
529effect in an existing buffer until the next time auto-save mode is
530reenabled in it. If auto-save mode is already enabled, auto-saves
531continue to go in the same file name until @code{auto-save-mode} is
532called again.
b1b12a8e
RS
533@end defvar
534
535@defun recent-auto-save-p
536This function returns @code{t} if the current buffer has been
537auto-saved since the last time it was read in or saved.
538@end defun
539
540@defun set-buffer-auto-saved
541This function marks the current buffer as auto-saved. The buffer will
542not be auto-saved again until the buffer text is changed again. The
543function returns @code{nil}.
544@end defun
545
546@defopt auto-save-interval
8241495d
RS
547The value of this variable specifies how often to do auto-saving, in
548terms of number of input events. Each time this many additional input
549events are read, Emacs does auto-saving for all buffers in which that is
b1b12a8e
RS
550enabled.
551@end defopt
552
553@defopt auto-save-timeout
554The value of this variable is the number of seconds of idle time that
555should cause auto-saving. Each time the user pauses for this long,
29b677db
RS
556Emacs does auto-saving for all buffers in which that is enabled. (If
557the current buffer is large, the specified timeout is multiplied by a
080a57ba 558factor that increases as the size increases; for a million-byte
29b677db
RS
559buffer, the factor is almost 4.)
560
9a8dc0d3
RS
561If the value is zero or @code{nil}, then auto-saving is not done as a
562result of idleness, only after a certain number of input events as
563specified by @code{auto-save-interval}.
b1b12a8e
RS
564@end defopt
565
566@defvar auto-save-hook
567This normal hook is run whenever an auto-save is about to happen.
568@end defvar
569
570@defopt auto-save-default
571If this variable is non-@code{nil}, buffers that are visiting files
572have auto-saving enabled by default. Otherwise, they do not.
573@end defopt
574
bfe721d1 575@deffn Command do-auto-save &optional no-message current-only
b1b12a8e
RS
576This function auto-saves all buffers that need to be auto-saved. It
577saves all buffers for which auto-saving is enabled and that have been
578changed since the previous auto-save.
579
580Normally, if any buffers are auto-saved, a message that says
581@samp{Auto-saving...} is displayed in the echo area while auto-saving is
582going on. However, if @var{no-message} is non-@code{nil}, the message
583is inhibited.
bfe721d1
KH
584
585If @var{current-only} is non-@code{nil}, only the current buffer
586is auto-saved.
b1b12a8e
RS
587@end deffn
588
589@defun delete-auto-save-file-if-necessary
590This function deletes the current buffer's auto-save file if
591@code{delete-auto-save-files} is non-@code{nil}. It is called every
592time a buffer is saved.
593@end defun
594
595@defvar delete-auto-save-files
596This variable is used by the function
597@code{delete-auto-save-file-if-necessary}. If it is non-@code{nil},
598Emacs deletes auto-save files when a true save is done (in the visited
599file). This saves disk space and unclutters your directory.
600@end defvar
601
602@defun rename-auto-save-file
603This function adjusts the current buffer's auto-save file name if the
604visited file name has changed. It also renames an existing auto-save
605file. If the visited file name has not changed, this function does
606nothing.
607@end defun
608
0680592c 609@defvar buffer-saved-size
2e00781a 610The value of this buffer-local variable is the length of the current
8241495d 611buffer, when it was last read in, saved, or auto-saved. This is
2e00781a
RS
612used to detect a substantial decrease in size, and turn off auto-saving
613in response.
0680592c 614
8241495d
RS
615If it is @minus{}1, that means auto-saving is temporarily shut off in
616this buffer due to a substantial decrease in size. Explicitly saving
617the buffer stores a positive value in this variable, thus reenabling
618auto-saving. Turning auto-save mode off or on also updates this
619variable, so that the substantial decrease in size is forgotten.
0680592c
RS
620@end defvar
621
9589417c
RS
622@defvar auto-save-list-file-name
623This variable (if non-@code{nil}) specifies a file for recording the
624names of all the auto-save files. Each time Emacs does auto-saving, it
bfe721d1
KH
625writes two lines into this file for each buffer that has auto-saving
626enabled. The first line gives the name of the visited file (it's empty
627if the buffer has none), and the second gives the name of the auto-save
628file.
629
8241495d 630When Emacs exits normally, it deletes this file; if Emacs crashes, you
bfe721d1
KH
631can look in the file to find all the auto-save files that might contain
632work that was otherwise lost. The @code{recover-session} command uses
8241495d 633this file to find them.
9589417c 634
8241495d
RS
635The default name for this file specifies your home directory and starts
636with @samp{.saves-}. It also contains the Emacs process @sc{id} and the
637host name.
9589417c
RS
638@end defvar
639
29b677db
RS
640@defvar auto-save-list-file-prefix
641@tindex auto-save-list-file-prefix
642After Emacs reads your init file, it initializes
643@code{auto-save-list-file-name} (if you have not already set it
644non-@code{nil}) based on this prefix, adding the host name and process
645ID. If you set this to @code{nil} in your init file, then Emacs does
646not initialize @code{auto-save-list-file-name}.
647@end defvar
648
0680592c 649@node Reverting
b1b12a8e
RS
650@section Reverting
651
652 If you have made extensive changes to a file and then change your mind
653about them, you can get rid of them by reading in the previous version
654of the file with the @code{revert-buffer} command. @xref{Reverting, ,
655Reverting a Buffer, emacs, The GNU Emacs Manual}.
656
1911e6e5 657@deffn Command revert-buffer &optional ignore-auto noconfirm
b1b12a8e
RS
658This command replaces the buffer text with the text of the visited
659file on disk. This action undoes all changes since the file was visited
660or saved.
661
1911e6e5 662By default, if the latest auto-save file is more recent than the visited
b581dd19 663file, and the argument @var{ignore-auto} is @code{nil},
8241495d
RS
664@code{revert-buffer} asks the user whether to use that auto-save
665instead. When you invoke this command interactively, @var{ignore-auto}
b581dd19
GM
666is @code{t} if there is no numeric prefix argument; thus, the
667interactive default is not to check the auto-save file.
b1b12a8e
RS
668
669Normally, @code{revert-buffer} asks for confirmation before it changes
670the buffer; but if the argument @var{noconfirm} is non-@code{nil},
671@code{revert-buffer} does not ask for confirmation.
672
673Reverting tries to preserve marker positions in the buffer by using the
2e00781a
RS
674replacement feature of @code{insert-file-contents}. If the buffer
675contents and the file contents are identical before the revert
676operation, reverting preserves all the markers. If they are not
8241495d
RS
677identical, reverting does change the buffer; in that case, it preserves
678the markers in the unchanged text (if any) at the beginning and end of
679the buffer. Preserving any additional markers would be problematical.
b1b12a8e
RS
680@end deffn
681
2e00781a 682You can customize how @code{revert-buffer} does its work by setting
29b677db 683the variables described in the rest of this section.
2e00781a 684
1911e6e5
RS
685@defvar revert-without-query
686This variable holds a list of files that should be reverted without
8241495d
RS
687query. The value is a list of regular expressions. If the visited file
688name matches one of these regular expressions, and the file has changed
689on disk but the buffer is not modified, then @code{revert-buffer}
690reverts the file without asking the user for confirmation.
1911e6e5
RS
691@end defvar
692
29b677db
RS
693 Some major modes customize @code{revert-buffer} by making
694buffer-local bindings for these variables:
695
b1b12a8e 696@defvar revert-buffer-function
2e00781a
RS
697The value of this variable is the function to use to revert this buffer.
698If non-@code{nil}, it is called as a function with no arguments to do
699the work of reverting. If the value is @code{nil}, reverting works the
700usual way.
701
702Modes such as Dired mode, in which the text being edited does not
703consist of a file's contents but can be regenerated in some other
29b677db 704fashion, can give this variable a buffer-local value that is a function to
2e00781a 705regenerate the contents.
b1b12a8e
RS
706@end defvar
707
708@defvar revert-buffer-insert-file-contents-function
8241495d 709The value of this variable, if non-@code{nil}, specifies the function to use to
bfe721d1
KH
710insert the updated contents when reverting this buffer. The function
711receives two arguments: first the file name to use; second, @code{t} if
712the user has asked to read the auto-save file.
29b677db
RS
713
714The reason for a mode to set this variable instead of
715@code{revert-buffer-function} is to avoid duplicating or replacing the
716rest of what @code{revert-buffer} does: asking for confirmation,
717clearing the undo list, deciding the proper major mode, and running the
718hooks listed below.
b1b12a8e
RS
719@end defvar
720
721@defvar before-revert-hook
8241495d 722This normal hook is run by @code{revert-buffer} before
b1b12a8e
RS
723inserting the modified contents---but only if
724@code{revert-buffer-function} is @code{nil}.
b1b12a8e
RS
725@end defvar
726
727@defvar after-revert-hook
8241495d 728This normal hook is run by @code{revert-buffer} after inserting
b1b12a8e
RS
729the modified contents---but only if @code{revert-buffer-function} is
730@code{nil}.
b1b12a8e 731@end defvar