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