(Window Hooks): Remove reference to obsolete Lazy Lock mode.
[bpt/emacs.git] / lispref / files.texi
CommitLineData
3e01fd9d
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
a0465ec3 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2004
177c0ea7 4@c Free Software Foundation, Inc.
3e01fd9d
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/files
7@node Files, Backups and Auto-Saving, Documentation, Top
8@comment node-name, next, previous, up
9@chapter Files
10
11 In Emacs, you can find, create, view, save, and otherwise work with
12files and file directories. This chapter describes most of the
13file-related functions of Emacs Lisp, but a few others are described in
14@ref{Buffers}, and those related to backups and auto-saving are
15described in @ref{Backups and Auto-Saving}.
16
b22f3a19
RS
17 Many of the file functions take one or more arguments that are file
18names. A file name is actually a string. Most of these functions
a9f0a989 19expand file name arguments by calling @code{expand-file-name}, so that
b22f3a19
RS
20@file{~} is handled correctly, as are relative file names (including
21@samp{../}). These functions don't recognize environment variable
22substitutions such as @samp{$HOME}. @xref{File Name Expansion}.
23
2468d0c0
DL
24 When file I/O functions signal Lisp errors, they usually use the
25condition @code{file-error} (@pxref{Handling Errors}). The error
26message is in most cases obtained from the operating system, according
27to locale @code{system-message-locale}, and decoded using coding system
28@code{locale-coding-system} (@pxref{Locales}).
29
3e01fd9d
RS
30@menu
31* Visiting Files:: Reading files into Emacs buffers for editing.
32* Saving Buffers:: Writing changed buffers back into files.
33* Reading from Files:: Reading files into buffers without visiting.
34* Writing to Files:: Writing new files from parts of buffers.
35* File Locks:: Locking and unlocking files, to prevent
36 simultaneous editing by two people.
37* Information about Files:: Testing existence, accessibility, size of files.
f9f59935 38* Changing Files:: Renaming files, changing protection, etc.
3e01fd9d
RS
39* File Names:: Decomposing and expanding file names.
40* Contents of Directories:: Getting a list of the files in a directory.
41* Create/Delete Dirs:: Creating and Deleting Directories.
42* Magic File Names:: Defining "magic" special handling
43 for certain file names.
22697dac 44* Format Conversion:: Conversion to and from various file formats.
3e01fd9d
RS
45@end menu
46
47@node Visiting Files
48@section Visiting Files
49@cindex finding files
50@cindex visiting files
51
52 Visiting a file means reading a file into a buffer. Once this is
53done, we say that the buffer is @dfn{visiting} that file, and call the
54file ``the visited file'' of the buffer.
55
56 A file and a buffer are two different things. A file is information
57recorded permanently in the computer (unless you delete it). A buffer,
58on the other hand, is information inside of Emacs that will vanish at
59the end of the editing session (or when you kill the buffer). Usually,
60a buffer contains information that you have copied from a file; then we
61say the buffer is visiting that file. The copy in the buffer is what
62you modify with editing commands. Such changes to the buffer do not
63change the file; therefore, to make the changes permanent, you must
64@dfn{save} the buffer, which means copying the altered buffer contents
65back into the file.
66
67 In spite of the distinction between files and buffers, people often
68refer to a file when they mean a buffer and vice-versa. Indeed, we say,
b22f3a19 69``I am editing a file,'' rather than, ``I am editing a buffer that I
3e01fd9d
RS
70will soon save as a file of the same name.'' Humans do not usually need
71to make the distinction explicit. When dealing with a computer program,
72however, it is good to keep the distinction in mind.
73
74@menu
75* Visiting Functions:: The usual interface functions for visiting.
76* Subroutines of Visiting:: Lower-level subroutines that they use.
77@end menu
78
79@node Visiting Functions
80@subsection Functions for Visiting Files
81
82 This section describes the functions normally used to visit files.
83For historical reasons, these functions have names starting with
84@samp{find-} rather than @samp{visit-}. @xref{Buffer File Name}, for
85functions and variables that access the visited file name of a buffer or
86that find an existing buffer by its visited file name.
87
bfe721d1
KH
88 In a Lisp program, if you want to look at the contents of a file but
89not alter it, the fastest way is to use @code{insert-file-contents} in a
90temporary buffer. Visiting the file is not necessary and takes longer.
91@xref{Reading from Files}.
92
b6954afd 93@deffn Command find-file filename &optional wildcards
3e01fd9d 94This command selects a buffer visiting the file @var{filename},
177c0ea7 95using an existing buffer if there is one, and otherwise creating a
3e01fd9d
RS
96new buffer and reading the file into it. It also returns that buffer.
97
19efcb46
LT
98Aside from some technical details, the body of the @code{find-file}
99function is basically equivalent to:
3e01fd9d
RS
100
101@example
19efcb46 102(switch-to-buffer (find-file-noselect filename nil nil wildcards))
3e01fd9d
RS
103@end example
104
105@noindent
106(See @code{switch-to-buffer} in @ref{Displaying Buffers}.)
107
b6954afd
RS
108If @var{wildcards} is non-@code{nil}, which is always true in an
109interactive call, then @code{find-file} expands wildcard characters in
110@var{filename} and visits all the matching files.
111
3e01fd9d
RS
112When @code{find-file} is called interactively, it prompts for
113@var{filename} in the minibuffer.
114@end deffn
115
b6954afd 116@defun find-file-noselect filename &optional nowarn rawfile wildcards
3e01fd9d
RS
117This function is the guts of all the file-visiting functions. It finds
118or creates a buffer visiting the file @var{filename}, and returns it.
119It uses an existing buffer if there is one, and otherwise creates a new
120buffer and reads the file into it. You may make the buffer current or
121display it in a window if you wish, but this function does not do so.
122
08f0f5e9
KH
123If @var{wildcards} is non-@code{nil},
124then @code{find-file-noselect} expands wildcard
b6954afd
RS
125characters in @var{filename} and visits all the matching files.
126
3e01fd9d
RS
127When @code{find-file-noselect} uses an existing buffer, it first
128verifies that the file has not changed since it was last visited or
129saved in that buffer. If the file has changed, then this function asks
130the user whether to reread the changed file. If the user says
131@samp{yes}, any changes previously made in the buffer are lost.
132
f9f59935 133This function displays warning or advisory messages in various peculiar
969fe9b5
RS
134cases, unless the optional argument @var{nowarn} is non-@code{nil}. For
135example, if it needs to create a buffer, and there is no file named
8241495d 136@var{filename}, it displays the message @samp{(New file)} in the echo
969fe9b5 137area, and leaves the buffer empty.
f9f59935
RS
138
139The @code{find-file-noselect} function normally calls
140@code{after-find-file} after reading the file (@pxref{Subroutines of
141Visiting}). That function sets the buffer major mode, parses local
142variables, warns the user if there exists an auto-save file more recent
143than the file just visited, and finishes by running the functions in
f2aa473a 144@code{find-file-hook}.
f9f59935
RS
145
146If the optional argument @var{rawfile} is non-@code{nil}, then
147@code{after-find-file} is not called, and the
f2aa473a 148@code{find-file-not-found-functions} are not run in case of failure. What's
f9f59935
RS
149more, a non-@code{nil} @var{rawfile} value suppresses coding system
150conversion (@pxref{Coding Systems}) and format conversion (@pxref{Format
151Conversion}).
3e01fd9d 152
80e8b2c2
KH
153The @code{find-file-noselect} function usually returns the buffer that
154is visiting the file @var{filename}. But, if wildcards are actually
a540f6ed 155used and expanded, it returns a list of buffers that are visiting the
80e8b2c2 156various files.
3e01fd9d
RS
157
158@example
159@group
160(find-file-noselect "/etc/fstab")
161 @result{} #<buffer fstab>
162@end group
163@end example
164@end defun
165
b6954afd 166@deffn Command find-file-other-window filename &optional wildcards
3e01fd9d
RS
167This command selects a buffer visiting the file @var{filename}, but
168does so in a window other than the selected window. It may use another
169existing window or split a window; see @ref{Displaying Buffers}.
170
171When this command is called interactively, it prompts for
172@var{filename}.
173@end deffn
174
b6954afd 175@deffn Command find-file-read-only filename &optional wildcards
3e01fd9d
RS
176This command selects a buffer visiting the file @var{filename}, like
177@code{find-file}, but it marks the buffer as read-only. @xref{Read Only
178Buffers}, for related functions and variables.
179
180When this command is called interactively, it prompts for
181@var{filename}.
182@end deffn
183
184@deffn Command view-file filename
f1e2c45e
RS
185This command visits @var{filename} using View mode, returning to the
186previous buffer when you exit View mode. View mode is a minor mode that
187provides commands to skim rapidly through the file, but does not let you
188modify the text. Entering View mode runs the normal hook
bfe721d1 189@code{view-mode-hook}. @xref{Hooks}.
3e01fd9d
RS
190
191When @code{view-file} is called interactively, it prompts for
192@var{filename}.
193@end deffn
194
b6954afd 195@tindex find-file-wildcards
19efcb46 196@defopt find-file-wildcards
b6954afd
RS
197If this variable is non-@code{nil}, then the various @code{find-file}
198commands check for wildcard characters and visit all the files that
19efcb46
LT
199match them (when invoked interactively or when their @var{wildcards}
200argument is non-@code{nil}). If this option is @code{nil}, then
201the @code{find-file} commands ignore their @var{wildcards} argument
202and never treat wildcard characters specially.
203@end defopt
b6954afd 204
f2aa473a 205@defvar find-file-hook
3e01fd9d
RS
206The value of this variable is a list of functions to be called after a
207file is visited. The file's local-variables specification (if any) will
208have been processed before the hooks are run. The buffer visiting the
209file is current when the hook functions are run.
210
19efcb46 211This variable is a normal hook. @xref{Hooks}.
3e01fd9d
RS
212@end defvar
213
f2aa473a 214@defvar find-file-not-found-functions
3e01fd9d
RS
215The value of this variable is a list of functions to be called when
216@code{find-file} or @code{find-file-noselect} is passed a nonexistent
217file name. @code{find-file-noselect} calls these functions as soon as
218it detects a nonexistent file. It calls them in the order of the list,
219until one of them returns non-@code{nil}. @code{buffer-file-name} is
220already set up.
221
222This is not a normal hook because the values of the functions are
f9f59935 223used, and in many cases only some of the functions are called.
3e01fd9d
RS
224@end defvar
225
226@node Subroutines of Visiting
227@comment node-name, next, previous, up
228@subsection Subroutines of Visiting
229
a9f0a989
RS
230 The @code{find-file-noselect} function uses two important subroutines
231which are sometimes useful in user Lisp code: @code{create-file-buffer}
232and @code{after-find-file}. This section explains how to use them.
3e01fd9d
RS
233
234@defun create-file-buffer filename
235This function creates a suitably named buffer for visiting
236@var{filename}, and returns it. It uses @var{filename} (sans directory)
237as the name if that name is free; otherwise, it appends a string such as
238@samp{<2>} to get an unused name. See also @ref{Creating Buffers}.
239
240@strong{Please note:} @code{create-file-buffer} does @emph{not}
241associate the new buffer with a file and does not select the buffer.
bfe721d1 242It also does not use the default major mode.
3e01fd9d
RS
243
244@example
245@group
246(create-file-buffer "foo")
247 @result{} #<buffer foo>
248@end group
249@group
250(create-file-buffer "foo")
251 @result{} #<buffer foo<2>>
252@end group
253@group
254(create-file-buffer "foo")
255 @result{} #<buffer foo<3>>
256@end group
257@end example
258
259This function is used by @code{find-file-noselect}.
260It uses @code{generate-new-buffer} (@pxref{Creating Buffers}).
261@end defun
262
2468d0c0 263@defun after-find-file &optional error warn noauto after-find-file-from-revert-buffer nomodes
3e01fd9d
RS
264This function sets the buffer major mode, and parses local variables
265(@pxref{Auto Major Mode}). It is called by @code{find-file-noselect}
266and by the default revert function (@pxref{Reverting}).
267
268@cindex new file message
269@cindex file open error
270If reading the file got an error because the file does not exist, but
271its directory does exist, the caller should pass a non-@code{nil} value
272for @var{error}. In that case, @code{after-find-file} issues a warning:
8241495d 273@samp{(New file)}. For more serious errors, the caller should usually not
3e01fd9d
RS
274call @code{after-find-file}.
275
276If @var{warn} is non-@code{nil}, then this function issues a warning
277if an auto-save file exists and is more recent than the visited file.
278
2468d0c0
DL
279If @var{noauto} is non-@code{nil}, that says not to enable or disable
280Auto-Save mode. The mode remains enabled if it was enabled before.
281
282If @var{after-find-file-from-revert-buffer} is non-@code{nil}, that
283means this call was from @code{revert-buffer}. This has no direct
284effect, but some mode functions and hook functions check the value
285of this variable.
286
287If @var{nomodes} is non-@code{nil}, that means don't alter the buffer's
288major mode, don't process local variables specifications in the file,
f2aa473a 289and don't run @code{find-file-hook}. This feature is used by
2468d0c0
DL
290@code{revert-buffer} in some cases.
291
3e01fd9d 292The last thing @code{after-find-file} does is call all the functions
f2aa473a 293in the list @code{find-file-hook}.
3e01fd9d
RS
294@end defun
295
296@node Saving Buffers
297@section Saving Buffers
298
299 When you edit a file in Emacs, you are actually working on a buffer
300that is visiting that file---that is, the contents of the file are
301copied into the buffer and the copy is what you edit. Changes to the
302buffer do not change the file until you @dfn{save} the buffer, which
303means copying the contents of the buffer into the file.
304
305@deffn Command save-buffer &optional backup-option
306This function saves the contents of the current buffer in its visited
307file if the buffer has been modified since it was last visited or saved.
308Otherwise it does nothing.
309
310@code{save-buffer} is responsible for making backup files. Normally,
311@var{backup-option} is @code{nil}, and @code{save-buffer} makes a backup
b22f3a19
RS
312file only if this is the first save since visiting the file. Other
313values for @var{backup-option} request the making of backup files in
314other circumstances:
3e01fd9d
RS
315
316@itemize @bullet
317@item
318With an argument of 4 or 64, reflecting 1 or 3 @kbd{C-u}'s, the
319@code{save-buffer} function marks this version of the file to be
320backed up when the buffer is next saved.
321
322@item
323With an argument of 16 or 64, reflecting 2 or 3 @kbd{C-u}'s, the
324@code{save-buffer} function unconditionally backs up the previous
325version of the file before saving it.
19efcb46
LT
326
327@item
328With an argument of 0, unconditionally do @emph{not} make any backup file.
3e01fd9d
RS
329@end itemize
330@end deffn
331
77ba49d8 332@deffn Command save-some-buffers &optional save-silently-p pred
7baeca0c 333@anchor{Definition of save-some-buffers}
3e01fd9d
RS
334This command saves some modified file-visiting buffers. Normally it
335asks the user about each buffer. But if @var{save-silently-p} is
336non-@code{nil}, it saves all the file-visiting buffers without querying
337the user.
338
19efcb46
LT
339The optional @var{pred} argument controls which buffers to ask about
340(or to save silently if @var{save-silently-p} is non-@code{nil}).
77ba49d8
RS
341If it is @code{nil}, that means to ask only about file-visiting buffers.
342If it is @code{t}, that means also offer to save certain other non-file
343buffers---those that have a non-@code{nil} buffer-local value of
344@code{buffer-offer-save}. (A user who says @samp{yes} to saving a
345non-file buffer is asked to specify the file name to use.) The
346@code{save-buffers-kill-emacs} function passes the value @code{t} for
347@var{pred}.
348
349If @var{pred} is neither @code{t} nor @code{nil}, then it should be
350a function of no arguments. It will be called in each buffer to decide
351whether to offer to save that buffer. If it returns a non-@code{nil}
352value in a certain buffer, that means do offer to save that buffer.
3e01fd9d
RS
353@end deffn
354
2468d0c0 355@deffn Command write-file filename &optional confirm
7baeca0c 356@anchor{Definition of write-file}
3e01fd9d
RS
357This function writes the current buffer into file @var{filename}, makes
358the buffer visit that file, and marks it not modified. Then it renames
359the buffer based on @var{filename}, appending a string like @samp{<2>}
360if necessary to make a unique buffer name. It does most of this work by
969fe9b5
RS
361calling @code{set-visited-file-name} (@pxref{Buffer File Name}) and
362@code{save-buffer}.
2468d0c0
DL
363
364If @var{confirm} is non-@code{nil}, that means to ask for confirmation
19efcb46
LT
365before overwriting an existing file. Interactively, confirmation is
366required, unless the user supplies a prefix argument.
367
368If @var{filename} is an existing directory, or a symbolic link to one,
369@code{write-file} uses the name of the visited file, in directory
370@var{filename}. If the buffer is not visiting a file, it uses the
371buffer name instead.
3e01fd9d
RS
372@end deffn
373
2dd7b854
RS
374 Saving a buffer runs several hooks. It also performs format
375conversion (@pxref{Format Conversion}), and may save text properties in
376``annotations'' (@pxref{Saving Properties}).
377
f2aa473a 378@defvar write-file-functions
3e01fd9d
RS
379The value of this variable is a list of functions to be called before
380writing out a buffer to its visited file. If one of them returns
381non-@code{nil}, the file is considered already written and the rest of
382the functions are not called, nor is the usual code for writing the file
383executed.
384
f2aa473a 385If a function in @code{write-file-functions} returns non-@code{nil}, it
3e01fd9d
RS
386is responsible for making a backup file (if that is appropriate).
387To do so, execute the following code:
388
389@example
390(or buffer-backed-up (backup-buffer))
391@end example
392
393You might wish to save the file modes value returned by
19efcb46
LT
394@code{backup-buffer} and use that (if non-@code{nil}) to set the mode
395bits of the file that you write. This is what @code{save-buffer}
396normally does. @xref{Making Backups,, Making Backup Files}.
3e01fd9d 397
f2aa473a 398The hook functions in @code{write-file-functions} are also responsible for
a9f0a989
RS
399encoding the data (if desired): they must choose a suitable coding
400system (@pxref{Lisp and Coding Systems}), perform the encoding
401(@pxref{Explicit Encoding}), and set @code{last-coding-system-used} to
f1e2c45e 402the coding system that was used (@pxref{Encoding and I/O}).
a9f0a989 403
f2aa473a
SM
404If you set this hook locally in a buffer, it is assumed to be
405associated with the file or the way the contents of the buffer were
406obtained. Thus the variable is marked as a permanent local, so that
407changing the major mode does not alter a buffer-local value. On the
408other hand, calling @code{set-visited-file-name} will reset it.
409If this is not what you want, you might like to use
410@code{write-contents-functions} instead.
f9f59935 411
3e01fd9d
RS
412Even though this is not a normal hook, you can use @code{add-hook} and
413@code{remove-hook} to manipulate the list. @xref{Hooks}.
414@end defvar
415
416@c Emacs 19 feature
f2aa473a 417@defvar write-contents-functions
83f411a2
RS
418This works just like @code{write-file-functions}, but it is intended
419for hooks that pertain to the buffer's contents, not to the particular
420visited file or its location. Such hooks are usually set up by major
421modes, as buffer-local bindings for this variable. This variable
422automatically becomes buffer-local whenever it is set; switching to a
423new major mode always resets this variable, but calling
424@code{set-visited-file-name} does not.
425
426If any of the functions in this hook returns non-@code{nil}, the file
427is considered already written and the rest are not called and neither
428are the functions in @code{write-file-functions}.
3e01fd9d
RS
429@end defvar
430
1d7b9cc0
LT
431@defopt before-save-hook
432This normal hook runs before a buffer is saved in its visited file,
433regardless of whether that is done normally or by one of the hooks
9a7268cf
LT
434described above. For instance, the @file{copyright.el} program uses
435this hook to make sure the file you are saving has the current year in
436its copyright notice.
1d7b9cc0 437@end defopt
a0465ec3 438
3e01fd9d 439@c Emacs 19 feature
1d7b9cc0 440@defopt after-save-hook
3e01fd9d 441This normal hook runs after a buffer has been saved in its visited file.
f1e2c45e
RS
442One use of this hook is in Fast Lock mode; it uses this hook to save the
443highlighting information in a cache file.
1d7b9cc0 444@end defopt
3e01fd9d 445
19efcb46 446@defopt file-precious-flag
3e01fd9d
RS
447If this variable is non-@code{nil}, then @code{save-buffer} protects
448against I/O errors while saving by writing the new file to a temporary
449name instead of the name it is supposed to have, and then renaming it to
450the intended name after it is clear there are no errors. This procedure
451prevents problems such as a lack of disk space from resulting in an
452invalid file.
453
63ff95ee
MW
454As a side effect, backups are necessarily made by copying. @xref{Rename
455or Copy}. Yet, at the same time, saving a precious file always breaks
456all hard links between the file you save and other file names.
3e01fd9d 457
f1e2c45e 458Some modes give this variable a non-@code{nil} buffer-local value
969fe9b5 459in particular buffers.
19efcb46 460@end defopt
3e01fd9d
RS
461
462@defopt require-final-newline
463This variable determines whether files may be written out that do
464@emph{not} end with a newline. If the value of the variable is
465@code{t}, then @code{save-buffer} silently adds a newline at the end of
466the file whenever the buffer being saved does not already end in one.
467If the value of the variable is non-@code{nil}, but not @code{t}, then
468@code{save-buffer} asks the user whether to add a newline each time the
469case arises.
470
471If the value of the variable is @code{nil}, then @code{save-buffer}
472doesn't add newlines at all. @code{nil} is the default value, but a few
473major modes set it to @code{t} in particular buffers.
474@end defopt
475
969fe9b5
RS
476 See also the function @code{set-visited-file-name} (@pxref{Buffer File
477Name}).
fbc1b72c 478
3e01fd9d
RS
479@node Reading from Files
480@comment node-name, next, previous, up
481@section Reading from Files
482
483 You can copy a file from the disk and insert it into a buffer
484using the @code{insert-file-contents} function. Don't use the user-level
485command @code{insert-file} in a Lisp program, as that sets the mark.
486
487@defun insert-file-contents filename &optional visit beg end replace
488This function inserts the contents of file @var{filename} into the
63ff95ee 489current buffer after point. It returns a list of the absolute file name
3e01fd9d
RS
490and the length of the data inserted. An error is signaled if
491@var{filename} is not the name of a file that can be read.
492
bfe721d1
KH
493The function @code{insert-file-contents} checks the file contents
494against the defined file formats, and converts the file contents if
495appropriate. @xref{Format Conversion}. It also calls the functions in
496the list @code{after-insert-file-functions}; see @ref{Saving
8241495d
RS
497Properties}. Normally, one of the functions in the
498@code{after-insert-file-functions} list determines the coding system
499(@pxref{Coding Systems}) used for decoding the file's contents.
3e01fd9d
RS
500
501If @var{visit} is non-@code{nil}, this function additionally marks the
502buffer as unmodified and sets up various fields in the buffer so that it
503is visiting the file @var{filename}: these include the buffer's visited
504file name and its last save file modtime. This feature is used by
505@code{find-file-noselect} and you probably should not use it yourself.
506
507If @var{beg} and @var{end} are non-@code{nil}, they should be integers
508specifying the portion of the file to insert. In this case, @var{visit}
509must be @code{nil}. For example,
510
511@example
512(insert-file-contents filename nil 0 500)
513@end example
514
515@noindent
516inserts the first 500 characters of a file.
517
518If the argument @var{replace} is non-@code{nil}, it means to replace the
519contents of the buffer (actually, just the accessible portion) with the
520contents of the file. This is better than simply deleting the buffer
521contents and inserting the whole file, because (1) it preserves some
522marker positions and (2) it puts less data in the undo list.
f9f59935 523
a9f0a989
RS
524It is possible to read a special file (such as a FIFO or an I/O device)
525with @code{insert-file-contents}, as long as @var{replace} and
526@var{visit} are @code{nil}.
f9f59935
RS
527@end defun
528
f9f59935
RS
529@defun insert-file-contents-literally filename &optional visit beg end replace
530This function works like @code{insert-file-contents} except that it does
531not do format decoding (@pxref{Format Conversion}), does not do
532character code conversion (@pxref{Coding Systems}), does not run
f2aa473a 533@code{find-file-hook}, does not perform automatic uncompression, and so
f9f59935 534on.
3e01fd9d
RS
535@end defun
536
537If you want to pass a file name to another process so that another
538program can read the file, use the function @code{file-local-copy}; see
539@ref{Magic File Names}.
540
541@node Writing to Files
542@comment node-name, next, previous, up
543@section Writing to Files
544
545 You can write the contents of a buffer, or part of a buffer, directly
546to a file on disk using the @code{append-to-file} and
547@code{write-region} functions. Don't use these functions to write to
548files that are being visited; that could cause confusion in the
549mechanisms for visiting.
550
551@deffn Command append-to-file start end filename
552This function appends the contents of the region delimited by
553@var{start} and @var{end} in the current buffer to the end of file
554@var{filename}. If that file does not exist, it is created. This
555function returns @code{nil}.
556
557An error is signaled if @var{filename} specifies a nonwritable file,
558or a nonexistent file in a directory where files cannot be created.
19efcb46
LT
559
560When called from Lisp, this function is completely equivalent to:
561
562@example
563(write-region start end filename t)
564@end example
3e01fd9d
RS
565@end deffn
566
2468d0c0 567@deffn Command write-region start end filename &optional append visit lockname mustbenew
3e01fd9d
RS
568This function writes the region delimited by @var{start} and @var{end}
569in the current buffer into the file specified by @var{filename}.
570
19efcb46
LT
571If @var{start} is @code{nil}, then the command writes the entire buffer
572contents (@emph{not} just the accessible portion) to the file and
573ignores @var{end}.
574
3e01fd9d
RS
575@c Emacs 19 feature
576If @var{start} is a string, then @code{write-region} writes or appends
8241495d
RS
577that string, rather than text from the buffer. @var{end} is ignored in
578this case.
3e01fd9d
RS
579
580If @var{append} is non-@code{nil}, then the specified text is appended
c3dd4d76
RS
581to the existing file contents (if any). If @var{append} is an
582integer, @code{write-region} seeks to that byte offset from the start
583of the file and writes the data from there.
3e01fd9d 584
8241495d 585If @var{mustbenew} is non-@code{nil}, then @code{write-region} asks
c3dd4d76
RS
586for confirmation if @var{filename} names an existing file. If
587@var{mustbenew} is the symbol @code{excl}, then @code{write-region}
588does not ask for confirmation, but instead it signals an error
589@code{file-already-exists} if the file already exists.
8241495d
RS
590
591The test for an existing file, when @var{mustbenew} is @code{excl}, uses
592a special system feature. At least for files on a local disk, there is
593no chance that some other program could create a file of the same name
594before Emacs does, without Emacs's noticing.
a9f0a989 595
3e01fd9d
RS
596If @var{visit} is @code{t}, then Emacs establishes an association
597between the buffer and the file: the buffer is then visiting that file.
598It also sets the last file modification time for the current buffer to
599@var{filename}'s modtime, and marks the buffer as not modified. This
600feature is used by @code{save-buffer}, but you probably should not use
601it yourself.
602
603@c Emacs 19 feature
604If @var{visit} is a string, it specifies the file name to visit. This
605way, you can write the data to one file (@var{filename}) while recording
606the buffer as visiting another file (@var{visit}). The argument
607@var{visit} is used in the echo area message and also for file locking;
608@var{visit} is stored in @code{buffer-file-name}. This feature is used
609to implement @code{file-precious-flag}; don't use it yourself unless you
610really know what you're doing.
611
2468d0c0
DL
612The optional argument @var{lockname}, if non-@code{nil}, specifies the
613file name to use for purposes of locking and unlocking, overriding
614@var{filename} and @var{visit} for that purpose.
615
bfe721d1
KH
616The function @code{write-region} converts the data which it writes to
617the appropriate file formats specified by @code{buffer-file-format}.
618@xref{Format Conversion}. It also calls the functions in the list
619@code{write-region-annotate-functions}; see @ref{Saving Properties}.
3e01fd9d 620
f1e2c45e 621Normally, @code{write-region} displays the message @samp{Wrote
3e01fd9d
RS
622@var{filename}} in the echo area. If @var{visit} is neither @code{t}
623nor @code{nil} nor a string, then this message is inhibited. This
624feature is useful for programs that use files for internal purposes,
b22f3a19 625files that the user does not need to know about.
3e01fd9d
RS
626@end deffn
627
f9f59935 628@defmac with-temp-file file body...
7baeca0c 629@anchor{Definition of with-temp-file}
969fe9b5
RS
630The @code{with-temp-file} macro evaluates the @var{body} forms with a
631temporary buffer as the current buffer; then, at the end, it writes the
632buffer contents into file @var{file}. It kills the temporary buffer
633when finished, restoring the buffer that was current before the
634@code{with-temp-file} form. Then it returns the value of the last form
635in @var{body}.
f9f59935
RS
636
637The current buffer is restored even in case of an abnormal exit via
638@code{throw} or error (@pxref{Nonlocal Exits}).
639
19efcb46
LT
640See also @code{with-temp-buffer} in @ref{Definition of
641with-temp-buffer,, The Current Buffer}.
f9f59935
RS
642@end defmac
643
3e01fd9d
RS
644@node File Locks
645@section File Locks
646@cindex file locks
647
16bf330f
RS
648 When two users edit the same file at the same time, they are likely
649to interfere with each other. Emacs tries to prevent this situation
650from arising by recording a @dfn{file lock} when a file is being
651modified. (File locks are not implemented on Microsoft systems.)
3e01fd9d
RS
652Emacs can then detect the first attempt to modify a buffer visiting a
653file that is locked by another Emacs job, and ask the user what to do.
b6954afd
RS
654The file lock is really a file, a symbolic link with a special name,
655stored in the same directory as the file you are editing.
3e01fd9d 656
b6954afd
RS
657 When you access files using NFS, there may be a small probability that
658you and another user will both lock the same file ``simultaneously''.
659If this happens, it is possible for the two users to make changes
660simultaneously, but Emacs will still warn the user who saves second.
661Also, the detection of modification of a buffer visiting a file changed
662on disk catches some cases of simultaneous editing; see
663@ref{Modification Time}.
3e01fd9d
RS
664
665@defun file-locked-p filename
f1e2c45e
RS
666This function returns @code{nil} if the file @var{filename} is not
667locked. It returns @code{t} if it is locked by this Emacs process, and
668it returns the name of the user who has locked it if it is locked by
669some other job.
3e01fd9d
RS
670
671@example
672@group
673(file-locked-p "foo")
674 @result{} nil
675@end group
676@end example
677@end defun
678
679@defun lock-buffer &optional filename
b6954afd 680This function locks the file @var{filename}, if the current buffer is
3e01fd9d
RS
681modified. The argument @var{filename} defaults to the current buffer's
682visited file. Nothing is done if the current buffer is not visiting a
16bf330f 683file, or is not modified, or if the system does not support locking.
3e01fd9d
RS
684@end defun
685
686@defun unlock-buffer
687This function unlocks the file being visited in the current buffer,
688if the buffer is modified. If the buffer is not modified, then
689the file should not be locked, so this function does nothing. It also
16bf330f
RS
690does nothing if the current buffer is not visiting a file, or if the
691system does not support locking.
3e01fd9d
RS
692@end defun
693
8241495d
RS
694 File locking is not supported on some systems. On systems that do not
695support it, the functions @code{lock-buffer}, @code{unlock-buffer} and
696@code{file-locked-p} do nothing and return @code{nil}.
697
3e01fd9d
RS
698@defun ask-user-about-lock file other-user
699This function is called when the user tries to modify @var{file}, but it
f9f59935
RS
700is locked by another user named @var{other-user}. The default
701definition of this function asks the user to say what to do. The value
702this function returns determines what Emacs does next:
3e01fd9d
RS
703
704@itemize @bullet
705@item
706A value of @code{t} says to grab the lock on the file. Then
707this user may edit the file and @var{other-user} loses the lock.
708
709@item
710A value of @code{nil} says to ignore the lock and let this
711user edit the file anyway.
712
713@item
714@kindex file-locked
715This function may instead signal a @code{file-locked} error, in which
716case the change that the user was about to make does not take place.
717
718The error message for this error looks like this:
719
720@example
721@error{} File is locked: @var{file} @var{other-user}
722@end example
723
724@noindent
725where @code{file} is the name of the file and @var{other-user} is the
726name of the user who has locked the file.
727@end itemize
728
f9f59935
RS
729If you wish, you can replace the @code{ask-user-about-lock} function
730with your own version that makes the decision in another way. The code
3e01fd9d
RS
731for its usual definition is in @file{userlock.el}.
732@end defun
733
734@node Information about Files
735@section Information about Files
736
b22f3a19
RS
737 The functions described in this section all operate on strings that
738designate file names. All the functions have names that begin with the
739word @samp{file}. These functions all return information about actual
740files or directories, so their arguments must all exist as actual files
741or directories unless otherwise noted.
3e01fd9d
RS
742
743@menu
744* Testing Accessibility:: Is a given file readable? Writable?
745* Kinds of Files:: Is it a directory? A symbolic link?
746* Truenames:: Eliminating symbolic links from a file name.
747* File Attributes:: How large is it? Any other names? Etc.
748@end menu
749
750@node Testing Accessibility
751@comment node-name, next, previous, up
752@subsection Testing Accessibility
753@cindex accessibility of a file
754@cindex file accessibility
755
19efcb46
LT
756 These functions test for permission to access a file in specific
757ways. Unless explicitly stated otherwise, they recursively follow
758symbolic links for their file name arguments, at all levels (at the
759level of the file itself and at all levels of parent directories).
3e01fd9d
RS
760
761@defun file-exists-p filename
8632c4f0
RS
762This function returns @code{t} if a file named @var{filename} appears
763to exist. This does not mean you can necessarily read the file, only
764that you can find out its attributes. (On Unix and GNU/Linux, this is
765true if the file exists and you have execute permission on the
766containing directories, regardless of the protection of the file
767itself.)
3e01fd9d
RS
768
769If the file does not exist, or if fascist access control policies
770prevent you from finding the attributes of the file, this function
771returns @code{nil}.
8632c4f0
RS
772
773Directories are files, so @code{file-exists-p} returns @code{t} when
774given a directory name. However, symbolic links are treated
775specially; @code{file-exists-p} returns @code{t} for a symbolic link
776name only if the target file exists.
3e01fd9d
RS
777@end defun
778
779@defun file-readable-p filename
780This function returns @code{t} if a file named @var{filename} exists
781and you can read it. It returns @code{nil} otherwise.
782
783@example
784@group
785(file-readable-p "files.texi")
786 @result{} t
787@end group
788@group
789(file-exists-p "/usr/spool/mqueue")
790 @result{} t
791@end group
792@group
793(file-readable-p "/usr/spool/mqueue")
794 @result{} nil
795@end group
796@end example
797@end defun
798
799@c Emacs 19 feature
800@defun file-executable-p filename
801This function returns @code{t} if a file named @var{filename} exists and
2468d0c0
DL
802you can execute it. It returns @code{nil} otherwise. On Unix and
803GNU/Linux, if the file is a directory, execute permission means you can
804check the existence and attributes of files inside the directory, and
805open those files if their modes permit.
3e01fd9d
RS
806@end defun
807
808@defun file-writable-p filename
b22f3a19
RS
809This function returns @code{t} if the file @var{filename} can be written
810or created by you, and @code{nil} otherwise. A file is writable if the
811file exists and you can write it. It is creatable if it does not exist,
812but the specified directory does exist and you can write in that
813directory.
3e01fd9d
RS
814
815In the third example below, @file{foo} is not writable because the
816parent directory does not exist, even though the user could create such
817a directory.
818
819@example
820@group
821(file-writable-p "~/foo")
822 @result{} t
823@end group
824@group
825(file-writable-p "/foo")
826 @result{} nil
827@end group
828@group
829(file-writable-p "~/no-such-dir/foo")
830 @result{} nil
831@end group
832@end example
833@end defun
834
835@c Emacs 19 feature
836@defun file-accessible-directory-p dirname
837This function returns @code{t} if you have permission to open existing
16bf330f
RS
838files in the directory whose name as a file is @var{dirname};
839otherwise (or if there is no such directory), it returns @code{nil}.
840The value of @var{dirname} may be either a directory name (such as
841@file{/foo/}) or the file name of a file which is a directory
842(such as @file{/foo}, without the final slash).
3e01fd9d
RS
843
844Example: after the following,
845
846@example
847(file-accessible-directory-p "/foo")
848 @result{} nil
849@end example
850
851@noindent
852we can deduce that any attempt to read a file in @file{/foo/} will
853give an error.
854@end defun
855
f9f59935
RS
856@defun access-file filename string
857This function opens file @var{filename} for reading, then closes it and
858returns @code{nil}. However, if the open fails, it signals an error
859using @var{string} as the error message text.
860@end defun
861
22697dac
KH
862@defun file-ownership-preserved-p filename
863This function returns @code{t} if deleting the file @var{filename} and
19efcb46
LT
864then creating it anew would keep the file's owner unchanged. It also
865returns @code{t} for nonexistent files.
866
867If @var{filename} is a symbolic link, then, unlike the other functions
868discussed here, @code{file-ownership-preserved-p} does @emph{not}
869replace @var{filename} with its target. However, it does recursively
870follow symbolic links at all levels of parent directories.
22697dac
KH
871@end defun
872
3e01fd9d
RS
873@defun file-newer-than-file-p filename1 filename2
874@cindex file age
875@cindex file modification time
b22f3a19 876This function returns @code{t} if the file @var{filename1} is
3e01fd9d 877newer than file @var{filename2}. If @var{filename1} does not
19efcb46
LT
878exist, it returns @code{nil}. If @var{filename1} does exist, but
879@var{filename2} does not, it returns @code{t}.
3e01fd9d 880
b22f3a19
RS
881In the following example, assume that the file @file{aug-19} was written
882on the 19th, @file{aug-20} was written on the 20th, and the file
883@file{no-file} doesn't exist at all.
3e01fd9d
RS
884
885@example
886@group
887(file-newer-than-file-p "aug-19" "aug-20")
888 @result{} nil
889@end group
890@group
891(file-newer-than-file-p "aug-20" "aug-19")
892 @result{} t
893@end group
894@group
895(file-newer-than-file-p "aug-19" "no-file")
896 @result{} t
897@end group
898@group
899(file-newer-than-file-p "no-file" "aug-19")
900 @result{} nil
901@end group
902@end example
903
904You can use @code{file-attributes} to get a file's last modification
905time as a list of two numbers. @xref{File Attributes}.
906@end defun
907
908@node Kinds of Files
909@comment node-name, next, previous, up
910@subsection Distinguishing Kinds of Files
911
bfe721d1
KH
912 This section describes how to distinguish various kinds of files, such
913as directories, symbolic links, and ordinary files.
3e01fd9d
RS
914
915@defun file-symlink-p filename
916@cindex file symbolic links
6f1f54c7 917If the file @var{filename} is a symbolic link, the
19efcb46
LT
918@code{file-symlink-p} function returns the (non-recursive) link target
919as a string. (Determining the file name that the link points to from
920the target is nontrivial.) First, this function recursively follows
921symbolic links at all levels of parent directories.
3e01fd9d
RS
922
923If the file @var{filename} is not a symbolic link (or there is no such file),
177c0ea7 924@code{file-symlink-p} returns @code{nil}.
3e01fd9d
RS
925
926@example
927@group
928(file-symlink-p "foo")
929 @result{} nil
930@end group
931@group
932(file-symlink-p "sym-link")
933 @result{} "foo"
934@end group
935@group
936(file-symlink-p "sym-link2")
937 @result{} "sym-link"
938@end group
939@group
940(file-symlink-p "/bin")
941 @result{} "/pub/bin"
942@end group
943@end example
944
945@c !!! file-symlink-p: should show output of ls -l for comparison
946@end defun
947
19efcb46
LT
948The next two functions recursively follow symbolic links at
949all levels for @var{filename}.
950
3e01fd9d
RS
951@defun file-directory-p filename
952This function returns @code{t} if @var{filename} is the name of an
953existing directory, @code{nil} otherwise.
954
955@example
956@group
957(file-directory-p "~rms")
958 @result{} t
959@end group
960@group
961(file-directory-p "~rms/lewis/files.texi")
962 @result{} nil
963@end group
964@group
965(file-directory-p "~rms/lewis/no-such-file")
966 @result{} nil
967@end group
968@group
969(file-directory-p "$HOME")
970 @result{} nil
971@end group
972@group
973(file-directory-p
974 (substitute-in-file-name "$HOME"))
975 @result{} t
976@end group
977@end example
978@end defun
979
22697dac
KH
980@defun file-regular-p filename
981This function returns @code{t} if the file @var{filename} exists and is
b6954afd 982a regular file (not a directory, named pipe, terminal, or
22697dac
KH
983other I/O device).
984@end defun
985
3e01fd9d
RS
986@node Truenames
987@subsection Truenames
988@cindex truename (of file)
989
990@c Emacs 19 features
991 The @dfn{truename} of a file is the name that you get by following
2468d0c0
DL
992symbolic links at all levels until none remain, then simplifying away
993@samp{.}@: and @samp{..}@: appearing as name components. This results
994in a sort of canonical name for the file. A file does not always have a
995unique truename; the number of distinct truenames a file has is equal to
996the number of hard links to the file. However, truenames are useful
997because they eliminate symbolic links as a cause of name variation.
3e01fd9d
RS
998
999@defun file-truename filename
2468d0c0
DL
1000The function @code{file-truename} returns the truename of the file
1001@var{filename}. The argument must be an absolute file name.
19efcb46
LT
1002
1003This function does not expand environment variables. Only
1004@code{substitute-in-file-name} does that. @xref{Definition of
1005substitute-in-file-name}.
1006
1007If you may need to follow symbolic links preceding @samp{..}@:
1008appearing as a name component, you should make sure to call
1009@code{file-truename} without prior direct or indirect calls to
1010@code{expand-file-name}, as otherwise the file name component
1011immediately preceding @samp{..} will be ``simplified away'' before
1012@code{file-truename} is called. To eliminate the need for a call to
1013@code{expand-file-name}, @code{file-truename} handles @samp{~} in the
1014same way that @code{expand-file-name} does. @xref{File Name
1015Expansion,, Functions that Expand Filenames}.
3e01fd9d
RS
1016@end defun
1017
c73983bb 1018@defun file-chase-links filename &optional limit
2468d0c0
DL
1019This function follows symbolic links, starting with @var{filename},
1020until it finds a file name which is not the name of a symbolic link.
19efcb46
LT
1021Then it returns that file name. This function does @emph{not} follow
1022symbolic links at the level of parent directories.
1023
1024If you specify a number for @var{limit}, then after chasing through
1025that many links, the function just returns what it has even if that is
1026still a symbolic link.
2468d0c0
DL
1027@end defun
1028
1029 To illustrate the difference between @code{file-chase-links} and
1030@code{file-truename}, suppose that @file{/usr/foo} is a symbolic link to
1031the directory @file{/home/foo}, and @file{/home/foo/hello} is an
1032ordinary file (or at least, not a symbolic link) or nonexistent. Then
1033we would have:
1034
1035@example
1036(file-chase-links "/usr/foo/hello")
1037 ;; @r{This does not follow the links in the parent directories.}
1038 @result{} "/usr/foo/hello"
1039(file-truename "/usr/foo/hello")
1040 ;; @r{Assuming that @file{/home} is not a symbolic link.}
1041 @result{} "/home/foo/hello"
1042@end example
1043
3e01fd9d
RS
1044 @xref{Buffer File Name}, for related information.
1045
1046@node File Attributes
1047@comment node-name, next, previous, up
1048@subsection Other Information about Files
1049
1050 This section describes the functions for getting detailed information
1051about a file, other than its contents. This information includes the
1052mode bits that control access permission, the owner and group numbers,
1053the number of names, the inode number, the size, and the times of access
1054and modification.
1055
1056@defun file-modes filename
1057@cindex permission
1058@cindex file attributes
1059This function returns the mode bits of @var{filename}, as an integer.
1060The mode bits are also called the file permissions, and they specify
1061access control in the usual Unix fashion. If the low-order bit is 1,
b22f3a19 1062then the file is executable by all users, if the second-lowest-order bit
3e01fd9d
RS
1063is 1, then the file is writable by all users, etc.
1064
1065The highest value returnable is 4095 (7777 octal), meaning that
ad800164 1066everyone has read, write, and execute permission, that the @acronym{SUID} bit
3e01fd9d
RS
1067is set for both others and group, and that the sticky bit is set.
1068
19efcb46
LT
1069If @var{filename} does not exist, @code{file-modes} returns @code{nil}.
1070
1071This function recursively follows symbolic links at all levels.
1072
3e01fd9d
RS
1073@example
1074@group
1075(file-modes "~/junk/diffs")
1076 @result{} 492 ; @r{Decimal integer.}
1077@end group
1078@group
1079(format "%o" 492)
1080 @result{} "754" ; @r{Convert to octal.}
1081@end group
1082
1083@group
1084(set-file-modes "~/junk/diffs" 438)
1085 @result{} nil
1086@end group
1087
1088@group
1089(format "%o" 438)
1090 @result{} "666" ; @r{Convert to octal.}
1091@end group
1092
1093@group
1094% ls -l diffs
1095 -rw-rw-rw- 1 lewis 0 3063 Oct 30 16:00 diffs
1096@end group
1097@end example
1098@end defun
1099
19efcb46
LT
1100If the @var{filename} argument to the next two functions is a symbolic
1101link, then these function do @emph{not} replace it with its target.
1102However, they both recursively follow symbolic links at all levels of
1103parent directories.
1104
3e01fd9d
RS
1105@defun file-nlinks filename
1106This functions returns the number of names (i.e., hard links) that
1107file @var{filename} has. If the file does not exist, then this function
1108returns @code{nil}. Note that symbolic links have no effect on this
1109function, because they are not considered to be names of the files they
1110link to.
1111
1112@example
1113@group
1114% ls -l foo*
1115-rw-rw-rw- 2 rms 4 Aug 19 01:27 foo
1116-rw-rw-rw- 2 rms 4 Aug 19 01:27 foo1
1117@end group
1118
1119@group
1120(file-nlinks "foo")
1121 @result{} 2
1122@end group
1123@group
1124(file-nlinks "doesnt-exist")
1125 @result{} nil
1126@end group
1127@end example
1128@end defun
1129
f3bd74b3 1130@defun file-attributes filename &optional id-format
7baeca0c 1131@anchor{Definition of file-attributes}
3e01fd9d
RS
1132This function returns a list of attributes of file @var{filename}. If
1133the specified file cannot be opened, it returns @code{nil}.
f3bd74b3
LH
1134The optional parameter @var{id-format} specifies the preferred format
1135of attributes @acronym{UID} and @acronym{GID} (see below)---the
1136valid values are @code{'string} and @code{'integer}. The latter is
1137the default, but we plan to change that, so you should specify a
1138non-@code{nil} value for @var{id-format} if you use the returned
1139@acronym{UID} or @acronym{GID}.
3e01fd9d
RS
1140
1141The elements of the list, in order, are:
1142
1143@enumerate 0
1144@item
1145@code{t} for a directory, a string for a symbolic link (the name
1146linked to), or @code{nil} for a text file.
1147
1148@c Wordy so as to prevent an overfull hbox. --rjc 15mar92
1149@item
1150The number of names the file has. Alternate names, also known as hard
1151links, can be created by using the @code{add-name-to-file} function
f9f59935 1152(@pxref{Changing Files}).
3e01fd9d
RS
1153
1154@item
f3bd74b3
LH
1155The file's @acronym{UID} as a string or an integer. If a string
1156value cannot be looked up, the integer value is returned.
3e01fd9d
RS
1157
1158@item
f3bd74b3 1159The file's @acronym{GID} likewise.
3e01fd9d
RS
1160
1161@item
1162The time of last access, as a list of two integers.
1163The first integer has the high-order 16 bits of time,
1164the second has the low 16 bits. (This is similar to the
1165value of @code{current-time}; see @ref{Time of Day}.)
1166
1167@item
1168The time of last modification as a list of two integers (as above).
1169
1170@item
1171The time of last status change as a list of two integers (as above).
1172
1173@item
b6954afd
RS
1174The size of the file in bytes. If the size is too large to fit in a
1175Lisp integer, this is a floating point number.
3e01fd9d
RS
1176
1177@item
b22f3a19 1178The file's modes, as a string of ten letters or dashes,
3e01fd9d
RS
1179as in @samp{ls -l}.
1180
1181@item
ad800164 1182@code{t} if the file's @acronym{GID} would change if file were
3e01fd9d
RS
1183deleted and recreated; @code{nil} otherwise.
1184
1185@item
2a7d4505
RS
1186The file's inode number. If possible, this is an integer. If the inode
1187number is too large to be represented as an integer in Emacs Lisp, then
1188the value has the form @code{(@var{high} . @var{low})}, where @var{low}
1189holds the low 16 bits.
3e01fd9d
RS
1190
1191@item
773e81c7
EZ
1192The file system number of the file system that the file is in.
1193Depending on the magnitude of the value, this can be either an integer
1194or a cons cell, in the same manner as the inode number. This element
1195and the file's inode number together give enough information to
b22f3a19
RS
1196distinguish any two files on the system---no two files can have the same
1197values for both of these numbers.
3e01fd9d
RS
1198@end enumerate
1199
1200For example, here are the file attributes for @file{files.texi}:
1201
1202@example
1203@group
f3bd74b3
LH
1204(file-attributes "files.texi" 'string)
1205 @result{} (nil 1 "lh" "users"
177c0ea7
JB
1206 (8489 20284)
1207 (8489 20284)
3e01fd9d 1208 (8489 20285)
177c0ea7 1209 14906 "-rw-rw-rw-"
969fe9b5 1210 nil 129500 -32252)
3e01fd9d
RS
1211@end group
1212@end example
1213
1214@noindent
1215and here is how the result is interpreted:
1216
1217@table @code
1218@item nil
1219is neither a directory nor a symbolic link.
1220
1221@item 1
1222has only one name (the name @file{files.texi} in the current default
1223directory).
1224
f3bd74b3
LH
1225@item "lh"
1226is owned by the user with name "lh".
3e01fd9d 1227
f3bd74b3
LH
1228@item "users"
1229is in the group with name "users".
3e01fd9d
RS
1230
1231@item (8489 20284)
6784ada3 1232was last accessed on Aug 19 00:09.
3e01fd9d
RS
1233
1234@item (8489 20284)
1235was last modified on Aug 19 00:09.
1236
1237@item (8489 20285)
1238last had its inode changed on Aug 19 00:09.
1239
1240@item 14906
8241495d
RS
1241is 14906 bytes long. (It may not contain 14906 characters, though,
1242if some of the bytes belong to multibyte sequences.)
3e01fd9d
RS
1243
1244@item "-rw-rw-rw-"
1245has a mode of read and write access for the owner, group, and world.
1246
1247@item nil
ad800164 1248would retain the same @acronym{GID} if it were recreated.
3e01fd9d
RS
1249
1250@item 129500
1251has an inode number of 129500.
1252@item -32252
1253is on file system number -32252.
1254@end table
1255@end defun
1256
f9f59935 1257@node Changing Files
3e01fd9d
RS
1258@section Changing File Names and Attributes
1259@cindex renaming files
1260@cindex copying files
1261@cindex deleting files
1262@cindex linking files
1263@cindex setting modes of files
1264
1265 The functions in this section rename, copy, delete, link, and set the
1266modes of files.
1267
1268 In the functions that have an argument @var{newname}, if a file by the
1269name of @var{newname} already exists, the actions taken depend on the
1270value of the argument @var{ok-if-already-exists}:
1271
1272@itemize @bullet
1273@item
1274Signal a @code{file-already-exists} error if
1275@var{ok-if-already-exists} is @code{nil}.
1276
1277@item
1278Request confirmation if @var{ok-if-already-exists} is a number.
1279
1280@item
1281Replace the old file without confirmation if @var{ok-if-already-exists}
1282is any other value.
1283@end itemize
1284
19efcb46
LT
1285The next four commands all recursively follow symbolic links at all
1286levels of parent directories for their first argument, but, if that
1287argument is itself a symbolic link, then only @code{copy-file}
1288replaces it with its (recursive) target.
1289
1290@deffn Command add-name-to-file oldname newname &optional ok-if-already-exists
3e01fd9d
RS
1291@cindex file with multiple names
1292@cindex file hard link
1293This function gives the file named @var{oldname} the additional name
1294@var{newname}. This means that @var{newname} becomes a new ``hard
1295link'' to @var{oldname}.
1296
1297In the first part of the following example, we list two files,
1298@file{foo} and @file{foo3}.
1299
1300@example
1301@group
a9f0a989
RS
1302% ls -li fo*
130381908 -rw-rw-rw- 1 rms 29 Aug 18 20:32 foo
130484302 -rw-rw-rw- 1 rms 24 Aug 18 20:31 foo3
3e01fd9d
RS
1305@end group
1306@end example
1307
9e2b495b
RS
1308Now we create a hard link, by calling @code{add-name-to-file}, then list
1309the files again. This shows two names for one file, @file{foo} and
1310@file{foo2}.
3e01fd9d
RS
1311
1312@example
1313@group
a9f0a989 1314(add-name-to-file "foo" "foo2")
3e01fd9d
RS
1315 @result{} nil
1316@end group
1317
1318@group
a9f0a989
RS
1319% ls -li fo*
132081908 -rw-rw-rw- 2 rms 29 Aug 18 20:32 foo
132181908 -rw-rw-rw- 2 rms 29 Aug 18 20:32 foo2
132284302 -rw-rw-rw- 1 rms 24 Aug 18 20:31 foo3
3e01fd9d
RS
1323@end group
1324@end example
1325
a9f0a989 1326Finally, we evaluate the following:
3e01fd9d
RS
1327
1328@example
a9f0a989 1329(add-name-to-file "foo" "foo3" t)
3e01fd9d
RS
1330@end example
1331
1332@noindent
1333and list the files again. Now there are three names
1334for one file: @file{foo}, @file{foo2}, and @file{foo3}. The old
1335contents of @file{foo3} are lost.
1336
1337@example
1338@group
a9f0a989 1339(add-name-to-file "foo1" "foo3")
3e01fd9d
RS
1340 @result{} nil
1341@end group
1342
1343@group
a9f0a989
RS
1344% ls -li fo*
134581908 -rw-rw-rw- 3 rms 29 Aug 18 20:32 foo
134681908 -rw-rw-rw- 3 rms 29 Aug 18 20:32 foo2
134781908 -rw-rw-rw- 3 rms 29 Aug 18 20:32 foo3
3e01fd9d
RS
1348@end group
1349@end example
1350
a9f0a989 1351This function is meaningless on operating systems where multiple names
8241495d
RS
1352for one file are not allowed. Some systems implement multiple names
1353by copying the file instead.
3e01fd9d 1354
a9f0a989 1355See also @code{file-nlinks} in @ref{File Attributes}.
19efcb46 1356@end deffn
3e01fd9d
RS
1357
1358@deffn Command rename-file filename newname &optional ok-if-already-exists
1359This command renames the file @var{filename} as @var{newname}.
1360
1361If @var{filename} has additional names aside from @var{filename}, it
1362continues to have those names. In fact, adding the name @var{newname}
1363with @code{add-name-to-file} and then deleting @var{filename} has the
1364same effect as renaming, aside from momentary intermediate states.
3e01fd9d
RS
1365@end deffn
1366
31c8450e 1367@deffn Command copy-file oldname newname &optional ok-if-exists time mustbenew
3e01fd9d 1368This command copies the file @var{oldname} to @var{newname}. An
e598a60d
RS
1369error is signaled if @var{oldname} does not exist. If @var{newname}
1370names a directory, it copies @var{oldname} into that directory,
1371preserving its final name component.
3e01fd9d 1372
a9f0a989 1373If @var{time} is non-@code{nil}, then this function gives the new file
f9f59935
RS
1374the same last-modified time that the old one has. (This works on only
1375some operating systems.) If setting the time gets an error,
1376@code{copy-file} signals a @code{file-date-error} error.
3e01fd9d 1377
fbcffa4a
KG
1378This function copies the file modes, too.
1379
19efcb46
LT
1380In an interactive call, a prefix argument specifies a non-@code{nil}
1381value for @var{time}.
31c8450e
RS
1382
1383The argument @var{mustbenew} controls whether an existing file can be
1384overwritten. It works like the similarly-named argument of
45d2f8e8 1385@code{write-region} (@pxref{Writing to Files, mustbenew}).
19efcb46
LT
1386@end deffn
1387
1388@deffn Command make-symbolic-link filename newname &optional ok-if-exists
1389@pindex ln
1390@kindex file-already-exists
1391This command makes a symbolic link to @var{filename}, named
1392@var{newname}. This is like the shell command @samp{ln -s
1393@var{filename} @var{newname}}.
1394
1395This function is not available on systems that don't support symbolic
1396links.
3e01fd9d
RS
1397@end deffn
1398
1399@deffn Command delete-file filename
1400@pindex rm
1401This command deletes the file @var{filename}, like the shell command
1402@samp{rm @var{filename}}. If the file has multiple names, it continues
1403to exist under the other names.
1404
2468d0c0
DL
1405A suitable kind of @code{file-error} error is signaled if the file does
1406not exist, or is not deletable. (On Unix and GNU/Linux, a file is
1407deletable if its directory is writable.)
3e01fd9d 1408
19efcb46
LT
1409If @var{filename} is a symbolic link, @code{delete-file} does not
1410replace it with its target, but it does follow symbolic links at all
1411levels of parent directories.
3e01fd9d 1412
19efcb46 1413See also @code{delete-directory} in @ref{Create/Delete Dirs}.
3e01fd9d
RS
1414@end deffn
1415
1416@defun define-logical-name varname string
b705e83b 1417This function defines the logical name @var{varname} to have the value
3e01fd9d
RS
1418@var{string}. It is available only on VMS.
1419@end defun
1420
1421@defun set-file-modes filename mode
19efcb46
LT
1422This function sets mode bits of @var{filename} to @var{mode} (which
1423must be an integer). Only the low 12 bits of @var{mode} are used.
1424This function recursively follows symbolic links at all levels for
1425@var{filename}.
3e01fd9d
RS
1426@end defun
1427
1428@c Emacs 19 feature
1429@defun set-default-file-modes mode
7231e819 1430@cindex umask
3e01fd9d
RS
1431This function sets the default file protection for new files created by
1432Emacs and its subprocesses. Every file created with Emacs initially has
f74bbbbf
RS
1433this protection, or a subset of it (@code{write-region} will not give a
1434file execute permission even if the default file protection allows
1435execute permission). On Unix and GNU/Linux, the default protection is
1436the bitwise complement of the ``umask'' value.
3e01fd9d 1437
f9f59935 1438The argument @var{mode} must be an integer. On most systems, only the
f74bbbbf
RS
1439low 9 bits of @var{mode} are meaningful. You can use the Lisp construct
1440for octal character codes to enter @var{mode}; for example,
1441
1442@example
1443(set-default-file-modes ?\644)
1444@end example
3e01fd9d
RS
1445
1446Saving a modified version of an existing file does not count as creating
f74bbbbf
RS
1447the file; it preserves the existing file's mode, whatever that is. So
1448the default file protection has no effect.
3e01fd9d
RS
1449@end defun
1450
1451@defun default-file-modes
1452This function returns the current default protection value.
1453@end defun
1454
37c0b8fd
EZ
1455@defun set-file-times filename &optional time
1456This function sets the access and modification times of @var{filename}
1457to @var{time}. The return value is @code{t} if the times are successfully
1458set, otherwise it is @code{nil}. @var{time} defaults to the current
1459time and must be in the format returned by @code{current-time}
1460(@pxref{Time of Day}).
1461@end defun
1462
841e483d
RS
1463@cindex MS-DOS and file modes
1464@cindex file modes and MS-DOS
1465 On MS-DOS, there is no such thing as an ``executable'' file mode bit.
8241495d
RS
1466So Emacs considers a file executable if its name ends in one of the
1467standard executable extensions, such as @file{.com}, @file{.bat},
1468@file{.exe}, and some others. Files that begin with the Unix-standard
1469@samp{#!} signature, such as shell and Perl scripts, are also considered
1470as executable files. This is reflected in the values returned by
1471@code{file-modes} and @code{file-attributes}. Directories are also
1472reported with executable bit set, for compatibility with Unix.
841e483d 1473
3e01fd9d
RS
1474@node File Names
1475@section File Names
1476@cindex file names
1477
1478 Files are generally referred to by their names, in Emacs as elsewhere.
1479File names in Emacs are represented as strings. The functions that
1480operate on a file all expect a file name argument.
1481
1482 In addition to operating on files themselves, Emacs Lisp programs
f9f59935 1483often need to operate on file names; i.e., to take them apart and to use
3e01fd9d
RS
1484part of a name to construct related file names. This section describes
1485how to manipulate file names.
1486
1487 The functions in this section do not actually access files, so they
1488can operate on file names that do not refer to an existing file or
1489directory.
1490
5557b83b
RS
1491 On MS-DOS and MS-Windows, these functions (like the function that
1492actually operate on files) accept MS-DOS or MS-Windows file-name syntax,
1493where backslashes separate the components, as well as Unix syntax; but
1494they always return Unix syntax. On VMS, these functions (and the ones
1495that operate on files) understand both VMS file-name syntax and Unix
1496syntax. This enables Lisp programs to specify file names in Unix syntax
1497and work properly on all systems without change.
3e01fd9d
RS
1498
1499@menu
1500* File Name Components:: The directory part of a file name, and the rest.
85df4f66 1501* Relative File Names:: Some file names are relative to a current directory.
3e01fd9d
RS
1502* Directory Names:: A directory's name as a directory
1503 is different from its name as a file.
3e01fd9d
RS
1504* File Name Expansion:: Converting relative file names to absolute ones.
1505* Unique File Names:: Generating names for temporary files.
1506* File Name Completion:: Finding the completions for a given file name.
fbc1b72c
RS
1507* Standard File Names:: If your package uses a fixed file name,
1508 how to handle various operating systems simply.
3e01fd9d
RS
1509@end menu
1510
1511@node File Name Components
1512@subsection File Name Components
1513@cindex directory part (of file name)
1514@cindex nondirectory part (of file name)
1515@cindex version number (in file name)
1516
1517 The operating system groups files into directories. To specify a
b22f3a19
RS
1518file, you must specify the directory and the file's name within that
1519directory. Therefore, Emacs considers a file name as having two main
1520parts: the @dfn{directory name} part, and the @dfn{nondirectory} part
1521(or @dfn{file name within the directory}). Either part may be empty.
1522Concatenating these two parts reproduces the original file name.
3e01fd9d 1523
8241495d 1524 On most systems, the directory part is everything up to and including
5557b83b
RS
1525the last slash (backslash is also allowed in input on MS-DOS or
1526MS-Windows); the nondirectory part is the rest. The rules in VMS syntax
1527are complicated.
3e01fd9d
RS
1528
1529 For some purposes, the nondirectory part is further subdivided into
8241495d
RS
1530the name proper and the @dfn{version number}. On most systems, only
1531backup files have version numbers in their names. On VMS, every file
1532has a version number, but most of the time the file name actually used
1533in Emacs omits the version number, so that version numbers in Emacs are
f9f59935 1534found mostly in directory lists.
3e01fd9d
RS
1535
1536@defun file-name-directory filename
85df4f66
RS
1537This function returns the directory part of @var{filename}, as a
1538directory name (@pxref{Directory Names}), or @code{nil} if
1539@var{filename} does not include a directory part.
1540
1541On GNU and Unix systems, a string returned by this function always
1542ends in a slash. On MSDOS it can also end in a colon. On VMS, it
1543returns a string ending in one of the three characters @samp{:},
3e01fd9d
RS
1544@samp{]}, or @samp{>}.
1545
1546@example
1547@group
1548(file-name-directory "lewis/foo") ; @r{Unix example}
1549 @result{} "lewis/"
1550@end group
1551@group
1552(file-name-directory "foo") ; @r{Unix example}
1553 @result{} nil
1554@end group
1555@group
1556(file-name-directory "[X]FOO.TMP") ; @r{VMS example}
1557 @result{} "[X]"
1558@end group
1559@end example
1560@end defun
1561
1562@defun file-name-nondirectory filename
f9f59935 1563This function returns the nondirectory part of @var{filename}.
3e01fd9d
RS
1564
1565@example
1566@group
1567(file-name-nondirectory "lewis/foo")
1568 @result{} "foo"
1569@end group
1570@group
1571(file-name-nondirectory "foo")
1572 @result{} "foo"
1573@end group
1574@group
85df4f66
RS
1575(file-name-nondirectory "lewis/")
1576 @result{} ""
1577@end group
1578@group
3e01fd9d
RS
1579;; @r{The following example is accurate only on VMS.}
1580(file-name-nondirectory "[X]FOO.TMP")
1581 @result{} "FOO.TMP"
1582@end group
1583@end example
1584@end defun
1585
2468d0c0 1586@defun file-name-sans-versions filename &optional keep-backup-version
f9f59935 1587This function returns @var{filename} with any file version numbers,
2468d0c0
DL
1588backup version numbers, or trailing tildes discarded.
1589
1590If @var{keep-backup-version} is non-@code{nil}, then true file version
1591numbers understood as such by the file system are discarded from the
1592return value, but backup version numbers are kept.
3e01fd9d
RS
1593
1594@example
1595@group
1596(file-name-sans-versions "~rms/foo.~1~")
1597 @result{} "~rms/foo"
1598@end group
1599@group
1600(file-name-sans-versions "~rms/foo~")
1601 @result{} "~rms/foo"
1602@end group
1603@group
1604(file-name-sans-versions "~rms/foo")
1605 @result{} "~rms/foo"
1606@end group
1607@group
1608;; @r{The following example applies to VMS only.}
1609(file-name-sans-versions "foo;23")
1610 @result{} "foo"
1611@end group
1612@end example
1613@end defun
1614
19efcb46
LT
1615@defun file-name-extension filename &optional period
1616This function returns @var{filename}'s final ``extension'', if any,
1617after applying @code{file-name-sans-versions} to remove any
1618version/backup part. The extension, in a file name, is the part that
1619starts with the last @samp{.} in the last name component (minus
1620any version/backup part).
1621
1622This function returns @code{nil} for extensionless file names such as
1623@file{foo}. It returns @code{""} for null extensions, as in
1624@file{foo.}. If the last component of a file name begins with a
1625@samp{.}, that @samp{.} doesn't count as the beginning of an
1626extension. Thus, @file{.emacs}'s ``extension'' is @code{nil}, not
1627@samp{.emacs}.
1628
1629If @var{period} is non-@code{nil}, then the returned value includes
1630the period that delimits the extension, and if @var{filename} has no
1631extension, the value is @code{""}.
1632@end defun
1633
22697dac 1634@defun file-name-sans-extension filename
19efcb46
LT
1635This function returns @var{filename} minus its extension, if any. The
1636version/backup part, if present, is only removed if the file has an
1637extension. For example,
bfe721d1
KH
1638
1639@example
1640(file-name-sans-extension "foo.lose.c")
1641 @result{} "foo.lose"
1642(file-name-sans-extension "big.hack/foo")
1643 @result{} "big.hack/foo"
98d7eccb 1644(file-name-sans-extension "/my/home/.emacs")
df140a68 1645 @result{} "/my/home/.emacs"
98d7eccb
EZ
1646(file-name-sans-extension "/my/home/.emacs.el")
1647 @result{} "/my/home/.emacs"
19efcb46
LT
1648(file-name-sans-extension "~/foo.el.~3~")
1649 @result{} "~/foo"
1650(file-name-sans-extension "~/foo.~3~")
1651 @result{} "~/foo.~3~"
bfe721d1 1652@end example
19efcb46
LT
1653
1654Note that the @samp{.~3~} in the two last examples is the backup part,
1655not an extension.
22697dac
KH
1656@end defun
1657
5557b83b 1658@ignore
177c0ea7 1659Andrew Innes says that this
5557b83b
RS
1660
1661@c @defvar directory-sep-char
1662@c @tindex directory-sep-char
1663This variable holds the character that Emacs normally uses to separate
1664file name components. The default value is @code{?/}, but on MS-Windows
1665you can set it to @code{?\\}; then the functions that transform file names
1666use backslashes in their output.
1667
1668File names using backslashes work as input to Lisp primitives even on
1669MS-DOS and MS-Windows, even if @code{directory-sep-char} has its default
1670value of @code{?/}.
f855fad2 1671@end defvar
5557b83b 1672@end ignore
f855fad2 1673
85df4f66
RS
1674@node Relative File Names
1675@subsection Absolute and Relative File Names
1676@cindex absolute file name
1677@cindex relative file name
1678
1679 All the directories in the file system form a tree starting at the
1680root directory. A file name can specify all the directory names
1681starting from the root of the tree; then it is called an @dfn{absolute}
1682file name. Or it can specify the position of the file in the tree
1683relative to a default directory; then it is called a @dfn{relative} file
1684name. On Unix and GNU/Linux, an absolute file name starts with a slash
1685or a tilde (@samp{~}), and a relative one does not. On MS-DOS and
1686MS-Windows, an absolute file name starts with a slash or a backslash, or
1687with a drive specification @samp{@var{x}:/}, where @var{x} is the
1688@dfn{drive letter}. The rules on VMS are complicated.
1689
1690@defun file-name-absolute-p filename
1691This function returns @code{t} if file @var{filename} is an absolute
1692file name, @code{nil} otherwise. On VMS, this function understands both
1693Unix syntax and VMS syntax.
1694
1695@example
1696@group
1697(file-name-absolute-p "~rms/foo")
1698 @result{} t
1699@end group
1700@group
1701(file-name-absolute-p "rms/foo")
1702 @result{} nil
1703@end group
1704@group
1705(file-name-absolute-p "/user/rms/foo")
1706 @result{} t
1707@end group
1708@end example
1beefde7
DL
1709@end defun
1710
3e01fd9d
RS
1711@node Directory Names
1712@comment node-name, next, previous, up
1713@subsection Directory Names
1714@cindex directory name
1715@cindex file name of directory
1716
85df4f66
RS
1717 A @dfn{directory name} is the name of a directory. A directory is
1718actually a kind of file, so it has a file name, which is related to
1719the directory name but not identical to it. (This is not quite the
1720same as the usual Unix terminology.) These two different names for
1721the same entity are related by a syntactic transformation. On GNU and
19efcb46
LT
1722Unix systems, this is simple: a directory name ends in a slash,
1723whereas the directory's name as a file lacks that slash. On MSDOS and
1724VMS, the relationship is more complicated.
3e01fd9d
RS
1725
1726 The difference between a directory name and its name as a file is
1727subtle but crucial. When an Emacs variable or function argument is
1728described as being a directory name, a file name of a directory is not
85df4f66
RS
1729acceptable. When @code{file-name-directory} returns a string, that is
1730always a directory name.
3e01fd9d 1731
b22f3a19
RS
1732 The following two functions convert between directory names and file
1733names. They do nothing special with environment variable substitutions
19efcb46 1734such as @samp{$HOME}, and the constructs @samp{~}, @samp{.} and @samp{..}.
3e01fd9d
RS
1735
1736@defun file-name-as-directory filename
1737This function returns a string representing @var{filename} in a form
8241495d
RS
1738that the operating system will interpret as the name of a directory. On
1739most systems, this means appending a slash to the string (if it does not
1740already end in one). On VMS, the function converts a string of the form
f9f59935 1741@file{[X]Y.DIR.1} to the form @file{[X.Y]}.
3e01fd9d
RS
1742
1743@example
1744@group
1745(file-name-as-directory "~rms/lewis")
1746 @result{} "~rms/lewis/"
1747@end group
1748@end example
1749@end defun
1750
1751@defun directory-file-name dirname
f9f59935 1752This function returns a string representing @var{dirname} in a form that
8241495d 1753the operating system will interpret as the name of a file. On most
5557b83b
RS
1754systems, this means removing the final slash (or backslash) from the
1755string. On VMS, the function converts a string of the form @file{[X.Y]}
1756to @file{[X]Y.DIR.1}.
3e01fd9d
RS
1757
1758@example
1759@group
1760(directory-file-name "~lewis/")
1761 @result{} "~lewis"
1762@end group
1763@end example
1764@end defun
1765
85df4f66
RS
1766 Given a directory name, you can combine it with a relative file name
1767using @code{concat}:
1768
1769@example
1770(concat @var{dirname} @var{relfile})
1771@end example
1772
1773@noindent
1774Be sure to verify that the file name is relative before doing that.
1775If you use an absolute file name, the results could be syntactically
1776invalid or refer to the wrong file.
1777
1778 If you want to use a directory file name in making such a
1779combination, you must first convert it to a directory name using
1780@code{file-name-as-directory}:
1781
1782@example
1783(concat (file-name-as-directory @var{dirfile}) @var{relfile})
1784@end example
1785
1786@noindent
1787Don't try concatenating a slash by hand, as in
1788
1789@example
1790;;; @r{Wrong!}
1791(concat @var{dirfile} "/" @var{relfile})
1792@end example
1793
1794@noindent
1795because this is not portable. Always use
1796@code{file-name-as-directory}.
1797
3e01fd9d
RS
1798@cindex directory name abbreviation
1799 Directory name abbreviations are useful for directories that are
1800normally accessed through symbolic links. Sometimes the users recognize
1801primarily the link's name as ``the name'' of the directory, and find it
1802annoying to see the directory's ``real'' name. If you define the link
1803name as an abbreviation for the ``real'' name, Emacs shows users the
1804abbreviation instead.
1805
1806@defvar directory-abbrev-alist
1807The variable @code{directory-abbrev-alist} contains an alist of
1808abbreviations to use for file directories. Each element has the form
1809@code{(@var{from} . @var{to})}, and says to replace @var{from} with
1810@var{to} when it appears in a directory name. The @var{from} string is
1811actually a regular expression; it should always start with @samp{^}.
19efcb46
LT
1812The @var{to} string should be an ordinary absolute directory name. Do
1813not use @samp{~} to stand for a home directory in that string. The
1814function @code{abbreviate-file-name} performs these substitutions.
3e01fd9d
RS
1815
1816You can set this variable in @file{site-init.el} to describe the
1817abbreviations appropriate for your site.
1818
1819Here's an example, from a system on which file system @file{/home/fsf}
1820and so on are normally accessed through symbolic links named @file{/fsf}
1821and so on.
1822
1823@example
1824(("^/home/fsf" . "/fsf")
1825 ("^/home/gp" . "/gp")
1826 ("^/home/gd" . "/gd"))
1827@end example
1828@end defvar
1829
1830 To convert a directory name to its abbreviation, use this
1831function:
1832
85df4f66 1833@defun abbreviate-file-name filename
7baeca0c 1834@anchor{Definition of abbreviate-file-name}
3e01fd9d
RS
1835This function applies abbreviations from @code{directory-abbrev-alist}
1836to its argument, and substitutes @samp{~} for the user's home
85df4f66
RS
1837directory. You can use it for directory names and for file names,
1838because it recognizes abbreviations even as part of the name.
3e01fd9d
RS
1839@end defun
1840
1841@node File Name Expansion
1842@subsection Functions that Expand Filenames
1843@cindex expansion of file names
1844
1845 @dfn{Expansion} of a file name means converting a relative file name
1846to an absolute one. Since this is done relative to a default directory,
1847you must specify the default directory name as well as the file name to
1848be expanded. Expansion also simplifies file names by eliminating
1849redundancies such as @file{./} and @file{@var{name}/../}.
1850
19efcb46
LT
1851In the next two functions, the @var{directory} argument can be either
1852a directory name or a directory file name. @xref{Directory Names}.
1853
3e01fd9d
RS
1854@defun expand-file-name filename &optional directory
1855This function converts @var{filename} to an absolute file name. If
f9f59935
RS
1856@var{directory} is supplied, it is the default directory to start with
1857if @var{filename} is relative. (The value of @var{directory} should
1858itself be an absolute directory name; it may start with @samp{~}.)
3e01fd9d
RS
1859Otherwise, the current buffer's value of @code{default-directory} is
1860used. For example:
1861
1862@example
1863@group
1864(expand-file-name "foo")
1865 @result{} "/xcssun/users/rms/lewis/foo"
1866@end group
1867@group
1868(expand-file-name "../foo")
1869 @result{} "/xcssun/users/rms/foo"
1870@end group
1871@group
1872(expand-file-name "foo" "/usr/spool/")
1873 @result{} "/usr/spool/foo"
1874@end group
1875@group
1876(expand-file-name "$HOME/foo")
1877 @result{} "/xcssun/users/rms/lewis/$HOME/foo"
1878@end group
1879@end example
1880
19efcb46
LT
1881If the part of the combined file name before the first slash is
1882@samp{~}, it expands to the value of the @env{HOME} environment
1883variable (usually your home directory). If the part before the first
1884slash is @samp{~@var{user}} and if @var{user} is a valid login name,
1885it expands to @var{user}'s home directory.
1886
3e01fd9d
RS
1887Filenames containing @samp{.} or @samp{..} are simplified to their
1888canonical form:
1889
1890@example
1891@group
1892(expand-file-name "bar/../foo")
1893 @result{} "/xcssun/users/rms/lewis/foo"
1894@end group
1895@end example
1896
3e01fd9d
RS
1897Note that @code{expand-file-name} does @emph{not} expand environment
1898variables; only @code{substitute-in-file-name} does that.
19efcb46
LT
1899
1900Note also that @code{expand-file-name} does not follow symbolic links
1901at any level. This results in a difference between the way
1902@code{file-truename} and @code{expand-file-name} treat @samp{..}.
1903Assuming that @samp{/tmp/bar} is a symbolic link to the directory
1904@samp{/tmp/foo/bar} we get:
1905
1906@example
1907@group
1908(file-truename "/tmp/bar/../myfile")
1909 @result{} "/tmp/foo/myfile"
1910@end group
1911@group
1912(expand-file-name "/tmp/bar/../myfile")
1913 @result{} "/tmp/myfile"
1914@end group
1915@end example
1916
1917If you may need to follow symbolic links preceding @samp{..}, you
1918should make sure to call @code{file-truename} without prior direct or
1919indirect calls to @code{expand-file-name}. @xref{Truenames}.
3e01fd9d
RS
1920@end defun
1921
1922@c Emacs 19 feature
2468d0c0 1923@defun file-relative-name filename &optional directory
3e01fd9d 1924This function does the inverse of expansion---it tries to return a
b22f3a19 1925relative name that is equivalent to @var{filename} when interpreted
2468d0c0
DL
1926relative to @var{directory}. If @var{directory} is omitted or
1927@code{nil}, it defaults to the current buffer's default directory.
89c77172
RS
1928
1929On some operating systems, an absolute file name begins with a device
1930name. On such systems, @var{filename} has no relative equivalent based
1931on @var{directory} if they start with two different device names. In
1932this case, @code{file-relative-name} returns @var{filename} in absolute
1933form.
3e01fd9d
RS
1934
1935@example
1936(file-relative-name "/foo/bar" "/foo/")
a9f0a989 1937 @result{} "bar"
3e01fd9d 1938(file-relative-name "/foo/bar" "/hack/")
39a5713c 1939 @result{} "../foo/bar"
3e01fd9d
RS
1940@end example
1941@end defun
1942
1943@defvar default-directory
1944The value of this buffer-local variable is the default directory for the
1945current buffer. It should be an absolute directory name; it may start
969fe9b5 1946with @samp{~}. This variable is buffer-local in every buffer.
3e01fd9d
RS
1947
1948@code{expand-file-name} uses the default directory when its second
1949argument is @code{nil}.
1950
8241495d 1951Aside from VMS, the value is always a string ending with a slash.
3e01fd9d
RS
1952
1953@example
1954@group
1955default-directory
1956 @result{} "/user/lewis/manual/"
1957@end group
1958@end example
1959@end defvar
1960
1961@defun substitute-in-file-name filename
7baeca0c 1962@anchor{Definition of substitute-in-file-name}
19efcb46 1963This function replaces environment variable references in
85d88ff5
RS
1964@var{filename} with the environment variable values. Following
1965standard Unix shell syntax, @samp{$} is the prefix to substitute an
1966environment variable value. If the input contains @samp{$$}, that is
1967converted to @samp{$}; this gives the user a way to ``quote'' a
1968@samp{$}.
3e01fd9d
RS
1969
1970The environment variable name is the series of alphanumeric characters
1971(including underscores) that follow the @samp{$}. If the character following
1972the @samp{$} is a @samp{@{}, then the variable name is everything up to the
1973matching @samp{@}}.
1974
85d88ff5
RS
1975Calling @code{substitute-in-file-name} on output produced by
1976@code{substitute-in-file-name} tends to give incorrect results. For
1977instance, use of @samp{$$} to quote a single @samp{$} won't work
1978properly, and @samp{$} in an environment variable's value could lead
1979to repeated substitution. Therefore, programs that call this function
1980and put the output where it will be passed to this function need to
1981double all @samp{$} characters to prevent subsequent incorrect
1982results.
1983
3e01fd9d
RS
1984@c Wordy to avoid overfull hbox. --rjc 15mar92
1985Here we assume that the environment variable @code{HOME}, which holds
1986the user's home directory name, has value @samp{/xcssun/users/rms}.
1987
1988@example
1989@group
1990(substitute-in-file-name "$HOME/foo")
1991 @result{} "/xcssun/users/rms/foo"
1992@end group
1993@end example
1994
19efcb46
LT
1995After substitution, if a @samp{~} or a @samp{/} appears immediately
1996after another @samp{/}, the function discards everything before it (up
1997through the immediately preceding @samp{/}).
3e01fd9d
RS
1998
1999@example
2000@group
2001(substitute-in-file-name "bar/~/foo")
2002 @result{} "~/foo"
2003@end group
2004@group
2005(substitute-in-file-name "/usr/local/$HOME/foo")
2006 @result{} "/xcssun/users/rms/foo"
f9f59935 2007 ;; @r{@file{/usr/local/} has been discarded.}
3e01fd9d
RS
2008@end group
2009@end example
2010
2011On VMS, @samp{$} substitution is not done, so this function does nothing
2012on VMS except discard superfluous initial components as shown above.
2013@end defun
2014
2015@node Unique File Names
2016@subsection Generating Unique File Names
2017
2018 Some programs need to write temporary files. Here is the usual way to
c3dd4d76 2019construct a name for such a file:
3e01fd9d
RS
2020
2021@example
8241495d 2022(make-temp-file @var{name-of-application})
3e01fd9d
RS
2023@end example
2024
2025@noindent
8241495d
RS
2026The job of @code{make-temp-file} is to prevent two different users or
2027two different jobs from trying to use the exact same file name.
3e01fd9d 2028
19efcb46 2029@defun make-temp-file prefix &optional dir-flag suffix
8241495d 2030@tindex make-temp-file
5eb20bca
EZ
2031This function creates a temporary file and returns its name. Emacs
2032creates the temporary file's name by adding to @var{prefix} some
2033random characters that are different in each Emacs job. The result is
2034guaranteed to be a newly created empty file. On MS-DOS, this function
2035can truncate the @var{string} prefix to fit into the 8+3 file-name
2036limits. If @var{prefix} is a relative file name, it is expanded
2037against @code{temporary-file-directory}.
3e01fd9d
RS
2038
2039@example
2040@group
8241495d 2041(make-temp-file "foo")
a9f0a989 2042 @result{} "/tmp/foo232J6v"
3e01fd9d
RS
2043@end group
2044@end example
2045
8241495d
RS
2046When @code{make-temp-file} returns, the file has been created and is
2047empty. At that point, you should write the intended contents into the
2048file.
2049
19efcb46
LT
2050If @var{dir-flag} is non-@code{nil}, @code{make-temp-file} creates an
2051empty directory instead of an empty file. It returns the file name,
2052not the directory name, of that directory. @xref{Directory Names}.
2053
2054If @var{suffix} is non-@code{nil}, @code{make-temp-file} adds it at
2055the end of the file name.
8241495d 2056
3e01fd9d 2057To prevent conflicts among different libraries running in the same
8241495d
RS
2058Emacs, each Lisp program that uses @code{make-temp-file} should have its
2059own @var{prefix}. The number added to the end of @var{prefix}
a9f0a989
RS
2060distinguishes between the same application running in different Emacs
2061jobs. Additional added characters permit a large number of distinct
2062names even in one Emacs job.
8241495d
RS
2063@end defun
2064
2065 The default directory for temporary files is controlled by the
2066variable @code{temporary-file-directory}. This variable gives the user
2067a uniform way to specify the directory for all temporary files. Some
2068programs use @code{small-temporary-file-directory} instead, if that is
2069non-@code{nil}. To use it, you should expand the prefix against
2070the proper directory before calling @code{make-temp-file}.
2071
2072 In older Emacs versions where @code{make-temp-file} does not exist,
2073you should use @code{make-temp-name} instead:
2074
2075@example
2076(make-temp-name
2077 (expand-file-name @var{name-of-application}
2078 temporary-file-directory))
2079@end example
2080
2081@defun make-temp-name string
5eb20bca
EZ
2082This function generates a string that can be used as a unique file
2083name. The name starts with @var{string}, and has several random
2084characters appended to it, which are different in each Emacs job. It
2085is like @code{make-temp-file} except that it just constructs a name,
2086and does not create a file. Another difference is that @var{string}
2087should be an absolute file name. On MS-DOS, this function can
2088truncate the @var{string} prefix to fit into the 8+3 file-name limits.
3e01fd9d
RS
2089@end defun
2090
a9f0a989 2091@defvar temporary-file-directory
8241495d
RS
2092@cindex @code{TMPDIR} environment variable
2093@cindex @code{TMP} environment variable
2094@cindex @code{TEMP} environment variable
a9f0a989
RS
2095This variable specifies the directory name for creating temporary files.
2096Its value should be a directory name (@pxref{Directory Names}), but it
f1e2c45e
RS
2097is good for Lisp programs to cope if the value is a directory's file
2098name instead. Using the value as the second argument to
2099@code{expand-file-name} is a good way to achieve that.
a9f0a989
RS
2100
2101The default value is determined in a reasonable way for your operating
8241495d
RS
2102system; it is based on the @code{TMPDIR}, @code{TMP} and @code{TEMP}
2103environment variables, with a fall-back to a system-dependent name if
2104none of these variables is defined.
a9f0a989 2105
19efcb46
LT
2106Even if you do not use @code{make-temp-file} to create the temporary
2107file, you should still use this variable to decide which directory to
2108put the file in. However, if you expect the file to be small, you
2109should use @code{small-temporary-file-directory} first if that is
2110non-@code{nil}.
8241495d
RS
2111@end defvar
2112
2113@tindex small-temporary-file-directory
2114@defvar small-temporary-file-directory
c3dd4d76 2115This variable specifies the directory name for
8241495d
RS
2116creating certain temporary files, which are likely to be small.
2117
2118If you want to write a temporary file which is likely to be small, you
2119should compute the directory like this:
2120
2121@example
2122(make-temp-file
2123 (expand-file-name @var{prefix}
2124 (or small-temporary-file-directory
2125 temporary-file-directory)))
2126@end example
a9f0a989
RS
2127@end defvar
2128
3e01fd9d
RS
2129@node File Name Completion
2130@subsection File Name Completion
2131@cindex file name completion subroutines
2132@cindex completion, file name
2133
2134 This section describes low-level subroutines for completing a file
2135name. For other completion functions, see @ref{Completion}.
2136
2137@defun file-name-all-completions partial-filename directory
2138This function returns a list of all possible completions for a file
2139whose name starts with @var{partial-filename} in directory
2140@var{directory}. The order of the completions is the order of the files
2141in the directory, which is unpredictable and conveys no useful
2142information.
2143
2144The argument @var{partial-filename} must be a file name containing no
5557b83b
RS
2145directory part and no slash (or backslash on some systems). The current
2146buffer's default directory is prepended to @var{directory}, if
2147@var{directory} is not absolute.
3e01fd9d 2148
9e2b495b
RS
2149In the following example, suppose that @file{~rms/lewis} is the current
2150default directory, and has five files whose names begin with @samp{f}:
3e01fd9d
RS
2151@file{foo}, @file{file~}, @file{file.c}, @file{file.c.~1~}, and
2152@file{file.c.~2~}.@refill
2153
2154@example
2155@group
2156(file-name-all-completions "f" "")
177c0ea7 2157 @result{} ("foo" "file~" "file.c.~2~"
3e01fd9d
RS
2158 "file.c.~1~" "file.c")
2159@end group
2160
2161@group
177c0ea7 2162(file-name-all-completions "fo" "")
3e01fd9d
RS
2163 @result{} ("foo")
2164@end group
2165@end example
2166@end defun
2167
2168@defun file-name-completion filename directory
2169This function completes the file name @var{filename} in directory
2170@var{directory}. It returns the longest prefix common to all file names
2171in directory @var{directory} that start with @var{filename}.
2172
2173If only one match exists and @var{filename} matches it exactly, the
2174function returns @code{t}. The function returns @code{nil} if directory
2175@var{directory} contains no name starting with @var{filename}.
2176
2177In the following example, suppose that the current default directory
2178has five files whose names begin with @samp{f}: @file{foo},
2179@file{file~}, @file{file.c}, @file{file.c.~1~}, and
2180@file{file.c.~2~}.@refill
2181
2182@example
2183@group
2184(file-name-completion "fi" "")
2185 @result{} "file"
2186@end group
2187
2188@group
2189(file-name-completion "file.c.~1" "")
2190 @result{} "file.c.~1~"
2191@end group
2192
2193@group
2194(file-name-completion "file.c.~1~" "")
2195 @result{} t
2196@end group
2197
2198@group
2199(file-name-completion "file.c.~3" "")
2200 @result{} nil
2201@end group
2202@end example
2203@end defun
2204
2205@defopt completion-ignored-extensions
2206@code{file-name-completion} usually ignores file names that end in any
2207string in this list. It does not ignore them when all the possible
19efcb46
LT
2208completions end in one of these suffixes. This variable has no effect
2209on @code{file-name-all-completions}.@refill
3e01fd9d
RS
2210
2211A typical value might look like this:
2212
2213@example
2214@group
2215completion-ignored-extensions
2216 @result{} (".o" ".elc" "~" ".dvi")
2217@end group
2218@end example
8333f721
EZ
2219
2220If an element of @code{completion-ignored-extensions} ends in a slash
2221@samp{/}, it signals a directory. The elements which do @emph{not} end
2222in a slash will never match a directory; thus, the above value will not
2223filter out a directory named @file{foo.elc}.
3e01fd9d
RS
2224@end defopt
2225
fbc1b72c
RS
2226@node Standard File Names
2227@subsection Standard File Names
2228
2229 Most of the file names used in Lisp programs are entered by the user.
2230But occasionally a Lisp program needs to specify a standard file name
2231for a particular use---typically, to hold customization information
2232about each user. For example, abbrev definitions are stored (by
2233default) in the file @file{~/.abbrev_defs}; the @code{completion}
2234package stores completions in the file @file{~/.completions}. These are
2235two of the many standard file names used by parts of Emacs for certain
2236purposes.
2237
2238 Various operating systems have their own conventions for valid file
2239names and for which file names to use for user profile data. A Lisp
2240program which reads a file using a standard file name ought to use, on
2241each type of system, a file name suitable for that system. The function
2242@code{convert-standard-filename} makes this easy to do.
2243
2244@defun convert-standard-filename filename
2245This function alters the file name @var{filename} to fit the conventions
2246of the operating system in use, and returns the result as a new string.
2247@end defun
2248
2249 The recommended way to specify a standard file name in a Lisp program
2250is to choose a name which fits the conventions of GNU and Unix systems,
2251usually with a nondirectory part that starts with a period, and pass it
2252to @code{convert-standard-filename} instead of using it directly. Here
2253is an example from the @code{completion} package:
2254
2255@example
2256(defvar save-completions-file-name
2257 (convert-standard-filename "~/.completions")
2258 "*The file name to save completions to.")
2259@end example
2260
2261 On GNU and Unix systems, and on some other systems as well,
2262@code{convert-standard-filename} returns its argument unchanged. On
a9f0a989 2263some other systems, it alters the name to fit the system's conventions.
fbc1b72c
RS
2264
2265 For example, on MS-DOS the alterations made by this function include
2266converting a leading @samp{.} to @samp{_}, converting a @samp{_} in the
2267middle of the name to @samp{.} if there is no other @samp{.}, inserting
2268a @samp{.} after eight characters if there is none, and truncating to
2269three characters after the @samp{.}. (It makes other changes as well.)
2270Thus, @file{.abbrev_defs} becomes @file{_abbrev.def}, and
2271@file{.completions} becomes @file{_complet.ion}.
2272
3e01fd9d
RS
2273@node Contents of Directories
2274@section Contents of Directories
2275@cindex directory-oriented functions
2276@cindex file names in directory
2277
2278 A directory is a kind of file that contains other files entered under
2279various names. Directories are a feature of the file system.
2280
2281 Emacs can list the names of the files in a directory as a Lisp list,
2282or display the names in a buffer using the @code{ls} shell command. In
2283the latter case, it can optionally display information about each file,
2284depending on the options passed to the @code{ls} command.
2285
2286@defun directory-files directory &optional full-name match-regexp nosort
2287This function returns a list of the names of the files in the directory
2288@var{directory}. By default, the list is in alphabetical order.
2289
2290If @var{full-name} is non-@code{nil}, the function returns the files'
2291absolute file names. Otherwise, it returns the names relative to
2292the specified directory.
2293
2294If @var{match-regexp} is non-@code{nil}, this function returns only
2295those file names that contain a match for that regular expression---the
2296other file names are excluded from the list.
2297
2298@c Emacs 19 feature
2299If @var{nosort} is non-@code{nil}, @code{directory-files} does not sort
2300the list, so you get the file names in no particular order. Use this if
2301you want the utmost possible speed and don't care what order the files
2302are processed in. If the order of processing is visible to the user,
2303then the user will probably be happier if you do sort the names.
2304
2305@example
2306@group
2307(directory-files "~lewis")
2308 @result{} ("#foo#" "#foo.el#" "." ".."
177c0ea7 2309 "dired-mods.el" "files.texi"
3e01fd9d
RS
2310 "files.texi.~1~")
2311@end group
2312@end example
2313
2314An error is signaled if @var{directory} is not the name of a directory
2315that can be read.
2316@end defun
2317
19efcb46 2318@defun directory-files-and-attributes directory &optional full-name match-regexp nosort id-format
67203dbd
RS
2319This is similar to @code{directory-files} in deciding which files
2320to report on and how to report their names. However, instead
2321of returning a list of file names, it returns for each file a
2322list @code{(@var{filename} . @var{attributes})}, where @var{attributes}
2323is what @code{file-attributes} would return for that file.
19efcb46
LT
2324The optional argument @var{id-format} has the same meaning as the
2325corresponding argument to @code{file-attributes} (@pxref{Definition
2326of file-attributes}).
67203dbd
RS
2327@end defun
2328
3e01fd9d
RS
2329@defun file-name-all-versions file dirname
2330This function returns a list of all versions of the file named
19efcb46 2331@var{file} in directory @var{dirname}. It is only available on VMS.
3e01fd9d
RS
2332@end defun
2333
b6954afd
RS
2334@tindex file-expand-wildcards
2335@defun file-expand-wildcards pattern &optional full
2336This function expands the wildcard pattern @var{pattern}, returning
08f0f5e9 2337a list of file names that match it.
b6954afd 2338
08f0f5e9 2339If @var{pattern} is written as an absolute file name,
b6954afd
RS
2340the values are absolute also.
2341
2342If @var{pattern} is written as a relative file name, it is interpreted
2343relative to the current default directory. The file names returned are
2344normally also relative to the current default directory. However, if
2345@var{full} is non-@code{nil}, they are absolute.
2346@end defun
2347
3e01fd9d 2348@defun insert-directory file switches &optional wildcard full-directory-p
b22f3a19
RS
2349This function inserts (in the current buffer) a directory listing for
2350directory @var{file}, formatted with @code{ls} according to
2351@var{switches}. It leaves point after the inserted text.
19efcb46
LT
2352@var{switches} may be a string of options, or a list of strings
2353representing individual options.
3e01fd9d 2354
b22f3a19 2355The argument @var{file} may be either a directory name or a file
3e01fd9d
RS
2356specification including wildcard characters. If @var{wildcard} is
2357non-@code{nil}, that means treat @var{file} as a file specification with
2358wildcards.
2359
a9f0a989
RS
2360If @var{full-directory-p} is non-@code{nil}, that means the directory
2361listing is expected to show the full contents of a directory. You
2362should specify @code{t} when @var{file} is a directory and switches do
2363not contain @samp{-d}. (The @samp{-d} option to @code{ls} says to
2364describe a directory itself as a file, rather than showing its
2365contents.)
3e01fd9d 2366
8241495d
RS
2367On most systems, this function works by running a directory listing
2368program whose name is in the variable @code{insert-directory-program}.
2369If @var{wildcard} is non-@code{nil}, it also runs the shell specified by
3e01fd9d 2370@code{shell-file-name}, to expand the wildcards.
8241495d
RS
2371
2372MS-DOS and MS-Windows systems usually lack the standard Unix program
2373@code{ls}, so this function emulates the standard Unix program @code{ls}
2374with Lisp code.
19efcb46
LT
2375
2376As a technical detail, when @var{switches} contains the long
2377@samp{--dired} option, @code{insert-directory} treats it specially,
2378for the sake of dired. However, the normally equivalent short
2379@samp{-D} option is just passed on to @code{insert-directory-program},
2380as any other option.
3e01fd9d
RS
2381@end defun
2382
2383@defvar insert-directory-program
2384This variable's value is the program to run to generate a directory listing
8241495d
RS
2385for the function @code{insert-directory}. It is ignored on systems
2386which generate the listing with Lisp code.
3e01fd9d
RS
2387@end defvar
2388
2389@node Create/Delete Dirs
2390@section Creating and Deleting Directories
2391@c Emacs 19 features
2392
b22f3a19
RS
2393 Most Emacs Lisp file-manipulation functions get errors when used on
2394files that are directories. For example, you cannot delete a directory
2395with @code{delete-file}. These special functions exist to create and
2396delete directories.
2397
2468d0c0 2398@defun make-directory dirname &optional parents
3e01fd9d 2399This function creates a directory named @var{dirname}.
19efcb46
LT
2400If @var{parents} is non-@code{nil}, as is always the case in an
2401interactive call, that means to create the parent directories first,
2402if they don't already exist.
3e01fd9d
RS
2403@end defun
2404
2405@defun delete-directory dirname
2406This function deletes the directory named @var{dirname}. The function
2407@code{delete-file} does not work for files that are directories; you
bfe721d1
KH
2408must use @code{delete-directory} for them. If the directory contains
2409any files, @code{delete-directory} signals an error.
19efcb46
LT
2410
2411This function only follows symbolic links at the level of parent
2412directories.
3e01fd9d
RS
2413@end defun
2414
2415@node Magic File Names
2416@section Making Certain File Names ``Magic''
2417@cindex magic file names
2418
2419@c Emacs 19 feature
f9f59935
RS
2420 You can implement special handling for certain file names. This is
2421called making those names @dfn{magic}. The principal use for this
2422feature is in implementing remote file names (@pxref{Remote Files,,
2423Remote Files, emacs, The GNU Emacs Manual}).
2424
2425 To define a kind of magic file name, you must supply a regular
b22f3a19 2426expression to define the class of names (all those that match the
3e01fd9d
RS
2427regular expression), plus a handler that implements all the primitive
2428Emacs file operations for file names that do match.
2429
f9f59935 2430 The variable @code{file-name-handler-alist} holds a list of handlers,
3e01fd9d
RS
2431together with regular expressions that determine when to apply each
2432handler. Each element has this form:
2433
2434@example
2435(@var{regexp} . @var{handler})
2436@end example
2437
2438@noindent
2439All the Emacs primitives for file access and file name transformation
2440check the given file name against @code{file-name-handler-alist}. If
2441the file name matches @var{regexp}, the primitives handle that file by
2442calling @var{handler}.
2443
19efcb46
LT
2444The first argument given to @var{handler} is the name of the
2445primitive, as a symbol; the remaining arguments are the arguments that
2446were passed to that primitive. (The first of these arguments is most
2447often the file name itself.) For example, if you do this:
3e01fd9d
RS
2448
2449@example
2450(file-exists-p @var{filename})
2451@end example
2452
2453@noindent
2454and @var{filename} has handler @var{handler}, then @var{handler} is
2455called like this:
2456
2457@example
2458(funcall @var{handler} 'file-exists-p @var{filename})
2459@end example
2460
0fe6819f
RS
2461When a function takes two or more arguments that must be file names,
2462it checks each of those names for a handler. For example, if you do
2463this:
2464
2465@example
2466(expand-file-name @var{filename} @var{dirname})
2467@end example
2468
2469@noindent
2470then it checks for a handler for @var{filename} and then for a handler
2471for @var{dirname}. In either case, the @var{handler} is called like
2472this:
2473
2474@example
2475(funcall @var{handler} 'expand-file-name @var{filename} @var{dirname})
2476@end example
2477
2478@noindent
2479The @var{handler} then needs to figure out whether to handle
2480@var{filename} or @var{dirname}.
2481
e598a60d
RS
2482If the specified file name matches more than one handler, the one
2483whose match starts last in the file name gets precedence. This rule
2484is chosen so that handlers for jobs such as uncompression are handled
2485first, before handlers for jobs such as remote file access.
2486
b22f3a19 2487Here are the operations that a magic file name handler gets to handle:
3e01fd9d 2488
37680279 2489@ifnottex
3e01fd9d 2490@noindent
df140a68
KG
2491@code{access-file}, @code{add-name-to-file},
2492@code{byte-compiler-base-file-name},@*
2493@code{copy-file}, @code{delete-directory},
969fe9b5 2494@code{delete-file},
63ff95ee 2495@code{diff-latest-backup-file},
3e01fd9d 2496@code{directory-file-name},
969fe9b5 2497@code{directory-files},
df140a68 2498@code{directory-files-and-attributes},
9e2b495b 2499@code{dired-call-process},
df140a68 2500@code{dired-compress-file}, @code{dired-uncache},@*
969fe9b5 2501@code{expand-file-name},
df140a68 2502@code{file-accessible-directory-p},
969fe9b5
RS
2503@code{file-attributes},
2504@code{file-directory-p},
df140a68 2505@code{file-executable-p}, @code{file-exists-p},
5b676886 2506@code{file-local-copy}, @code{file-remote-p},
df140a68 2507@code{file-modes}, @code{file-name-all-completions},
969fe9b5
RS
2508@code{file-name-as-directory},
2509@code{file-name-completion},
9e2b495b
RS
2510@code{file-name-directory},
2511@code{file-name-nondirectory},
3e01fd9d 2512@code{file-name-sans-versions}, @code{file-newer-than-file-p},
fbc1b72c 2513@code{file-ownership-preserved-p},
5949c48a 2514@code{file-readable-p}, @code{file-regular-p}, @code{file-symlink-p},
63ff95ee 2515@code{file-truename}, @code{file-writable-p},
fbc1b72c 2516@code{find-backup-file-name},
df140a68
KG
2517@code{find-file-noselect},@*
2518@code{get-file-buffer},
969fe9b5 2519@code{insert-directory},
df140a68 2520@code{insert-file-contents},@*
fbc1b72c 2521@code{load}, @code{make-directory},
df140a68
KG
2522@code{make-directory-internal},
2523@code{make-symbolic-link},@*
37c0b8fd 2524@code{rename-file}, @code{set-file-modes}, @code{set-file-times},
df140a68
KG
2525@code{set-visited-file-modtime}, @code{shell-command},
2526@code{substitute-in-file-name},@*
969fe9b5 2527@code{unhandled-file-name-directory},
9e2b495b 2528@code{vc-registered},
969fe9b5
RS
2529@code{verify-visited-file-modtime},@*
2530@code{write-region}.
37680279 2531@end ifnottex
f1e2c45e
RS
2532@iftex
2533@noindent
8241495d 2534@flushleft
df140a68
KG
2535@code{access-file}, @code{add-name-to-file},
2536@code{byte-com@discretionary{}{}{}piler-base-file-name},
2537@code{copy-file}, @code{delete-directory},
f1e2c45e
RS
2538@code{delete-file},
2539@code{diff-latest-backup-file},
2540@code{directory-file-name},
2541@code{directory-files},
df140a68 2542@code{directory-files-and-at@discretionary{}{}{}tributes},
f1e2c45e
RS
2543@code{dired-call-process},
2544@code{dired-compress-file}, @code{dired-uncache},
2545@code{expand-file-name},
2546@code{file-accessible-direc@discretionary{}{}{}tory-p},
2547@code{file-attributes},
2548@code{file-direct@discretionary{}{}{}ory-p},
2549@code{file-executable-p}, @code{file-exists-p},
5b676886 2550@code{file-local-copy}, @code{file-remote-p},
f1e2c45e
RS
2551@code{file-modes}, @code{file-name-all-completions},
2552@code{file-name-as-directory},
2553@code{file-name-completion},
2554@code{file-name-directory},
2555@code{file-name-nondirec@discretionary{}{}{}tory},
2556@code{file-name-sans-versions}, @code{file-newer-than-file-p},
2557@code{file-ownership-pre@discretionary{}{}{}served-p},
2558@code{file-readable-p}, @code{file-regular-p}, @code{file-symlink-p},
2559@code{file-truename}, @code{file-writable-p},
2560@code{find-backup-file-name},
df140a68 2561@code{find-file-noselect},
f1e2c45e
RS
2562@code{get-file-buffer},
2563@code{insert-directory},
2564@code{insert-file-contents},
2565@code{load}, @code{make-direc@discretionary{}{}{}tory},
df140a68
KG
2566@code{make-direc@discretionary{}{}{}tory-internal},
2567@code{make-symbolic-link},
2568@code{rename-file}, @code{set-file-modes},
f1e2c45e 2569@code{set-visited-file-modtime}, @code{shell-command},
df140a68 2570@code{substitute-in-file-name},
f1e2c45e
RS
2571@code{unhandled-file-name-directory},
2572@code{vc-regis@discretionary{}{}{}tered},
2573@code{verify-visited-file-modtime},
2574@code{write-region}.
8241495d 2575@end flushleft
f1e2c45e 2576@end iftex
3e01fd9d 2577
6ca88231
RS
2578Handlers for @code{insert-file-contents} typically need to clear the
2579buffer's modified flag, with @code{(set-buffer-modified-p nil)}, if the
2580@var{visit} argument is non-@code{nil}. This also has the effect of
2581unlocking the buffer if it is locked.
2582
3e01fd9d 2583The handler function must handle all of the above operations, and
b22f3a19
RS
2584possibly others to be added in the future. It need not implement all
2585these operations itself---when it has nothing special to do for a
2586certain operation, it can reinvoke the primitive, to handle the
2587operation ``in the usual way''. It should always reinvoke the primitive
2588for an operation it does not recognize. Here's one way to do this:
3e01fd9d 2589
841e483d 2590@smallexample
3e01fd9d
RS
2591(defun my-file-handler (operation &rest args)
2592 ;; @r{First check for the specific operations}
2593 ;; @r{that we have special handling for.}
2594 (cond ((eq operation 'insert-file-contents) @dots{})
2595 ((eq operation 'write-region) @dots{})
2596 @dots{}
2597 ;; @r{Handle any operation we don't know about.}
841e483d 2598 (t (let ((inhibit-file-name-handlers
177c0ea7 2599 (cons 'my-file-handler
f9f59935
RS
2600 (and (eq inhibit-file-name-operation operation)
2601 inhibit-file-name-handlers)))
2602 (inhibit-file-name-operation operation))
3e01fd9d 2603 (apply operation args)))))
841e483d
RS
2604@end smallexample
2605
2606When a handler function decides to call the ordinary Emacs primitive for
2607the operation at hand, it needs to prevent the primitive from calling
2608the same handler once again, thus leading to an infinite recursion. The
2609example above shows how to do this, with the variables
2610@code{inhibit-file-name-handlers} and
2611@code{inhibit-file-name-operation}. Be careful to use them exactly as
2612shown above; the details are crucial for proper behavior in the case of
2613multiple handlers, and for operations that have two file names that may
2614each have handlers.
2615
4f683b1b 2616@kindex safe-magic (@r{property})
1d7b9cc0 2617Handlers that don't really do anything special for actual access to the
4f683b1b
RS
2618file---such as the ones that implement completion of host names for
2619remote file names---should have a non-@code{nil} @code{safe-magic}
2620property. For instance, Emacs normally ``protects'' directory names
2621it finds in @code{PATH} from becoming magic, if they look like magic
2622file names, by prefixing them with @samp{/:}. But if the handler that
2623would be used for them has a non-@code{nil} @code{safe-magic}
2624property, the @samp{/:} is not added.
2625
841e483d
RS
2626@defvar inhibit-file-name-handlers
2627This variable holds a list of handlers whose use is presently inhibited
2628for a certain operation.
2629@end defvar
3e01fd9d 2630
841e483d
RS
2631@defvar inhibit-file-name-operation
2632The operation for which certain handlers are presently inhibited.
2633@end defvar
2634
2635@defun find-file-name-handler file operation
3e01fd9d 2636This function returns the handler function for file name @var{file}, or
841e483d
RS
2637@code{nil} if there is none. The argument @var{operation} should be the
2638operation to be performed on the file---the value you will pass to the
2639handler as its first argument when you call it. The operation is needed
2640for comparison with @code{inhibit-file-name-operation}.
3e01fd9d
RS
2641@end defun
2642
2643@defun file-local-copy filename
104ad648
RS
2644This function copies file @var{filename} to an ordinary non-magic file
2645on the local machine, if it isn't on the local machine already. Magic
2646file names should handle the @code{file-local-copy} operation if they
2647refer to files on other machines. A magic file name that is used for
2648other purposes than remote file access should not handle
2649@code{file-local-copy}; then this function will treat the file as
2650local.
2651
2652If @var{filename} is local, whether magic or not, this function does
2653nothing and returns @code{nil}. Otherwise it returns the file name
2654of the local copy file.
2655@end defun
3e01fd9d 2656
104ad648 2657@defun file-remote-p filename
83f411a2
RS
2658This function tests whether @var{filename} is a remote file. If
2659@var{filename} is local (not remote), the return value is @code{nil}.
2660If @var{filename} is indeed remote, the return value is a string that
2661identifies the remote system.
8addb6eb 2662
83f411a2
RS
2663This identifier string may include a host name, a user name, and
2664characters designating the method used to access the remote system.
2665For example, the remote identifier string for the filename
2666@code{/ssh:user@@host:/some/file} is @code{/ssh:user@@host:}.
8addb6eb
KG
2667
2668If @code{file-remote-p} returns the same identifier for two different
83f411a2 2669filenames, that means they are stored on the same file system and can
8addb6eb 2670be accessed locally with respect to each other. This means, for
83f411a2
RS
2671example, that it is possible to start a remote process accessing both
2672files at the same time. Implementors of file handlers need to ensure
2673this principle is valid.
3e01fd9d
RS
2674@end defun
2675
2676@defun unhandled-file-name-directory filename
f9f59935
RS
2677This function returns the name of a directory that is not magic. It
2678uses the directory part of @var{filename} if that is not magic. For a
2679magic file name, it invokes the file name handler, which therefore
2680decides what value to return.
3e01fd9d
RS
2681
2682This is useful for running a subprocess; every subprocess must have a
2683non-magic directory to serve as its current directory, and this function
2684is a good way to come up with one.
2685@end defun
841e483d 2686
22697dac
KH
2687@node Format Conversion
2688@section File Format Conversion
2689
2690@cindex file format conversion
2691@cindex encoding file formats
2692@cindex decoding file formats
2693 The variable @code{format-alist} defines a list of @dfn{file formats},
bfe721d1 2694which describe textual representations used in files for the data (text,
22697dac 2695text-properties, and possibly other information) in an Emacs buffer.
bfe721d1
KH
2696Emacs performs format conversion if appropriate when reading and writing
2697files.
22697dac
KH
2698
2699@defvar format-alist
2700This list contains one format definition for each defined file format.
2701@end defvar
2702
2703@cindex format definition
2704Each format definition is a list of this form:
2705
2706@example
2707(@var{name} @var{doc-string} @var{regexp} @var{from-fn} @var{to-fn} @var{modify} @var{mode-fn})
2708@end example
2709
2710Here is what the elements in a format definition mean:
2711
2712@table @var
2713@item name
2714The name of this format.
2715
2716@item doc-string
2717A documentation string for the format.
2718
2719@item regexp
2720A regular expression which is used to recognize files represented in
2721this format.
2722
2723@item from-fn
969fe9b5 2724A shell command or function to decode data in this format (to convert
f9f59935 2725file data into the usual Emacs data representation).
22697dac 2726
969fe9b5
RS
2727A shell command is represented as a string; Emacs runs the command as a
2728filter to perform the conversion.
2729
2730If @var{from-fn} is a function, it is called with two arguments, @var{begin}
f9f59935
RS
2731and @var{end}, which specify the part of the buffer it should convert.
2732It should convert the text by editing it in place. Since this can
2733change the length of the text, @var{from-fn} should return the modified
2734end position.
22697dac 2735
bfe721d1 2736One responsibility of @var{from-fn} is to make sure that the beginning
22697dac
KH
2737of the file no longer matches @var{regexp}. Otherwise it is likely to
2738get called again.
2739
2740@item to-fn
969fe9b5
RS
2741A shell command or function to encode data in this format---that is, to
2742convert the usual Emacs data representation into this format.
22697dac 2743
f9f59935
RS
2744If @var{to-fn} is a string, it is a shell command; Emacs runs the
2745command as a filter to perform the conversion.
2746
969fe9b5 2747If @var{to-fn} is a function, it is called with two arguments, @var{begin}
f9f59935
RS
2748and @var{end}, which specify the part of the buffer it should convert.
2749There are two ways it can do the conversion:
22697dac
KH
2750
2751@itemize @bullet
2752@item
2753By editing the buffer in place. In this case, @var{to-fn} should
2754return the end-position of the range of text, as modified.
2755
2756@item
2757By returning a list of annotations. This is a list of elements of the
2758form @code{(@var{position} . @var{string})}, where @var{position} is an
2759integer specifying the relative position in the text to be written, and
2760@var{string} is the annotation to add there. The list must be sorted in
2761order of position when @var{to-fn} returns it.
2762
2763When @code{write-region} actually writes the text from the buffer to the
2764file, it intermixes the specified annotations at the corresponding
2765positions. All this takes place without modifying the buffer.
2766@end itemize
2767
2768@item modify
2769A flag, @code{t} if the encoding function modifies the buffer, and
2770@code{nil} if it works by returning a list of annotations.
2771
8f3efb4e
RS
2772@item mode-fn
2773A minor-mode function to call after visiting a file converted from this
2774format. The function is called with one argument, the integer 1;
2775that tells a minor-mode function to enable the mode.
22697dac
KH
2776@end table
2777
2778The function @code{insert-file-contents} automatically recognizes file
2779formats when it reads the specified file. It checks the text of the
2780beginning of the file against the regular expressions of the format
2781definitions, and if it finds a match, it calls the decoding function for
2782that format. Then it checks all the known formats over again.
2783It keeps checking them until none of them is applicable.
2784
2785Visiting a file, with @code{find-file-noselect} or the commands that use
2786it, performs conversion likewise (because it calls
bfe721d1
KH
2787@code{insert-file-contents}); it also calls the mode function for each
2788format that it decodes. It stores a list of the format names in the
2789buffer-local variable @code{buffer-file-format}.
22697dac
KH
2790
2791@defvar buffer-file-format
bfe721d1
KH
2792This variable states the format of the visited file. More precisely,
2793this is a list of the file format names that were decoded in the course
969fe9b5 2794of visiting the current buffer's file. It is always buffer-local in all
22697dac
KH
2795buffers.
2796@end defvar
2797
2798When @code{write-region} writes data into a file, it first calls the
bfe721d1
KH
2799encoding functions for the formats listed in @code{buffer-file-format},
2800in the order of appearance in the list.
22697dac 2801
19efcb46
LT
2802@deffn Command format-write-file file format &optional confirm
2803This command writes the current buffer contents into the file
2804@var{file} in format @var{format}, and makes that format the default
2805for future saves of the buffer. The argument @var{format} is a list
2806of format names. Except for the @var{format} argument, this command
2807is similar to @code{write-file}. In particular, @var{confirm} has the
2808same meaning and interactive treatment as the corresponding argument
2809to @code{write-file}. @xref{Definition of write-file}.
f9f59935 2810@end deffn
22697dac 2811
f9f59935 2812@deffn Command format-find-file file format
63ff95ee
MW
2813This command finds the file @var{file}, converting it according to
2814format @var{format}. It also makes @var{format} the default if the
2815buffer is saved later.
2816
2817The argument @var{format} is a list of format names. If @var{format} is
2818@code{nil}, no conversion takes place. Interactively, typing just
2819@key{RET} for @var{format} specifies @code{nil}.
f9f59935 2820@end deffn
63ff95ee 2821
969fe9b5 2822@deffn Command format-insert-file file format &optional beg end
63ff95ee
MW
2823This command inserts the contents of file @var{file}, converting it
2824according to format @var{format}. If @var{beg} and @var{end} are
2825non-@code{nil}, they specify which part of the file to read, as in
2826@code{insert-file-contents} (@pxref{Reading from Files}).
2827
2828The return value is like what @code{insert-file-contents} returns: a
2829list of the absolute file name and the length of the data inserted
2830(after conversion).
2831
2832The argument @var{format} is a list of format names. If @var{format} is
2833@code{nil}, no conversion takes place. Interactively, typing just
2834@key{RET} for @var{format} specifies @code{nil}.
f9f59935 2835@end deffn
63ff95ee 2836
689ffd70 2837@defvar buffer-auto-save-file-format
22697dac
KH
2838This variable specifies the format to use for auto-saving. Its value is
2839a list of format names, just like the value of
a9f0a989 2840@code{buffer-file-format}; however, it is used instead of
19efcb46
LT
2841@code{buffer-file-format} for writing auto-save files. If the value
2842is @code{t}, the default, auto-saving uses the same format as a
2843regular save in the same buffer. This variable is always buffer-local
2844in all buffers.
841e483d 2845@end defvar
ab5796a9
MB
2846
2847@ignore
2848 arch-tag: 141f74ce-6ae3-40dc-a6c4-ef83fc4ec35c
2849@end ignore