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