]> code.delx.au - gnu-emacs/blob - doc/lispref/files.texi
Merge from origin/emacs-25
[gnu-emacs] / doc / lispref / files.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990-1995, 1998-1999, 2001-2016 Free Software
4 @c Foundation, Inc.
5 @c See the file elisp.texi for copying conditions.
6 @node Files
7 @chapter Files
8
9 This chapter describes the Emacs Lisp functions and variables to
10 find, create, view, save, and otherwise work with files and
11 directories. A few other file-related functions are described in
12 @ref{Buffers}, and those related to backups and auto-saving are
13 described in @ref{Backups and Auto-Saving}.
14
15 Many of the file functions take one or more arguments that are file
16 names. A file name is a string. Most of these functions expand file
17 name arguments using the function @code{expand-file-name}, so that
18 @file{~} is handled correctly, as are relative file names (including
19 @file{../}). @xref{File Name Expansion}.
20
21 In addition, certain @dfn{magic} file names are handled specially.
22 For example, when a remote file name is specified, Emacs accesses the
23 file over the network via an appropriate protocol. @xref{Remote
24 Files,, Remote Files, emacs, The GNU Emacs Manual}. This handling is
25 done at a very low level, so you may assume that all the functions
26 described in this chapter accept magic file names as file name
27 arguments, except where noted. @xref{Magic File Names}, for details.
28
29 When file I/O functions signal Lisp errors, they usually use the
30 condition @code{file-error} (@pxref{Handling Errors}). The error
31 message is in most cases obtained from the operating system, according
32 to locale @code{system-messages-locale}, and decoded using coding system
33 @code{locale-coding-system} (@pxref{Locales}).
34
35 @menu
36 * Visiting Files:: Reading files into Emacs buffers for editing.
37 * Saving Buffers:: Writing changed buffers back into files.
38 * Reading from Files:: Reading files into buffers without visiting.
39 * Writing to Files:: Writing new files from parts of buffers.
40 * File Locks:: Locking and unlocking files, to prevent
41 simultaneous editing by two people.
42 * Information about Files:: Testing existence, accessibility, size of files.
43 * Changing Files:: Renaming files, changing permissions, etc.
44 * File Names:: Decomposing and expanding file names.
45 * Contents of Directories:: Getting a list of the files in a directory.
46 * Create/Delete Dirs:: Creating and Deleting Directories.
47 * Magic File Names:: Special handling for certain file names.
48 * Format Conversion:: Conversion to and from various file formats.
49 @end menu
50
51 @node Visiting Files
52 @section Visiting Files
53 @cindex finding files
54 @cindex visiting files
55
56 Visiting a file means reading a file into a buffer. Once this is
57 done, we say that the buffer is @dfn{visiting} that file, and call the
58 file @dfn{the visited file} of the buffer.
59
60 A file and a buffer are two different things. A file is information
61 recorded permanently in the computer (unless you delete it). A
62 buffer, on the other hand, is information inside of Emacs that will
63 vanish at the end of the editing session (or when you kill the
64 buffer). When a buffer is visiting a file, it contains information
65 copied from the file. The copy in the buffer is what you modify with
66 editing commands. Changes to the buffer do not change the file; to
67 make the changes permanent, you must @dfn{save} the buffer, which
68 means copying the altered buffer contents back into the file.
69
70 Despite the distinction between files and buffers, people often
71 refer to a file when they mean a buffer and vice-versa. Indeed, we
72 say, ``I am editing a file'', rather than, ``I am editing a buffer
73 that I will soon save as a file of the same name''. Humans do not
74 usually need to make the distinction explicit. When dealing with a
75 computer program, however, it is good to keep the distinction in mind.
76
77 @menu
78 * Visiting Functions:: The usual interface functions for visiting.
79 * Subroutines of Visiting:: Lower-level subroutines that they use.
80 @end menu
81
82 @node Visiting Functions
83 @subsection Functions for Visiting Files
84 @cindex visiting files, functions for
85 @cindex how to visit files
86
87 This section describes the functions normally used to visit files.
88 For historical reasons, these functions have names starting with
89 @samp{find-} rather than @samp{visit-}. @xref{Buffer File Name}, for
90 functions and variables that access the visited file name of a buffer or
91 that find an existing buffer by its visited file name.
92
93 In a Lisp program, if you want to look at the contents of a file but
94 not alter it, the fastest way is to use @code{insert-file-contents} in a
95 temporary buffer. Visiting the file is not necessary and takes longer.
96 @xref{Reading from Files}.
97
98 @deffn Command find-file filename &optional wildcards
99 This command selects a buffer visiting the file @var{filename},
100 using an existing buffer if there is one, and otherwise creating a
101 new buffer and reading the file into it. It also returns that buffer.
102
103 Aside from some technical details, the body of the @code{find-file}
104 function is basically equivalent to:
105
106 @smallexample
107 (switch-to-buffer (find-file-noselect filename nil nil wildcards))
108 @end smallexample
109
110 @noindent
111 (See @code{switch-to-buffer} in @ref{Switching Buffers}.)
112
113 If @var{wildcards} is non-@code{nil}, which is always true in an
114 interactive call, then @code{find-file} expands wildcard characters in
115 @var{filename} and visits all the matching files.
116
117 When @code{find-file} is called interactively, it prompts for
118 @var{filename} in the minibuffer.
119 @end deffn
120
121 @deffn Command find-file-literally filename
122 This command visits @var{filename}, like @code{find-file} does, but it
123 does not perform any format conversions (@pxref{Format Conversion}),
124 character code conversions (@pxref{Coding Systems}), or end-of-line
125 conversions (@pxref{Coding System Basics, End of line conversion}).
126 The buffer visiting the file is made unibyte, and its major mode is
127 Fundamental mode, regardless of the file name. File local variable
128 specifications in the file (@pxref{File Local Variables}) are
129 ignored, and automatic decompression and adding a newline at the end
130 of the file due to @code{require-final-newline} (@pxref{Saving
131 Buffers, require-final-newline}) are also disabled.
132
133 Note that if Emacs already has a buffer visiting the same file
134 non-literally, it will not visit the same file literally, but instead
135 just switch to the existing buffer. If you want to be sure of
136 accessing a file's contents literally, you should create a temporary
137 buffer and then read the file contents into it using
138 @code{insert-file-contents-literally} (@pxref{Reading from Files}).
139 @end deffn
140
141 @defun find-file-noselect filename &optional nowarn rawfile wildcards
142 This function is the guts of all the file-visiting functions. It
143 returns a buffer visiting the file @var{filename}. You may make the
144 buffer current or display it in a window if you wish, but this
145 function does not do so.
146
147 The function returns an existing buffer if there is one; otherwise it
148 creates a new buffer and reads the file into it. When
149 @code{find-file-noselect} uses an existing buffer, it first verifies
150 that the file has not changed since it was last visited or saved in
151 that buffer. If the file has changed, this function asks the user
152 whether to reread the changed file. If the user says @samp{yes}, any
153 edits previously made in the buffer are lost.
154
155 Reading the file involves decoding the file's contents (@pxref{Coding
156 Systems}), including end-of-line conversion, and format conversion
157 (@pxref{Format Conversion}). If @var{wildcards} is non-@code{nil},
158 then @code{find-file-noselect} expands wildcard characters in
159 @var{filename} and visits all the matching files.
160
161 This function displays warning or advisory messages in various peculiar
162 cases, unless the optional argument @var{nowarn} is non-@code{nil}. For
163 example, if it needs to create a buffer, and there is no file named
164 @var{filename}, it displays the message @samp{(New file)} in the echo
165 area, and leaves the buffer empty.
166
167 The @code{find-file-noselect} function normally calls
168 @code{after-find-file} after reading the file (@pxref{Subroutines of
169 Visiting}). That function sets the buffer major mode, parses local
170 variables, warns the user if there exists an auto-save file more recent
171 than the file just visited, and finishes by running the functions in
172 @code{find-file-hook}.
173
174 If the optional argument @var{rawfile} is non-@code{nil}, then
175 @code{after-find-file} is not called, and the
176 @code{find-file-not-found-functions} are not run in case of failure.
177 What's more, a non-@code{nil} @var{rawfile} value suppresses coding
178 system conversion and format conversion.
179
180 The @code{find-file-noselect} function usually returns the buffer that
181 is visiting the file @var{filename}. But, if wildcards are actually
182 used and expanded, it returns a list of buffers that are visiting the
183 various files.
184
185 @example
186 @group
187 (find-file-noselect "/etc/fstab")
188 @result{} #<buffer fstab>
189 @end group
190 @end example
191 @end defun
192
193 @deffn Command find-file-other-window filename &optional wildcards
194 This command selects a buffer visiting the file @var{filename}, but
195 does so in a window other than the selected window. It may use
196 another existing window or split a window; see @ref{Switching
197 Buffers}.
198
199 When this command is called interactively, it prompts for
200 @var{filename}.
201 @end deffn
202
203 @deffn Command find-file-read-only filename &optional wildcards
204 This command selects a buffer visiting the file @var{filename}, like
205 @code{find-file}, but it marks the buffer as read-only. @xref{Read Only
206 Buffers}, for related functions and variables.
207
208 When this command is called interactively, it prompts for
209 @var{filename}.
210 @end deffn
211
212 @defopt find-file-wildcards
213 If this variable is non-@code{nil}, then the various @code{find-file}
214 commands check for wildcard characters and visit all the files that
215 match them (when invoked interactively or when their @var{wildcards}
216 argument is non-@code{nil}). If this option is @code{nil}, then
217 the @code{find-file} commands ignore their @var{wildcards} argument
218 and never treat wildcard characters specially.
219 @end defopt
220
221 @defopt find-file-hook
222 The value of this variable is a list of functions to be called after a
223 file is visited. The file's local-variables specification (if any) will
224 have been processed before the hooks are run. The buffer visiting the
225 file is current when the hook functions are run.
226
227 This variable is a normal hook. @xref{Hooks}.
228 @end defopt
229
230 @defvar find-file-not-found-functions
231 The value of this variable is a list of functions to be called when
232 @code{find-file} or @code{find-file-noselect} is passed a nonexistent
233 file name. @code{find-file-noselect} calls these functions as soon as
234 it detects a nonexistent file. It calls them in the order of the list,
235 until one of them returns non-@code{nil}. @code{buffer-file-name} is
236 already set up.
237
238 This is not a normal hook because the values of the functions are
239 used, and in many cases only some of the functions are called.
240 @end defvar
241
242 @defvar find-file-literally
243 This buffer-local variable, if set to a non-@code{nil} value, makes
244 @code{save-buffer} behave as if the buffer were visiting its file
245 literally, i.e., without conversions of any kind. The command
246 @code{find-file-literally} sets this variable's local value, but other
247 equivalent functions and commands can do that as well, e.g., to avoid
248 automatic addition of a newline at the end of the file. This variable
249 is permanent local, so it is unaffected by changes of major modes.
250 @end defvar
251
252 @node Subroutines of Visiting
253 @subsection Subroutines of Visiting
254
255 The @code{find-file-noselect} function uses two important subroutines
256 which are sometimes useful in user Lisp code: @code{create-file-buffer}
257 and @code{after-find-file}. This section explains how to use them.
258
259 @c FIXME This does not describe the default behavior, because
260 @c uniquify is enabled by default and advises this function.
261 @c This is confusing. uniquify should be folded into the function proper.
262 @defun create-file-buffer filename
263 This function creates a suitably named buffer for visiting
264 @var{filename}, and returns it. It uses @var{filename} (sans directory)
265 as the name if that name is free; otherwise, it appends a string such as
266 @samp{<2>} to get an unused name. See also @ref{Creating Buffers}.
267 Note that the @file{uniquify} library affects the result of this
268 function. @xref{Uniquify,,, emacs, The GNU Emacs Manual}.
269
270 @strong{Please note:} @code{create-file-buffer} does @emph{not}
271 associate the new buffer with a file and does not select the buffer.
272 It also does not use the default major mode.
273
274 @example
275 @group
276 (create-file-buffer "foo")
277 @result{} #<buffer foo>
278 @end group
279 @group
280 (create-file-buffer "foo")
281 @result{} #<buffer foo<2>>
282 @end group
283 @group
284 (create-file-buffer "foo")
285 @result{} #<buffer foo<3>>
286 @end group
287 @end example
288
289 This function is used by @code{find-file-noselect}.
290 It uses @code{generate-new-buffer} (@pxref{Creating Buffers}).
291 @end defun
292
293 @defun after-find-file &optional error warn noauto after-find-file-from-revert-buffer nomodes
294 This function sets the buffer major mode, and parses local variables
295 (@pxref{Auto Major Mode}). It is called by @code{find-file-noselect}
296 and by the default revert function (@pxref{Reverting}).
297
298 @cindex new file message
299 @cindex file open error
300 If reading the file got an error because the file does not exist, but
301 its directory does exist, the caller should pass a non-@code{nil} value
302 for @var{error}. In that case, @code{after-find-file} issues a warning:
303 @samp{(New file)}. For more serious errors, the caller should usually not
304 call @code{after-find-file}.
305
306 If @var{warn} is non-@code{nil}, then this function issues a warning
307 if an auto-save file exists and is more recent than the visited file.
308
309 If @var{noauto} is non-@code{nil}, that says not to enable or disable
310 Auto-Save mode. The mode remains enabled if it was enabled before.
311
312 If @var{after-find-file-from-revert-buffer} is non-@code{nil}, that
313 means this call was from @code{revert-buffer}. This has no direct
314 effect, but some mode functions and hook functions check the value
315 of this variable.
316
317 If @var{nomodes} is non-@code{nil}, that means don't alter the buffer's
318 major mode, don't process local variables specifications in the file,
319 and don't run @code{find-file-hook}. This feature is used by
320 @code{revert-buffer} in some cases.
321
322 The last thing @code{after-find-file} does is call all the functions
323 in the list @code{find-file-hook}.
324 @end defun
325
326 @node Saving Buffers
327 @section Saving Buffers
328 @cindex saving buffers
329
330 When you edit a file in Emacs, you are actually working on a buffer
331 that is visiting that file---that is, the contents of the file are
332 copied into the buffer and the copy is what you edit. Changes to the
333 buffer do not change the file until you @dfn{save} the buffer, which
334 means copying the contents of the buffer into the file.
335
336 @deffn Command save-buffer &optional backup-option
337 This function saves the contents of the current buffer in its visited
338 file if the buffer has been modified since it was last visited or saved.
339 Otherwise it does nothing.
340
341 @code{save-buffer} is responsible for making backup files. Normally,
342 @var{backup-option} is @code{nil}, and @code{save-buffer} makes a backup
343 file only if this is the first save since visiting the file. Other
344 values for @var{backup-option} request the making of backup files in
345 other circumstances:
346
347 @itemize @bullet
348 @item
349 With an argument of 4 or 64, reflecting 1 or 3 @kbd{C-u}'s, the
350 @code{save-buffer} function marks this version of the file to be
351 backed up when the buffer is next saved.
352
353 @item
354 With an argument of 16 or 64, reflecting 2 or 3 @kbd{C-u}'s, the
355 @code{save-buffer} function unconditionally backs up the previous
356 version of the file before saving it.
357
358 @item
359 With an argument of 0, unconditionally do @emph{not} make any backup file.
360 @end itemize
361 @end deffn
362
363 @deffn Command save-some-buffers &optional save-silently-p pred
364 @anchor{Definition of save-some-buffers}
365 This command saves some modified file-visiting buffers. Normally it
366 asks the user about each buffer. But if @var{save-silently-p} is
367 non-@code{nil}, it saves all the file-visiting buffers without querying
368 the user.
369
370 The optional @var{pred} argument controls which buffers to ask about
371 (or to save silently if @var{save-silently-p} is non-@code{nil}).
372 If it is @code{nil}, that means to ask only about file-visiting buffers.
373 If it is @code{t}, that means also offer to save certain other non-file
374 buffers---those that have a non-@code{nil} buffer-local value of
375 @code{buffer-offer-save} (@pxref{Killing Buffers}). A user who says
376 @samp{yes} to saving a non-file buffer is asked to specify the file
377 name to use. The @code{save-buffers-kill-emacs} function passes the
378 value @code{t} for @var{pred}.
379
380 If @var{pred} is neither @code{t} nor @code{nil}, then it should be
381 a function of no arguments. It will be called in each buffer to decide
382 whether to offer to save that buffer. If it returns a non-@code{nil}
383 value in a certain buffer, that means do offer to save that buffer.
384 @end deffn
385
386 @deffn Command write-file filename &optional confirm
387 @anchor{Definition of write-file}
388 This function writes the current buffer into file @var{filename}, makes
389 the buffer visit that file, and marks it not modified. Then it renames
390 the buffer based on @var{filename}, appending a string like @samp{<2>}
391 if necessary to make a unique buffer name. It does most of this work by
392 calling @code{set-visited-file-name} (@pxref{Buffer File Name}) and
393 @code{save-buffer}.
394
395 If @var{confirm} is non-@code{nil}, that means to ask for confirmation
396 before overwriting an existing file. Interactively, confirmation is
397 required, unless the user supplies a prefix argument.
398
399 If @var{filename} is an existing directory, or a symbolic link to one,
400 @code{write-file} uses the name of the visited file, in directory
401 @var{filename}. If the buffer is not visiting a file, it uses the
402 buffer name instead.
403 @end deffn
404
405 Saving a buffer runs several hooks. It also performs format
406 conversion (@pxref{Format Conversion}).
407
408 @defvar write-file-functions
409 The value of this variable is a list of functions to be called before
410 writing out a buffer to its visited file. If one of them returns
411 non-@code{nil}, the file is considered already written and the rest of
412 the functions are not called, nor is the usual code for writing the file
413 executed.
414
415 If a function in @code{write-file-functions} returns non-@code{nil}, it
416 is responsible for making a backup file (if that is appropriate).
417 To do so, execute the following code:
418
419 @example
420 (or buffer-backed-up (backup-buffer))
421 @end example
422
423 You might wish to save the file modes value returned by
424 @code{backup-buffer} and use that (if non-@code{nil}) to set the mode
425 bits of the file that you write. This is what @code{save-buffer}
426 normally does. @xref{Making Backups,, Making Backup Files}.
427
428 The hook functions in @code{write-file-functions} are also responsible
429 for encoding the data (if desired): they must choose a suitable coding
430 system and end-of-line conversion (@pxref{Lisp and Coding Systems}),
431 perform the encoding (@pxref{Explicit Encoding}), and set
432 @code{last-coding-system-used} to the coding system that was used
433 (@pxref{Encoding and I/O}).
434
435 If you set this hook locally in a buffer, it is assumed to be
436 associated with the file or the way the contents of the buffer were
437 obtained. Thus the variable is marked as a permanent local, so that
438 changing the major mode does not alter a buffer-local value. On the
439 other hand, calling @code{set-visited-file-name} will reset it.
440 If this is not what you want, you might like to use
441 @code{write-contents-functions} instead.
442
443 Even though this is not a normal hook, you can use @code{add-hook} and
444 @code{remove-hook} to manipulate the list. @xref{Hooks}.
445 @end defvar
446
447 @c Emacs 19 feature
448 @defvar write-contents-functions
449 This works just like @code{write-file-functions}, but it is intended
450 for hooks that pertain to the buffer's contents, not to the particular
451 visited file or its location. Such hooks are usually set up by major
452 modes, as buffer-local bindings for this variable. This variable
453 automatically becomes buffer-local whenever it is set; switching to a
454 new major mode always resets this variable, but calling
455 @code{set-visited-file-name} does not.
456
457 If any of the functions in this hook returns non-@code{nil}, the file
458 is considered already written and the rest are not called and neither
459 are the functions in @code{write-file-functions}.
460 @end defvar
461
462 @defopt before-save-hook
463 This normal hook runs before a buffer is saved in its visited file,
464 regardless of whether that is done normally or by one of the hooks
465 described above. For instance, the @file{copyright.el} program uses
466 this hook to make sure the file you are saving has the current year in
467 its copyright notice.
468 @end defopt
469
470 @c Emacs 19 feature
471 @defopt after-save-hook
472 This normal hook runs after a buffer has been saved in its visited file.
473 One use of this hook is in Fast Lock mode; it uses this hook to save the
474 highlighting information in a cache file.
475 @end defopt
476
477 @defopt file-precious-flag
478 If this variable is non-@code{nil}, then @code{save-buffer} protects
479 against I/O errors while saving by writing the new file to a temporary
480 name instead of the name it is supposed to have, and then renaming it to
481 the intended name after it is clear there are no errors. This procedure
482 prevents problems such as a lack of disk space from resulting in an
483 invalid file.
484
485 As a side effect, backups are necessarily made by copying. @xref{Rename
486 or Copy}. Yet, at the same time, saving a precious file always breaks
487 all hard links between the file you save and other file names.
488
489 Some modes give this variable a non-@code{nil} buffer-local value
490 in particular buffers.
491 @end defopt
492
493 @defopt require-final-newline
494 This variable determines whether files may be written out that do
495 @emph{not} end with a newline. If the value of the variable is
496 @code{t}, then @code{save-buffer} silently adds a newline at the end
497 of the buffer whenever it does not already end in one. If the value
498 is @code{visit}, Emacs adds a missing newline just after it visits the
499 file. If the value is @code{visit-save}, Emacs adds a missing newline
500 both on visiting and on saving. For any other non-@code{nil} value,
501 @code{save-buffer} asks the user whether to add a newline each time
502 the case arises.
503
504 If the value of the variable is @code{nil}, then @code{save-buffer}
505 doesn't add newlines at all. @code{nil} is the default value, but a few
506 major modes set it to @code{t} in particular buffers.
507 @end defopt
508
509 See also the function @code{set-visited-file-name} (@pxref{Buffer File
510 Name}).
511
512 @node Reading from Files
513 @section Reading from Files
514 @cindex reading from files
515
516 To copy the contents of a file into a buffer, use the function
517 @code{insert-file-contents}. (Don't use the command
518 @code{insert-file} in a Lisp program, as that sets the mark.)
519
520 @defun insert-file-contents filename &optional visit beg end replace
521 This function inserts the contents of file @var{filename} into the
522 current buffer after point. It returns a list of the absolute file name
523 and the length of the data inserted. An error is signaled if
524 @var{filename} is not the name of a file that can be read.
525
526 This function checks the file contents against the defined file
527 formats, and converts the file contents if appropriate and also calls
528 the functions in the list @code{after-insert-file-functions}.
529 @xref{Format Conversion}. Normally, one of the functions in the
530 @code{after-insert-file-functions} list determines the coding system
531 (@pxref{Coding Systems}) used for decoding the file's contents,
532 including end-of-line conversion. However, if the file contains null
533 bytes, it is by default visited without any code conversions.
534 @xref{Lisp and Coding Systems, inhibit-null-byte-detection}.
535
536 If @var{visit} is non-@code{nil}, this function additionally marks the
537 buffer as unmodified and sets up various fields in the buffer so that it
538 is visiting the file @var{filename}: these include the buffer's visited
539 file name and its last save file modtime. This feature is used by
540 @code{find-file-noselect} and you probably should not use it yourself.
541
542 If @var{beg} and @var{end} are non-@code{nil}, they should be numbers
543 that are byte offsets specifying the portion of the file to insert.
544 In this case, @var{visit} must be @code{nil}. For example,
545
546 @example
547 (insert-file-contents filename nil 0 500)
548 @end example
549
550 @noindent
551 inserts the first 500 characters of a file.
552
553 If the argument @var{replace} is non-@code{nil}, it means to replace the
554 contents of the buffer (actually, just the accessible portion) with the
555 contents of the file. This is better than simply deleting the buffer
556 contents and inserting the whole file, because (1) it preserves some
557 marker positions and (2) it puts less data in the undo list.
558
559 It is possible to read a special file (such as a FIFO or an I/O device)
560 with @code{insert-file-contents}, as long as @var{replace} and
561 @var{visit} are @code{nil}.
562 @end defun
563
564 @defun insert-file-contents-literally filename &optional visit beg end replace
565 This function works like @code{insert-file-contents} except that it
566 does not run @code{find-file-hook}, and does not do format decoding,
567 character code conversion, automatic uncompression, and so on.
568 @end defun
569
570 If you want to pass a file name to another process so that another
571 program can read the file, use the function @code{file-local-copy}; see
572 @ref{Magic File Names}.
573
574 @node Writing to Files
575 @section Writing to Files
576 @cindex writing to files
577
578 You can write the contents of a buffer, or part of a buffer, directly
579 to a file on disk using the @code{append-to-file} and
580 @code{write-region} functions. Don't use these functions to write to
581 files that are being visited; that could cause confusion in the
582 mechanisms for visiting.
583
584 @deffn Command append-to-file start end filename
585 This function appends the contents of the region delimited by
586 @var{start} and @var{end} in the current buffer to the end of file
587 @var{filename}. If that file does not exist, it is created. This
588 function returns @code{nil}.
589
590 An error is signaled if @var{filename} specifies a nonwritable file,
591 or a nonexistent file in a directory where files cannot be created.
592
593 When called from Lisp, this function is completely equivalent to:
594
595 @example
596 (write-region start end filename t)
597 @end example
598 @end deffn
599
600 @deffn Command write-region start end filename &optional append visit lockname mustbenew
601 This function writes the region delimited by @var{start} and @var{end}
602 in the current buffer into the file specified by @var{filename}.
603
604 If @var{start} is @code{nil}, then the command writes the entire buffer
605 contents (@emph{not} just the accessible portion) to the file and
606 ignores @var{end}.
607
608 @c Emacs 19 feature
609 If @var{start} is a string, then @code{write-region} writes or appends
610 that string, rather than text from the buffer. @var{end} is ignored in
611 this case.
612
613 If @var{append} is non-@code{nil}, then the specified text is appended
614 to the existing file contents (if any). If @var{append} is a
615 number, @code{write-region} seeks to that byte offset from the start
616 of the file and writes the data from there.
617
618 If @var{mustbenew} is non-@code{nil}, then @code{write-region} asks
619 for confirmation if @var{filename} names an existing file. If
620 @var{mustbenew} is the symbol @code{excl}, then @code{write-region}
621 does not ask for confirmation, but instead it signals an error
622 @code{file-already-exists} if the file already exists.
623
624 The test for an existing file, when @var{mustbenew} is @code{excl}, uses
625 a special system feature. At least for files on a local disk, there is
626 no chance that some other program could create a file of the same name
627 before Emacs does, without Emacs's noticing.
628
629 If @var{visit} is @code{t}, then Emacs establishes an association
630 between the buffer and the file: the buffer is then visiting that file.
631 It also sets the last file modification time for the current buffer to
632 @var{filename}'s modtime, and marks the buffer as not modified. This
633 feature is used by @code{save-buffer}, but you probably should not use
634 it yourself.
635
636 @c Emacs 19 feature
637 If @var{visit} is a string, it specifies the file name to visit. This
638 way, you can write the data to one file (@var{filename}) while recording
639 the buffer as visiting another file (@var{visit}). The argument
640 @var{visit} is used in the echo area message and also for file locking;
641 @var{visit} is stored in @code{buffer-file-name}. This feature is used
642 to implement @code{file-precious-flag}; don't use it yourself unless you
643 really know what you're doing.
644
645 The optional argument @var{lockname}, if non-@code{nil}, specifies the
646 file name to use for purposes of locking and unlocking, overriding
647 @var{filename} and @var{visit} for that purpose.
648
649 The function @code{write-region} converts the data which it writes to
650 the appropriate file formats specified by @code{buffer-file-format}
651 and also calls the functions in the list
652 @code{write-region-annotate-functions}.
653 @xref{Format Conversion}.
654
655 Normally, @code{write-region} displays the message @samp{Wrote
656 @var{filename}} in the echo area. This message is inhibited if
657 @var{visit} is neither @code{t} nor @code{nil} nor a string, or if
658 Emacs is operating in batch mode (@pxref{Batch Mode}). This
659 feature is useful for programs that use files for internal purposes,
660 files that the user does not need to know about.
661 @end deffn
662
663 @defmac with-temp-file file body@dots{}
664 @anchor{Definition of with-temp-file}
665 The @code{with-temp-file} macro evaluates the @var{body} forms with a
666 temporary buffer as the current buffer; then, at the end, it writes the
667 buffer contents into file @var{file}. It kills the temporary buffer
668 when finished, restoring the buffer that was current before the
669 @code{with-temp-file} form. Then it returns the value of the last form
670 in @var{body}.
671
672 The current buffer is restored even in case of an abnormal exit via
673 @code{throw} or error (@pxref{Nonlocal Exits}).
674
675 See also @code{with-temp-buffer} in @ref{Definition of
676 with-temp-buffer,, The Current Buffer}.
677 @end defmac
678
679 @node File Locks
680 @section File Locks
681 @cindex file locks
682 @cindex lock file
683
684 When two users edit the same file at the same time, they are likely
685 to interfere with each other. Emacs tries to prevent this situation
686 from arising by recording a @dfn{file lock} when a file is being
687 modified.
688 Emacs can then detect the first attempt to modify a buffer visiting a
689 file that is locked by another Emacs job, and ask the user what to do.
690 The file lock is really a file, a symbolic link with a special name,
691 stored in the same directory as the file you are editing. (On file
692 systems that do not support symbolic links, a regular file is used.)
693
694 When you access files using NFS, there may be a small probability that
695 you and another user will both lock the same file simultaneously.
696 If this happens, it is possible for the two users to make changes
697 simultaneously, but Emacs will still warn the user who saves second.
698 Also, the detection of modification of a buffer visiting a file changed
699 on disk catches some cases of simultaneous editing; see
700 @ref{Modification Time}.
701
702 @defun file-locked-p filename
703 This function returns @code{nil} if the file @var{filename} is not
704 locked. It returns @code{t} if it is locked by this Emacs process, and
705 it returns the name of the user who has locked it if it is locked by
706 some other job.
707
708 @example
709 @group
710 (file-locked-p "foo")
711 @result{} nil
712 @end group
713 @end example
714 @end defun
715
716 @defun lock-buffer &optional filename
717 This function locks the file @var{filename}, if the current buffer is
718 modified. The argument @var{filename} defaults to the current buffer's
719 visited file. Nothing is done if the current buffer is not visiting a
720 file, or is not modified, or if the option @code{create-lockfiles} is
721 @code{nil}.
722 @end defun
723
724 @defun unlock-buffer
725 This function unlocks the file being visited in the current buffer,
726 if the buffer is modified. If the buffer is not modified, then
727 the file should not be locked, so this function does nothing. It also
728 does nothing if the current buffer is not visiting a file, or is not locked.
729 @end defun
730
731 @defopt create-lockfiles
732 If this variable is @code{nil}, Emacs does not lock files.
733 @end defopt
734
735 @defun ask-user-about-lock file other-user
736 This function is called when the user tries to modify @var{file}, but it
737 is locked by another user named @var{other-user}. The default
738 definition of this function asks the user to say what to do. The value
739 this function returns determines what Emacs does next:
740
741 @itemize @bullet
742 @item
743 A value of @code{t} says to grab the lock on the file. Then
744 this user may edit the file and @var{other-user} loses the lock.
745
746 @item
747 A value of @code{nil} says to ignore the lock and let this
748 user edit the file anyway.
749
750 @item
751 @kindex file-locked
752 This function may instead signal a @code{file-locked} error, in which
753 case the change that the user was about to make does not take place.
754
755 The error message for this error looks like this:
756
757 @example
758 @error{} File is locked: @var{file} @var{other-user}
759 @end example
760
761 @noindent
762 where @code{file} is the name of the file and @var{other-user} is the
763 name of the user who has locked the file.
764 @end itemize
765
766 If you wish, you can replace the @code{ask-user-about-lock} function
767 with your own version that makes the decision in another way.
768 @end defun
769
770 @node Information about Files
771 @section Information about Files
772 @cindex file, information about
773
774 This section describes the functions for retrieving various types of
775 information about files (or directories or symbolic links), such as
776 whether a file is readable or writable, and its size. These functions
777 all take arguments which are file names. Except where noted, these
778 arguments need to specify existing files, or an error is signaled.
779
780 @cindex file names, trailing whitespace
781 @cindex trailing blanks in file names
782 Be careful with file names that end in spaces. On some filesystems
783 (notably, MS-Windows), trailing whitespace characters in file names
784 are silently and automatically ignored.
785
786 @menu
787 * Testing Accessibility:: Is a given file readable? Writable?
788 * Kinds of Files:: Is it a directory? A symbolic link?
789 * Truenames:: Eliminating symbolic links from a file name.
790 * File Attributes:: File sizes, modification times, etc.
791 * Extended Attributes:: Extended file attributes for access control.
792 * Locating Files:: How to find a file in standard places.
793 @end menu
794
795 @node Testing Accessibility
796 @subsection Testing Accessibility
797 @cindex accessibility of a file
798 @cindex file accessibility
799
800 These functions test for permission to access a file for reading,
801 writing, or execution. Unless explicitly stated otherwise, they
802 recursively follow symbolic links for their file name arguments, at
803 all levels (at the level of the file itself and at all levels of
804 parent directories).
805
806 On some operating systems, more complex sets of access permissions
807 can be specified, via mechanisms such as Access Control Lists (ACLs).
808 @xref{Extended Attributes}, for how to query and set those
809 permissions.
810
811 @defun file-exists-p filename
812 This function returns @code{t} if a file named @var{filename} appears
813 to exist. This does not mean you can necessarily read the file, only
814 that you can find out its attributes. (On Unix and GNU/Linux, this is
815 true if the file exists and you have execute permission on the
816 containing directories, regardless of the permissions of the file
817 itself.)
818
819 If the file does not exist, or if access control policies prevent you
820 from finding its attributes, this function returns @code{nil}.
821
822 Directories are files, so @code{file-exists-p} returns @code{t} when
823 given a directory name. However, symbolic links are treated
824 specially; @code{file-exists-p} returns @code{t} for a symbolic link
825 name only if the target file exists.
826 @end defun
827
828 @defun file-readable-p filename
829 This function returns @code{t} if a file named @var{filename} exists
830 and you can read it. It returns @code{nil} otherwise.
831 @end defun
832
833 @defun file-executable-p filename
834 This function returns @code{t} if a file named @var{filename} exists and
835 you can execute it. It returns @code{nil} otherwise. On Unix and
836 GNU/Linux, if the file is a directory, execute permission means you can
837 check the existence and attributes of files inside the directory, and
838 open those files if their modes permit.
839 @end defun
840
841 @defun file-writable-p filename
842 This function returns @code{t} if the file @var{filename} can be written
843 or created by you, and @code{nil} otherwise. A file is writable if the
844 file exists and you can write it. It is creatable if it does not exist,
845 but the specified directory does exist and you can write in that
846 directory.
847
848 In the example below, @file{foo} is not writable because the parent
849 directory does not exist, even though the user could create such a
850 directory.
851
852 @example
853 @group
854 (file-writable-p "~/no-such-dir/foo")
855 @result{} nil
856 @end group
857 @end example
858 @end defun
859
860 @defun file-accessible-directory-p dirname
861 This function returns @code{t} if you have permission to open existing
862 files in the directory whose name as a file is @var{dirname};
863 otherwise (or if there is no such directory), it returns @code{nil}.
864 The value of @var{dirname} may be either a directory name (such as
865 @file{/foo/}) or the file name of a file which is a directory
866 (such as @file{/foo}, without the final slash).
867
868 For example, from the following we deduce that any attempt to read a
869 file in @file{/foo/} will give an error:
870
871 @example
872 (file-accessible-directory-p "/foo")
873 @result{} nil
874 @end example
875 @end defun
876
877 @defun access-file filename string
878 This function opens file @var{filename} for reading, then closes it and
879 returns @code{nil}. However, if the open fails, it signals an error
880 using @var{string} as the error message text.
881 @end defun
882
883 @defun file-ownership-preserved-p filename &optional group
884 This function returns @code{t} if deleting the file @var{filename} and
885 then creating it anew would keep the file's owner unchanged. It also
886 returns @code{t} for nonexistent files.
887
888 If the optional argument @var{group} is non-@code{nil}, this function
889 also checks that the file's group would be unchanged.
890
891 If @var{filename} is a symbolic link, then, unlike the other functions
892 discussed here, @code{file-ownership-preserved-p} does @emph{not}
893 replace @var{filename} with its target. However, it does recursively
894 follow symbolic links at all levels of parent directories.
895 @end defun
896
897 @defun file-modes filename
898 @cindex mode bits
899 @cindex file permissions
900 @cindex permissions, file
901 @cindex file modes
902 This function returns the @dfn{mode bits} of @var{filename}---an
903 integer summarizing its read, write, and execution permissions.
904 Symbolic links in @var{filename} are recursively followed at all
905 levels. If the file does not exist, the return value is @code{nil}.
906
907 @xref{File permissions,,, coreutils, The @sc{gnu} @code{Coreutils}
908 Manual}, for a description of mode bits. For example, if the
909 low-order bit is 1, the file is executable by all users; if the
910 second-lowest-order bit is 1, the file is writable by all users; etc.
911 The highest possible value is 4095 (7777 octal), meaning that everyone
912 has read, write, and execute permission, the @acronym{SUID} bit is set
913 for both others and group, and the sticky bit is set.
914
915 @xref{Changing Files}, for the @code{set-file-modes} function, which
916 can be used to set these permissions.
917
918 @example
919 @group
920 (file-modes "~/junk/diffs")
921 @result{} 492 ; @r{Decimal integer.}
922 @end group
923 @group
924 (format "%o" 492)
925 @result{} "754" ; @r{Convert to octal.}
926 @end group
927
928 @group
929 (set-file-modes "~/junk/diffs" #o666)
930 @result{} nil
931 @end group
932
933 @group
934 $ ls -l diffs
935 -rw-rw-rw- 1 lewis lewis 3063 Oct 30 16:00 diffs
936 @end group
937 @end example
938
939 @cindex MS-DOS and file modes
940 @cindex file modes and MS-DOS
941 @strong{MS-DOS note:} On MS-DOS, there is no such thing as an
942 executable file mode bit. So @code{file-modes} considers a file
943 executable if its name ends in one of the standard executable
944 extensions, such as @file{.com}, @file{.bat}, @file{.exe}, and some
945 others. Files that begin with the Unix-standard @samp{#!} signature,
946 such as shell and Perl scripts, are also considered executable.
947 Directories are also reported as executable, for compatibility with
948 Unix. These conventions are also followed by @code{file-attributes}
949 (@pxref{File Attributes}).
950 @end defun
951
952 @node Kinds of Files
953 @subsection Distinguishing Kinds of Files
954 @cindex file classification
955 @cindex classification of file types
956
957 This section describes how to distinguish various kinds of files, such
958 as directories, symbolic links, and ordinary files.
959
960 @defun file-symlink-p filename
961 @cindex file symbolic links
962 If the file @var{filename} is a symbolic link, the
963 @code{file-symlink-p} function returns its (non-recursive) link target
964 as a string. (The link target string is not necessarily the full
965 absolute file name of the target; determining the full file name that
966 the link points to is nontrivial, see below.) If the leading
967 directories of @var{filename} include symbolic links, this function
968 recursively follows them.
969
970 If the file @var{filename} is not a symbolic link, or does not exist,
971 @code{file-symlink-p} returns @code{nil}.
972
973 Here are a few examples of using this function:
974
975 @example
976 @group
977 (file-symlink-p "not-a-symlink")
978 @result{} nil
979 @end group
980 @group
981 (file-symlink-p "sym-link")
982 @result{} "not-a-symlink"
983 @end group
984 @group
985 (file-symlink-p "sym-link2")
986 @result{} "sym-link"
987 @end group
988 @group
989 (file-symlink-p "/bin")
990 @result{} "/pub/bin"
991 @end group
992 @end example
993
994 Note that in the third example, the function returned @file{sym-link},
995 but did not proceed to resolve it, although that file is itself a
996 symbolic link. This is what we meant by ``non-recursive'' above---the
997 process of following the symbolic links does not recurse if the link
998 target is itself a link.
999
1000 The string that this function returns is what is recorded in the
1001 symbolic link; it may or may not include any leading directories.
1002 This function does @emph{not} expand the link target to produce a
1003 fully-qualified file name, and in particular does not use the leading
1004 directories, if any, of the @var{filename} argument if the link target
1005 is not an absolute file name. Here's an example:
1006
1007 @example
1008 @group
1009 (file-symlink-p "/foo/bar/baz")
1010 @result{} "some-file"
1011 @end group
1012 @end example
1013
1014 @noindent
1015 Here, although @file{/foo/bar/baz} was given as a fully-qualified file
1016 name, the result is not, and in fact does not have any leading
1017 directories at all. And since @file{some-file} might itself be a
1018 symbolic link, you cannot simply prepend leading directories to it,
1019 nor even naively use @code{expand-file-name} (@pxref{File Name
1020 Expansion}) to produce its absolute file name.
1021
1022 For this reason, this function is seldom useful if you need to
1023 determine more than just the fact that a file is or isn't a symbolic
1024 link. If you actually need the file name of the link target, use
1025 @code{file-chase-links} or @code{file-truename}, described in
1026 @ref{Truenames}.
1027 @end defun
1028
1029 The next two functions recursively follow symbolic links at
1030 all levels for @var{filename}.
1031
1032 @defun file-directory-p filename
1033 This function returns @code{t} if @var{filename} is the name of an
1034 existing directory, @code{nil} otherwise.
1035
1036 @example
1037 @group
1038 (file-directory-p "~rms")
1039 @result{} t
1040 @end group
1041 @group
1042 (file-directory-p "~rms/lewis/files.texi")
1043 @result{} nil
1044 @end group
1045 @group
1046 (file-directory-p "~rms/lewis/no-such-file")
1047 @result{} nil
1048 @end group
1049 @group
1050 (file-directory-p "$HOME")
1051 @result{} nil
1052 @end group
1053 @group
1054 (file-directory-p
1055 (substitute-in-file-name "$HOME"))
1056 @result{} t
1057 @end group
1058 @end example
1059 @end defun
1060
1061 @defun file-regular-p filename
1062 This function returns @code{t} if the file @var{filename} exists and is
1063 a regular file (not a directory, named pipe, terminal, or
1064 other I/O device).
1065 @end defun
1066
1067 @node Truenames
1068 @subsection Truenames
1069 @cindex truename (of file)
1070
1071 The @dfn{truename} of a file is the name that you get by following
1072 symbolic links at all levels until none remain, then simplifying away
1073 @samp{.}@: and @samp{..}@: appearing as name components. This results
1074 in a sort of canonical name for the file. A file does not always have a
1075 unique truename; the number of distinct truenames a file has is equal to
1076 the number of hard links to the file. However, truenames are useful
1077 because they eliminate symbolic links as a cause of name variation.
1078
1079 @defun file-truename filename
1080 This function returns the truename of the file @var{filename}. If the
1081 argument is not an absolute file name, this function first expands it
1082 against @code{default-directory}.
1083
1084 This function does not expand environment variables. Only
1085 @code{substitute-in-file-name} does that. @xref{Definition of
1086 substitute-in-file-name}.
1087
1088 If you may need to follow symbolic links preceding @samp{..}@:
1089 appearing as a name component, call @code{file-truename} without prior
1090 direct or indirect calls to @code{expand-file-name}. Otherwise, the
1091 file name component immediately preceding @samp{..} will be
1092 simplified away before @code{file-truename} is called. To
1093 eliminate the need for a call to @code{expand-file-name},
1094 @code{file-truename} handles @samp{~} in the same way that
1095 @code{expand-file-name} does. @xref{File Name Expansion,, Functions
1096 that Expand Filenames}.
1097 @end defun
1098
1099 @defun file-chase-links filename &optional limit
1100 This function follows symbolic links, starting with @var{filename},
1101 until it finds a file name which is not the name of a symbolic link.
1102 Then it returns that file name. This function does @emph{not} follow
1103 symbolic links at the level of parent directories.
1104
1105 If you specify a number for @var{limit}, then after chasing through
1106 that many links, the function just returns what it has even if that is
1107 still a symbolic link.
1108 @end defun
1109
1110 To illustrate the difference between @code{file-chase-links} and
1111 @code{file-truename}, suppose that @file{/usr/foo} is a symbolic link to
1112 the directory @file{/home/foo}, and @file{/home/foo/hello} is an
1113 ordinary file (or at least, not a symbolic link) or nonexistent. Then
1114 we would have:
1115
1116 @example
1117 (file-chase-links "/usr/foo/hello")
1118 ;; @r{This does not follow the links in the parent directories.}
1119 @result{} "/usr/foo/hello"
1120 (file-truename "/usr/foo/hello")
1121 ;; @r{Assuming that @file{/home} is not a symbolic link.}
1122 @result{} "/home/foo/hello"
1123 @end example
1124
1125 @defun file-equal-p file1 file2
1126 This function returns @code{t} if the files @var{file1} and
1127 @var{file2} name the same file. This is similar to comparing their
1128 truenames, except that remote file names are also handled in an
1129 appropriate manner. If @var{file1} or @var{file2} does not exist, the
1130 return value is unspecified.
1131 @end defun
1132
1133 @defun file-in-directory-p file dir
1134 This function returns @code{t} if @var{file} is a file in directory
1135 @var{dir}, or in a subdirectory of @var{dir}. It also returns
1136 @code{t} if @var{file} and @var{dir} are the same directory. It
1137 compares the truenames of the two directories. If @var{dir} does not
1138 name an existing directory, the return value is @code{nil}.
1139 @end defun
1140
1141 @node File Attributes
1142 @subsection File Attributes
1143 @cindex file attributes
1144
1145 This section describes the functions for getting detailed
1146 information about a file, including the owner and group numbers, the
1147 number of names, the inode number, the size, and the times of access
1148 and modification.
1149
1150 @defun file-newer-than-file-p filename1 filename2
1151 @cindex file age
1152 @cindex file modification time
1153 This function returns @code{t} if the file @var{filename1} is
1154 newer than file @var{filename2}. If @var{filename1} does not
1155 exist, it returns @code{nil}. If @var{filename1} does exist, but
1156 @var{filename2} does not, it returns @code{t}.
1157
1158 In the following example, assume that the file @file{aug-19} was written
1159 on the 19th, @file{aug-20} was written on the 20th, and the file
1160 @file{no-file} doesn't exist at all.
1161
1162 @example
1163 @group
1164 (file-newer-than-file-p "aug-19" "aug-20")
1165 @result{} nil
1166 @end group
1167 @group
1168 (file-newer-than-file-p "aug-20" "aug-19")
1169 @result{} t
1170 @end group
1171 @group
1172 (file-newer-than-file-p "aug-19" "no-file")
1173 @result{} t
1174 @end group
1175 @group
1176 (file-newer-than-file-p "no-file" "aug-19")
1177 @result{} nil
1178 @end group
1179 @end example
1180 @end defun
1181
1182 If the @var{filename} argument to the next two functions is a
1183 symbolic link, then these function do @emph{not} replace it with its
1184 target. However, they both recursively follow symbolic links at all
1185 levels of parent directories.
1186
1187 @defun file-attributes filename &optional id-format
1188 @anchor{Definition of file-attributes}
1189 This function returns a list of attributes of file @var{filename}. If
1190 the specified file cannot be opened, it returns @code{nil}.
1191 The optional parameter @var{id-format} specifies the preferred format
1192 of attributes @acronym{UID} and @acronym{GID} (see below)---the
1193 valid values are @code{'string} and @code{'integer}. The latter is
1194 the default, but we plan to change that, so you should specify a
1195 non-@code{nil} value for @var{id-format} if you use the returned
1196 @acronym{UID} or @acronym{GID}.
1197
1198 Accessor functions are provided to access the elements in this list.
1199 The accessors are mentioned along with the descriptions of the
1200 elements below.
1201
1202 The elements of the list, in order, are:
1203
1204 @enumerate 0
1205 @item
1206 @code{t} for a directory, a string for a symbolic link (the name
1207 linked to), or @code{nil} for a text file
1208 (@code{file-attribute-type}).
1209
1210 @c Wordy so as to prevent an overfull hbox. --rjc 15mar92
1211 @item
1212 The number of names the file has (@code{file-attribute-link-number}).
1213 Alternate names, also known as hard links, can be created by using the
1214 @code{add-name-to-file} function (@pxref{Changing Files}).
1215
1216 @item
1217 The file's @acronym{UID}, normally as a string
1218 (@code{file-attribute-user-id}). However, if it does not correspond
1219 to a named user, the value is a number.
1220
1221 @item
1222 The file's @acronym{GID}, likewise (@code{file-attribute-group-id}).
1223
1224 @item
1225 The time of last access, as a list of four integers
1226 @code{(@var{sec-high} @var{sec-low} @var{microsec} @var{picosec})}
1227 (@code{file-attribute-access-time}). (This is similar to the value of
1228 @code{current-time}; see @ref{Time of Day}.) Note that on some
1229 FAT-based filesystems, only the date of last access is recorded, so
1230 this time will always hold the midnight of the day of last access.
1231
1232 @cindex modification time of file
1233 @item
1234 The time of last modification as a list of four integers (as above)
1235 (@code{file-attribute-modification-time}). This is the last time when
1236 the file's contents were modified.
1237
1238 @item
1239 The time of last status change as a list of four integers (as above)
1240 (@code{file-attribute-status-change-time}). This is the time of the
1241 last change to the file's access mode bits, its owner and group, and
1242 other information recorded in the filesystem for the file, beyond the
1243 file's contents.
1244
1245 @item
1246 The size of the file in bytes (@code{file-attribute-size}). This is
1247 floating point if the size is too large to fit in a Lisp integer.
1248
1249 @item
1250 The file's modes, as a string of ten letters or dashes, as in
1251 @samp{ls -l} (@code{file-attribute-modes}).
1252
1253 @item
1254 An unspecified value, present for backward compatibility.
1255
1256 @item
1257 The file's inode number (@code{file-attribute-inode-number}). If
1258 possible, this is an integer. If the inode number is too large to be
1259 represented as an integer in Emacs Lisp but dividing it by
1260 @math{2^{16}} yields a representable integer, then the value has the
1261 form @code{(@var{high} . @var{low})}, where @var{low} holds the low 16
1262 bits. If the inode number is too wide for even that, the value is of
1263 the form @code{(@var{high} @var{middle} . @var{low})}, where
1264 @code{high} holds the high bits, @var{middle} the middle 24 bits, and
1265 @var{low} the low 16 bits.
1266
1267 @item
1268 The filesystem number of the device that the file is on
1269 @code{file-attribute-device-number}). Depending on the magnitude of
1270 the value, this can be either an integer or a cons cell, in the same
1271 manner as the inode number. This element and the file's inode number
1272 together give enough information to distinguish any two files on the
1273 system---no two files can have the same values for both of these
1274 numbers.
1275 @end enumerate
1276
1277 For example, here are the file attributes for @file{files.texi}:
1278
1279 @example
1280 @group
1281 (file-attributes "files.texi" 'string)
1282 @result{} (nil 1 "lh" "users"
1283 (20614 64019 50040 152000)
1284 (20000 23 0 0)
1285 (20614 64555 902289 872000)
1286 122295 "-rw-rw-rw-"
1287 t (5888 2 . 43978)
1288 (15479 . 46724))
1289 @end group
1290 @end example
1291
1292 @noindent
1293 and here is how the result is interpreted:
1294
1295 @table @code
1296 @item nil
1297 is neither a directory nor a symbolic link.
1298
1299 @item 1
1300 has only one name (the name @file{files.texi} in the current default
1301 directory).
1302
1303 @item "lh"
1304 is owned by the user with name @samp{lh}.
1305
1306 @item "users"
1307 is in the group with name @samp{users}.
1308
1309 @item (20614 64019 50040 152000)
1310 was last accessed on October 23, 2012, at 20:12:03.050040152 UTC.
1311
1312 @item (20000 23 0 0)
1313 was last modified on July 15, 2001, at 08:53:43 UTC.
1314
1315 @item (20614 64555 902289 872000)
1316 last had its status changed on October 23, 2012, at 20:20:59.902289872 UTC.
1317
1318 @item 122295
1319 is 122295 bytes long. (It may not contain 122295 characters, though,
1320 if some of the bytes belong to multibyte sequences, and also if the
1321 end-of-line format is CR-LF.)
1322
1323 @item "-rw-rw-rw-"
1324 has a mode of read and write access for the owner, group, and world.
1325
1326 @item t
1327 is merely a placeholder; it carries no information.
1328
1329 @item (5888 2 . 43978)
1330 has an inode number of 6473924464520138.
1331
1332 @item (15479 . 46724)
1333 is on the file-system device whose number is 1014478468.
1334 @end table
1335 @end defun
1336
1337 @defun file-nlinks filename
1338 This function returns the number of names (i.e., hard links) that
1339 file @var{filename} has. If the file does not exist, this function
1340 returns @code{nil}. Note that symbolic links have no effect on this
1341 function, because they are not considered to be names of the files
1342 they link to.
1343
1344 @example
1345 @group
1346 $ ls -l foo*
1347 -rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo
1348 -rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo1
1349 @end group
1350
1351 @group
1352 (file-nlinks "foo")
1353 @result{} 2
1354 @end group
1355 @group
1356 (file-nlinks "doesnt-exist")
1357 @result{} nil
1358 @end group
1359 @end example
1360 @end defun
1361
1362 @node Extended Attributes
1363 @subsection Extended File Attributes
1364 @cindex extended file attributes
1365
1366 On some operating systems, each file can be associated with arbitrary
1367 @dfn{extended file attributes}. At present, Emacs supports querying
1368 and setting two specific sets of extended file attributes: Access
1369 Control Lists (ACLs) and SELinux contexts. These extended file
1370 attributes are used, on some systems, to impose more sophisticated
1371 file access controls than the basic Unix-style permissions
1372 discussed in the previous sections.
1373
1374 @cindex access control list
1375 @cindex ACL entries
1376 @cindex SELinux context
1377 A detailed explanation of ACLs and SELinux is beyond the scope of
1378 this manual. For our purposes, each file can be associated with an
1379 @dfn{ACL}, which specifies its properties under an ACL-based file
1380 control system, and/or an @dfn{SELinux context}, which specifies its
1381 properties under the SELinux system.
1382
1383 @defun file-acl filename
1384 This function returns the ACL for the file @var{filename}. The exact
1385 Lisp representation of the ACL is unspecified (and may change in
1386 future Emacs versions), but it is the same as what @code{set-file-acl}
1387 takes for its @var{acl} argument (@pxref{Changing Files}).
1388
1389 The underlying ACL implementation is platform-specific; on GNU/Linux
1390 and BSD, Emacs uses the POSIX ACL interface, while on MS-Windows Emacs
1391 emulates the POSIX ACL interface with native file security APIs.
1392
1393 If Emacs was not compiled with ACL support, or the file does not exist
1394 or is inaccessible, or Emacs was unable to determine the ACL entries
1395 for any other reason, then the return value is @code{nil}.
1396 @end defun
1397
1398 @defun file-selinux-context filename
1399 This function returns the SELinux context of the file @var{filename},
1400 as a list of the form @code{(@var{user} @var{role} @var{type}
1401 @var{range})}. The list elements are the context's user, role, type,
1402 and range respectively, as Lisp strings; see the SELinux documentation
1403 for details about what these actually mean. The return value has the
1404 same form as what @code{set-file-selinux-context} takes for its
1405 @var{context} argument (@pxref{Changing Files}).
1406
1407 If Emacs was not compiled with SELinux support, or the file does not
1408 exist or is inaccessible, or if the system does not support SELinux,
1409 then the return value is @code{(nil nil nil nil)}.
1410 @end defun
1411
1412 @defun file-extended-attributes filename
1413 This function returns an alist of the Emacs-recognized extended
1414 attributes of file @var{filename}. Currently, it serves as a
1415 convenient way to retrieve both the ACL and SELinux context; you can
1416 then call the function @code{set-file-extended-attributes}, with the
1417 returned alist as its second argument, to apply the same file access
1418 attributes to another file (@pxref{Changing Files}).
1419
1420 One of the elements is @code{(acl . @var{acl})}, where @var{acl} has
1421 the same form returned by @code{file-acl}.
1422
1423 Another element is @code{(selinux-context . @var{context})}, where
1424 @var{context} is the SELinux context, in the same form returned by
1425 @code{file-selinux-context}.
1426 @end defun
1427
1428 @node Locating Files
1429 @subsection Locating Files in Standard Places
1430 @cindex locate file in path
1431 @cindex find file in path
1432
1433 This section explains how to search for a file in a list of
1434 directories (a @dfn{path}), or for an executable file in the standard
1435 list of executable file directories.
1436
1437 To search for a user-specific configuration file, @xref{Standard
1438 File Names}, for the @code{locate-user-emacs-file} function.
1439
1440 @defun locate-file filename path &optional suffixes predicate
1441 This function searches for a file whose name is @var{filename} in a
1442 list of directories given by @var{path}, trying the suffixes in
1443 @var{suffixes}. If it finds such a file, it returns the file's
1444 absolute file name (@pxref{Relative File Names}); otherwise it returns
1445 @code{nil}.
1446
1447 The optional argument @var{suffixes} gives the list of file-name
1448 suffixes to append to @var{filename} when searching.
1449 @code{locate-file} tries each possible directory with each of these
1450 suffixes. If @var{suffixes} is @code{nil}, or @code{("")}, then there
1451 are no suffixes, and @var{filename} is used only as-is. Typical
1452 values of @var{suffixes} are @code{exec-suffixes} (@pxref{Subprocess
1453 Creation}), @code{load-suffixes}, @code{load-file-rep-suffixes} and
1454 the return value of the function @code{get-load-suffixes} (@pxref{Load
1455 Suffixes}).
1456
1457 Typical values for @var{path} are @code{exec-path} (@pxref{Subprocess
1458 Creation}) when looking for executable programs, or @code{load-path}
1459 (@pxref{Library Search}) when looking for Lisp files. If
1460 @var{filename} is absolute, @var{path} has no effect, but the suffixes
1461 in @var{suffixes} are still tried.
1462
1463 The optional argument @var{predicate}, if non-@code{nil}, specifies a
1464 predicate function for testing whether a candidate file is suitable.
1465 The predicate is passed the candidate file name as its single
1466 argument. If @var{predicate} is @code{nil} or omitted,
1467 @code{locate-file} uses @code{file-readable-p} as the predicate.
1468 @xref{Kinds of Files}, for other useful predicates, e.g.,
1469 @code{file-executable-p} and @code{file-directory-p}.
1470
1471 For compatibility, @var{predicate} can also be one of the symbols
1472 @code{executable}, @code{readable}, @code{writable}, @code{exists}, or
1473 a list of one or more of these symbols.
1474 @end defun
1475
1476 @defun executable-find program
1477 This function searches for the executable file of the named
1478 @var{program} and returns the absolute file name of the executable,
1479 including its file-name extensions, if any. It returns @code{nil} if
1480 the file is not found. The functions searches in all the directories
1481 in @code{exec-path}, and tries all the file-name extensions in
1482 @code{exec-suffixes} (@pxref{Subprocess Creation}).
1483 @end defun
1484
1485 @node Changing Files
1486 @section Changing File Names and Attributes
1487 @c @cindex renaming files Duplicates rename-file
1488 @cindex copying files
1489 @cindex deleting files
1490 @cindex linking files
1491 @cindex setting modes of files
1492
1493 The functions in this section rename, copy, delete, link, and set
1494 the modes (permissions) of files. They all signal a @code{file-error}
1495 error if they fail to perform their function, reporting the
1496 system-dependent error message that describes the reason for the
1497 failure.
1498
1499 In the functions that have an argument @var{newname}, if a file by the
1500 name of @var{newname} already exists, the actions taken depend on the
1501 value of the argument @var{ok-if-already-exists}:
1502
1503 @itemize @bullet
1504 @item
1505 Signal a @code{file-already-exists} error if
1506 @var{ok-if-already-exists} is @code{nil}.
1507
1508 @item
1509 Request confirmation if @var{ok-if-already-exists} is a number.
1510
1511 @item
1512 Replace the old file without confirmation if @var{ok-if-already-exists}
1513 is any other value.
1514 @end itemize
1515
1516 The next four commands all recursively follow symbolic links at all
1517 levels of parent directories for their first argument, but, if that
1518 argument is itself a symbolic link, then only @code{copy-file}
1519 replaces it with its (recursive) target.
1520
1521 @deffn Command add-name-to-file oldname newname &optional ok-if-already-exists
1522 @cindex file with multiple names
1523 @cindex file hard link
1524 This function gives the file named @var{oldname} the additional name
1525 @var{newname}. This means that @var{newname} becomes a new hard
1526 link to @var{oldname}.
1527
1528 In the first part of the following example, we list two files,
1529 @file{foo} and @file{foo3}.
1530
1531 @example
1532 @group
1533 $ ls -li fo*
1534 81908 -rw-rw-rw- 1 rms rms 29 Aug 18 20:32 foo
1535 84302 -rw-rw-rw- 1 rms rms 24 Aug 18 20:31 foo3
1536 @end group
1537 @end example
1538
1539 Now we create a hard link, by calling @code{add-name-to-file}, then list
1540 the files again. This shows two names for one file, @file{foo} and
1541 @file{foo2}.
1542
1543 @example
1544 @group
1545 (add-name-to-file "foo" "foo2")
1546 @result{} nil
1547 @end group
1548
1549 @group
1550 $ ls -li fo*
1551 81908 -rw-rw-rw- 2 rms rms 29 Aug 18 20:32 foo
1552 81908 -rw-rw-rw- 2 rms rms 29 Aug 18 20:32 foo2
1553 84302 -rw-rw-rw- 1 rms rms 24 Aug 18 20:31 foo3
1554 @end group
1555 @end example
1556
1557 Finally, we evaluate the following:
1558
1559 @example
1560 (add-name-to-file "foo" "foo3" t)
1561 @end example
1562
1563 @noindent
1564 and list the files again. Now there are three names
1565 for one file: @file{foo}, @file{foo2}, and @file{foo3}. The old
1566 contents of @file{foo3} are lost.
1567
1568 @example
1569 @group
1570 (add-name-to-file "foo1" "foo3")
1571 @result{} nil
1572 @end group
1573
1574 @group
1575 $ ls -li fo*
1576 81908 -rw-rw-rw- 3 rms rms 29 Aug 18 20:32 foo
1577 81908 -rw-rw-rw- 3 rms rms 29 Aug 18 20:32 foo2
1578 81908 -rw-rw-rw- 3 rms rms 29 Aug 18 20:32 foo3
1579 @end group
1580 @end example
1581
1582 This function is meaningless on operating systems where multiple names
1583 for one file are not allowed. Some systems implement multiple names
1584 by copying the file instead.
1585
1586 See also @code{file-nlinks} in @ref{File Attributes}.
1587 @end deffn
1588
1589 @deffn Command rename-file filename newname &optional ok-if-already-exists
1590 This command renames the file @var{filename} as @var{newname}.
1591
1592 If @var{filename} has additional names aside from @var{filename}, it
1593 continues to have those names. In fact, adding the name @var{newname}
1594 with @code{add-name-to-file} and then deleting @var{filename} has the
1595 same effect as renaming, aside from momentary intermediate states.
1596 @end deffn
1597
1598 @deffn Command copy-file oldname newname &optional ok-if-exists time preserve-uid-gid preserve-extended-attributes
1599 This command copies the file @var{oldname} to @var{newname}. An
1600 error is signaled if @var{oldname} does not exist. If @var{newname}
1601 names a directory, it copies @var{oldname} into that directory,
1602 preserving its final name component.
1603
1604 If @var{time} is non-@code{nil}, then this function gives the new file
1605 the same last-modified time that the old one has. (This works on only
1606 some operating systems.) If setting the time gets an error,
1607 @code{copy-file} signals a @code{file-date-error} error. In an
1608 interactive call, a prefix argument specifies a non-@code{nil} value
1609 for @var{time}.
1610
1611 If argument @var{preserve-uid-gid} is @code{nil}, we let the operating
1612 system decide the user and group ownership of the new file (this is
1613 usually set to the user running Emacs). If @var{preserve-uid-gid} is
1614 non-@code{nil}, we attempt to copy the user and group ownership of the
1615 file. This works only on some operating systems, and only if you have
1616 the correct permissions to do so.
1617
1618 If the optional argument @var{preserve-permissions} is non-@code{nil},
1619 this function copies the file modes (or ``permissions'') of
1620 @var{oldname} to @var{newname}, as well as the Access Control List and
1621 SELinux context (if any). @xref{Information about Files}.
1622
1623 Otherwise, the file modes of @var{newname} are left unchanged if it is
1624 an existing file, and set to those of @var{oldname}, masked by the
1625 default file permissions (see @code{set-default-file-modes} below), if
1626 @var{newname} is to be newly created. The Access Control List or
1627 SELinux context are not copied over in either case.
1628 @end deffn
1629
1630 @deffn Command make-symbolic-link filename newname &optional ok-if-exists
1631 @pindex ln
1632 @kindex file-already-exists
1633 This command makes a symbolic link to @var{filename}, named
1634 @var{newname}. This is like the shell command @samp{ln -s
1635 @var{filename} @var{newname}}.
1636
1637 This function is not available on systems that don't support symbolic
1638 links.
1639 @end deffn
1640
1641 @cindex trash
1642 @vindex delete-by-moving-to-trash
1643 @deffn Command delete-file filename &optional trash
1644 @pindex rm
1645 This command deletes the file @var{filename}. If the file has
1646 multiple names, it continues to exist under the other names. If
1647 @var{filename} is a symbolic link, @code{delete-file} deletes only the
1648 symbolic link and not its target (though it does follow symbolic links
1649 at all levels of parent directories).
1650
1651 A suitable kind of @code{file-error} error is signaled if the file
1652 does not exist, or is not deletable. (On Unix and GNU/Linux, a file
1653 is deletable if its directory is writable.)
1654
1655 If the optional argument @var{trash} is non-@code{nil} and the
1656 variable @code{delete-by-moving-to-trash} is non-@code{nil}, this
1657 command moves the file into the system Trash instead of deleting it.
1658 @xref{Misc File Ops,,Miscellaneous File Operations, emacs, The GNU
1659 Emacs Manual}. When called interactively, @var{trash} is @code{t} if
1660 no prefix argument is given, and @code{nil} otherwise.
1661
1662 See also @code{delete-directory} in @ref{Create/Delete Dirs}.
1663 @end deffn
1664
1665 @cindex file permissions, setting
1666 @cindex permissions, file
1667 @cindex file modes, setting
1668 @deffn Command set-file-modes filename mode
1669 This function sets the @dfn{file mode} (or @dfn{permissions}) of
1670 @var{filename} to @var{mode}. It recursively follows symbolic links
1671 at all levels for @var{filename}.
1672
1673 If called non-interactively, @var{mode} must be an integer. Only the
1674 lowest 12 bits of the integer are used; on most systems, only the
1675 lowest 9 bits are meaningful. You can use the Lisp construct for
1676 octal numbers to enter @var{mode}. For example,
1677
1678 @example
1679 (set-file-modes #o644)
1680 @end example
1681
1682 @noindent
1683 specifies that the file should be readable and writable for its owner,
1684 readable for group members, and readable for all other users.
1685 @xref{File permissions,,, coreutils, The @sc{gnu} @code{Coreutils}
1686 Manual}, for a description of mode bit specifications.
1687
1688 Interactively, @var{mode} is read from the minibuffer using
1689 @code{read-file-modes} (see below), which lets the user type in either
1690 an integer or a string representing the permissions symbolically.
1691
1692 @xref{File Attributes}, for the function @code{file-modes}, which
1693 returns the permissions of a file.
1694 @end deffn
1695
1696 @defun set-default-file-modes mode
1697 @cindex umask
1698 This function sets the default permissions for new files created by
1699 Emacs and its subprocesses. Every file created with Emacs initially
1700 has these permissions, or a subset of them (@code{write-region} will
1701 not grant execute permissions even if the default file permissions
1702 allow execution). On Unix and GNU/Linux, the default permissions are
1703 given by the bitwise complement of the @samp{umask} value.
1704
1705 The argument @var{mode} should be an integer which specifies the
1706 permissions, similar to @code{set-file-modes} above. Only the lowest
1707 9 bits are meaningful.
1708
1709 The default file permissions have no effect when you save a modified
1710 version of an existing file; saving a file preserves its existing
1711 permissions.
1712 @end defun
1713
1714 @defmac with-file-modes mode body@dots{}
1715 This macro evaluates the @var{body} forms with the default
1716 permissions for new files temporarily set to @var{modes} (whose value
1717 is as for @code{set-file-modes} above). When finished, it restores
1718 the original default file permissions, and returns the value of the
1719 last form in @var{body}.
1720
1721 This is useful for creating private files, for example.
1722 @end defmac
1723
1724 @defun default-file-modes
1725 This function returns the default file permissions, as an integer.
1726 @end defun
1727
1728 @defun read-file-modes &optional prompt base-file
1729 This function reads a set of file mode bits from the minibuffer. The
1730 first optional argument @var{prompt} specifies a non-default prompt.
1731 Second second optional argument @var{base-file} is the name of a file
1732 on whose permissions to base the mode bits that this function returns,
1733 if what the user types specifies mode bits relative to permissions of
1734 an existing file.
1735
1736 If user input represents an octal number, this function returns that
1737 number. If it is a complete symbolic specification of mode bits, as
1738 in @code{"u=rwx"}, the function converts it to the equivalent numeric
1739 value using @code{file-modes-symbolic-to-number} and returns the
1740 result. If the specification is relative, as in @code{"o+g"}, then
1741 the permissions on which the specification is based are taken from the
1742 mode bits of @var{base-file}. If @var{base-file} is omitted or
1743 @code{nil}, the function uses @code{0} as the base mode bits. The
1744 complete and relative specifications can be combined, as in
1745 @code{"u+r,g+rx,o+r,g-w"}. @xref{File permissions,,, coreutils, The
1746 @sc{gnu} @code{Coreutils} Manual}, for a description of file mode
1747 specifications.
1748 @end defun
1749
1750 @defun file-modes-symbolic-to-number modes &optional base-modes
1751 This function converts a symbolic file mode specification in
1752 @var{modes} into the equivalent integer. If the symbolic
1753 specification is based on an existing file, that file's mode bits are
1754 taken from the optional argument @var{base-modes}; if that argument is
1755 omitted or @code{nil}, it defaults to 0, i.e., no access rights at
1756 all.
1757 @end defun
1758
1759 @defun set-file-times filename &optional time
1760 This function sets the access and modification times of @var{filename}
1761 to @var{time}. The return value is @code{t} if the times are successfully
1762 set, otherwise it is @code{nil}. @var{time} defaults to the current
1763 time and must be in the format returned by @code{current-time}
1764 (@pxref{Time of Day}).
1765 @end defun
1766
1767 @defun set-file-extended-attributes filename attribute-alist
1768 This function sets the Emacs-recognized extended file attributes for
1769 @code{filename}. The second argument @var{attribute-alist} should be
1770 an alist of the same form returned by @code{file-extended-attributes}.
1771 The return value is @code{t} if the attributes are successfully set,
1772 otherwise it is @code{nil}.
1773 @xref{Extended Attributes}.
1774 @end defun
1775
1776 @defun set-file-selinux-context filename context
1777 This function sets the SELinux security context for @var{filename} to
1778 @var{context}. The @var{context} argument should be a list
1779 @code{(@var{user} @var{role} @var{type} @var{range})}, where each
1780 element is a string. @xref{Extended Attributes}.
1781
1782 The function returns @code{t} if it succeeds in setting the SELinux
1783 context of @var{filename}. It returns @code{nil} if the context was
1784 not set (e.g., if SELinux is disabled, or if Emacs was compiled
1785 without SELinux support).
1786 @end defun
1787
1788 @defun set-file-acl filename acl
1789 This function sets the Access Control List for @var{filename} to
1790 @var{acl}. The @var{acl} argument should have the same form returned
1791 by the function @code{file-acl}. @xref{Extended Attributes}.
1792
1793 The function returns @code{t} if it successfully sets the ACL of
1794 @var{filename}, @code{nil} otherwise.
1795 @end defun
1796
1797 @node File Names
1798 @section File Names
1799 @cindex file names
1800
1801 Files are generally referred to by their names, in Emacs as elsewhere.
1802 File names in Emacs are represented as strings. The functions that
1803 operate on a file all expect a file name argument.
1804
1805 In addition to operating on files themselves, Emacs Lisp programs
1806 often need to operate on file names; i.e., to take them apart and to use
1807 part of a name to construct related file names. This section describes
1808 how to manipulate file names.
1809
1810 The functions in this section do not actually access files, so they
1811 can operate on file names that do not refer to an existing file or
1812 directory.
1813
1814 @findex cygwin-convert-file-name-from-windows
1815 @findex cygwin-convert-file-name-to-windows
1816 @cindex MS-Windows file-name syntax
1817 @cindex converting file names from/to MS-Windows syntax
1818 On MS-DOS and MS-Windows, these functions (like the function that
1819 actually operate on files) accept MS-DOS or MS-Windows file-name syntax,
1820 where backslashes separate the components, as well as Unix syntax; but
1821 they always return Unix syntax. This enables Lisp programs to specify
1822 file names in Unix syntax and work properly on all systems without
1823 change.@footnote{In MS-Windows versions of Emacs compiled for the Cygwin
1824 environment, you can use the functions
1825 @code{cygwin-convert-file-name-to-windows} and
1826 @code{cygwin-convert-file-name-from-windows} to convert between the
1827 two file-name syntaxes.}
1828
1829 @menu
1830 * File Name Components:: The directory part of a file name, and the rest.
1831 * Relative File Names:: Some file names are relative to a current directory.
1832 * Directory Names:: A directory's name as a directory
1833 is different from its name as a file.
1834 * File Name Expansion:: Converting relative file names to absolute ones.
1835 * Unique File Names:: Generating names for temporary files.
1836 * File Name Completion:: Finding the completions for a given file name.
1837 * Standard File Names:: If your package uses a fixed file name,
1838 how to handle various operating systems simply.
1839 @end menu
1840
1841 @node File Name Components
1842 @subsection File Name Components
1843 @cindex directory part (of file name)
1844 @cindex nondirectory part (of file name)
1845 @cindex version number (in file name)
1846
1847 The operating system groups files into directories. To specify a
1848 file, you must specify the directory and the file's name within that
1849 directory. Therefore, Emacs considers a file name as having two main
1850 parts: the @dfn{directory name} part, and the @dfn{nondirectory} part
1851 (or @dfn{file name within the directory}). Either part may be empty.
1852 Concatenating these two parts reproduces the original file name.
1853
1854 On most systems, the directory part is everything up to and including
1855 the last slash (backslash is also allowed in input on MS-DOS or
1856 MS-Windows); the nondirectory part is the rest.
1857
1858 For some purposes, the nondirectory part is further subdivided into
1859 the name proper and the @dfn{version number}. On most systems, only
1860 backup files have version numbers in their names.
1861
1862 @defun file-name-directory filename
1863 This function returns the directory part of @var{filename}, as a
1864 directory name (@pxref{Directory Names}), or @code{nil} if
1865 @var{filename} does not include a directory part.
1866
1867 On GNU and Unix systems, a string returned by this function always
1868 ends in a slash. On MS-DOS it can also end in a colon.
1869
1870 @example
1871 @group
1872 (file-name-directory "lewis/foo") ; @r{Unix example}
1873 @result{} "lewis/"
1874 @end group
1875 @group
1876 (file-name-directory "foo") ; @r{Unix example}
1877 @result{} nil
1878 @end group
1879 @end example
1880 @end defun
1881
1882 @defun file-name-nondirectory filename
1883 This function returns the nondirectory part of @var{filename}.
1884
1885 @example
1886 @group
1887 (file-name-nondirectory "lewis/foo")
1888 @result{} "foo"
1889 @end group
1890 @group
1891 (file-name-nondirectory "foo")
1892 @result{} "foo"
1893 @end group
1894 @group
1895 (file-name-nondirectory "lewis/")
1896 @result{} ""
1897 @end group
1898 @end example
1899 @end defun
1900
1901 @defun file-name-sans-versions filename &optional keep-backup-version
1902 This function returns @var{filename} with any file version numbers,
1903 backup version numbers, or trailing tildes discarded.
1904
1905 If @var{keep-backup-version} is non-@code{nil}, then true file version
1906 numbers understood as such by the file system are discarded from the
1907 return value, but backup version numbers are kept.
1908
1909 @example
1910 @group
1911 (file-name-sans-versions "~rms/foo.~1~")
1912 @result{} "~rms/foo"
1913 @end group
1914 @group
1915 (file-name-sans-versions "~rms/foo~")
1916 @result{} "~rms/foo"
1917 @end group
1918 @group
1919 (file-name-sans-versions "~rms/foo")
1920 @result{} "~rms/foo"
1921 @end group
1922 @end example
1923 @end defun
1924
1925 @defun file-name-extension filename &optional period
1926 This function returns @var{filename}'s final extension, if any,
1927 after applying @code{file-name-sans-versions} to remove any
1928 version/backup part. The extension, in a file name, is the part that
1929 follows the last @samp{.} in the last name component (minus any
1930 version/backup part).
1931
1932 This function returns @code{nil} for extensionless file names such as
1933 @file{foo}. It returns @code{""} for null extensions, as in
1934 @file{foo.}. If the last component of a file name begins with a
1935 @samp{.}, that @samp{.} doesn't count as the beginning of an
1936 extension. Thus, @file{.emacs}'s extension is @code{nil}, not
1937 @samp{.emacs}.
1938
1939 If @var{period} is non-@code{nil}, then the returned value includes
1940 the period that delimits the extension, and if @var{filename} has no
1941 extension, the value is @code{""}.
1942 @end defun
1943
1944 @defun file-name-sans-extension filename
1945 This function returns @var{filename} minus its extension, if any. The
1946 version/backup part, if present, is only removed if the file has an
1947 extension. For example,
1948
1949 @example
1950 (file-name-sans-extension "foo.lose.c")
1951 @result{} "foo.lose"
1952 (file-name-sans-extension "big.hack/foo")
1953 @result{} "big.hack/foo"
1954 (file-name-sans-extension "/my/home/.emacs")
1955 @result{} "/my/home/.emacs"
1956 (file-name-sans-extension "/my/home/.emacs.el")
1957 @result{} "/my/home/.emacs"
1958 (file-name-sans-extension "~/foo.el.~3~")
1959 @result{} "~/foo"
1960 (file-name-sans-extension "~/foo.~3~")
1961 @result{} "~/foo.~3~"
1962 @end example
1963
1964 Note that the @samp{.~3~} in the two last examples is the backup part,
1965 not an extension.
1966 @end defun
1967
1968 @defun file-name-base &optional filename
1969 This function is the composition of @code{file-name-sans-extension}
1970 and @code{file-name-nondirectory}. For example,
1971
1972 @example
1973 (file-name-base "/my/home/foo.c")
1974 @result{} "foo"
1975 @end example
1976
1977 The @var{filename} argument defaults to @code{buffer-file-name}.
1978 @end defun
1979
1980 @node Relative File Names
1981 @subsection Absolute and Relative File Names
1982 @cindex absolute file name
1983 @cindex relative file name
1984
1985 All the directories in the file system form a tree starting at the
1986 root directory. A file name can specify all the directory names
1987 starting from the root of the tree; then it is called an
1988 @dfn{absolute} file name. Or it can specify the position of the file
1989 in the tree relative to a default directory; then it is called a
1990 @dfn{relative} file name. On Unix and GNU/Linux, an absolute file
1991 name starts with a @samp{/} or a @samp{~}
1992 (@pxref{abbreviate-file-name}), and a relative one does not. On
1993 MS-DOS and MS-Windows, an absolute file name starts with a slash or a
1994 backslash, or with a drive specification @samp{@var{x}:/}, where
1995 @var{x} is the @dfn{drive letter}.
1996
1997 @defun file-name-absolute-p filename
1998 This function returns @code{t} if file @var{filename} is an absolute
1999 file name, @code{nil} otherwise.
2000
2001 @example
2002 @group
2003 (file-name-absolute-p "~rms/foo")
2004 @result{} t
2005 @end group
2006 @group
2007 (file-name-absolute-p "rms/foo")
2008 @result{} nil
2009 @end group
2010 @group
2011 (file-name-absolute-p "/user/rms/foo")
2012 @result{} t
2013 @end group
2014 @end example
2015 @end defun
2016
2017 Given a possibly relative file name, you can convert it to an
2018 absolute name using @code{expand-file-name} (@pxref{File Name
2019 Expansion}). This function converts absolute file names to relative
2020 names:
2021
2022 @defun file-relative-name filename &optional directory
2023 This function tries to return a relative name that is equivalent to
2024 @var{filename}, assuming the result will be interpreted relative to
2025 @var{directory} (an absolute directory name or directory file name).
2026 If @var{directory} is omitted or @code{nil}, it defaults to the
2027 current buffer's default directory.
2028
2029 On some operating systems, an absolute file name begins with a device
2030 name. On such systems, @var{filename} has no relative equivalent based
2031 on @var{directory} if they start with two different device names. In
2032 this case, @code{file-relative-name} returns @var{filename} in absolute
2033 form.
2034
2035 @example
2036 (file-relative-name "/foo/bar" "/foo/")
2037 @result{} "bar"
2038 (file-relative-name "/foo/bar" "/hack/")
2039 @result{} "../foo/bar"
2040 @end example
2041 @end defun
2042
2043 @node Directory Names
2044 @subsection Directory Names
2045 @cindex directory name
2046 @cindex directory file name
2047 @cindex file name of directory
2048
2049 A @dfn{directory name} is the name of a directory. A directory is
2050 actually a kind of file, so it has a file name (called the
2051 @dfn{directory file name}, which is related to the directory name but
2052 not identical to it. (This is not quite the same as the usual Unix
2053 terminology.) These two different names for the same entity are
2054 related by a syntactic transformation. On GNU and Unix systems, this
2055 is simple: a directory name ends in a slash, whereas the directory
2056 file name lacks that slash. On MS-DOS the relationship is more
2057 complicated.
2058
2059 The difference between directory name and directory file name is
2060 subtle but crucial. When an Emacs variable or function argument is
2061 described as being a directory name, a directory file name is not
2062 acceptable. When @code{file-name-directory} returns a string, that is
2063 always a directory name.
2064
2065 The following two functions convert between directory names and
2066 directory file names. They do nothing special with environment
2067 variable substitutions such as @samp{$HOME}, and the constructs
2068 @samp{~}, @samp{.} and @samp{..}.
2069
2070 @defun file-name-as-directory filename
2071 This function returns a string representing @var{filename} in a form
2072 that the operating system will interpret as the name of a directory (a
2073 directory name). On most systems, this means appending a slash to the
2074 string (if it does not already end in one).
2075
2076 @example
2077 @group
2078 (file-name-as-directory "~rms/lewis")
2079 @result{} "~rms/lewis/"
2080 @end group
2081 @end example
2082 @end defun
2083
2084 @defun directory-name-p filename
2085 This function returns non-@code{nil} if @var{filename} ends with a
2086 directory separator character. This is the forward slash @samp{/} on
2087 Unix and GNU systems; MS-Windows and MS-DOS recognize both the forward
2088 slash and the backslash @samp{\} as directory separators.
2089 @end defun
2090
2091 @defun directory-file-name dirname
2092 This function returns a string representing @var{dirname} in a form
2093 that the operating system will interpret as the name of a file (a
2094 directory file name). On most systems, this means removing the final
2095 slash (or backslash) from the string.
2096
2097 @example
2098 @group
2099 (directory-file-name "~lewis/")
2100 @result{} "~lewis"
2101 @end group
2102 @end example
2103 @end defun
2104
2105 Given a directory name, you can combine it with a relative file name
2106 using @code{concat}:
2107
2108 @example
2109 (concat @var{dirname} @var{relfile})
2110 @end example
2111
2112 @noindent
2113 Be sure to verify that the file name is relative before doing that.
2114 If you use an absolute file name, the results could be syntactically
2115 invalid or refer to the wrong file.
2116
2117 If you want to use a directory file name in making such a
2118 combination, you must first convert it to a directory name using
2119 @code{file-name-as-directory}:
2120
2121 @example
2122 (concat (file-name-as-directory @var{dirfile}) @var{relfile})
2123 @end example
2124
2125 @noindent
2126 Don't try concatenating a slash by hand, as in
2127
2128 @example
2129 ;;; @r{Wrong!}
2130 (concat @var{dirfile} "/" @var{relfile})
2131 @end example
2132
2133 @noindent
2134 because this is not portable. Always use
2135 @code{file-name-as-directory}.
2136
2137 To avoid the issues mentioned above, or if the @var{dirname} value
2138 might be nil (for example, from an element of @code{load-path}), use:
2139
2140 @example
2141 (expand-file-name @var{relfile} @var{dirname})
2142 @end example
2143
2144 To convert a directory name to its abbreviation, use this
2145 function:
2146
2147 @cindex file name abbreviations
2148 @cindex abbreviated file names
2149 @defun abbreviate-file-name filename
2150 @anchor{abbreviate-file-name}
2151 This function returns an abbreviated form of @var{filename}. It
2152 applies the abbreviations specified in @code{directory-abbrev-alist}
2153 (@pxref{File Aliases,,File Aliases, emacs, The GNU Emacs Manual}),
2154 then substitutes @samp{~} for the user's home directory if the
2155 argument names a file in the home directory or one of its
2156 subdirectories. If the home directory is a root directory, it is not
2157 replaced with @samp{~}, because this does not make the result shorter
2158 on many systems.
2159
2160 You can use this function for directory names and for file names,
2161 because it recognizes abbreviations even as part of the name.
2162 @end defun
2163
2164 @node File Name Expansion
2165 @subsection Functions that Expand Filenames
2166 @cindex expansion of file names
2167
2168 @dfn{Expanding} a file name means converting a relative file name to
2169 an absolute one. Since this is done relative to a default directory,
2170 you must specify the default directory name as well as the file name
2171 to be expanded. It also involves expanding abbreviations like
2172 @file{~/}
2173 @ifnottex
2174 (@pxref{abbreviate-file-name}),
2175 @end ifnottex
2176 and eliminating redundancies like @file{./} and @file{@var{name}/../}.
2177
2178 @defun expand-file-name filename &optional directory
2179 This function converts @var{filename} to an absolute file name. If
2180 @var{directory} is supplied, it is the default directory to start with
2181 if @var{filename} is relative. (The value of @var{directory} should
2182 itself be an absolute directory name or directory file name; it may
2183 start with @samp{~}.) Otherwise, the current buffer's value of
2184 @code{default-directory} is used. For example:
2185
2186 @example
2187 @group
2188 (expand-file-name "foo")
2189 @result{} "/xcssun/users/rms/lewis/foo"
2190 @end group
2191 @group
2192 (expand-file-name "../foo")
2193 @result{} "/xcssun/users/rms/foo"
2194 @end group
2195 @group
2196 (expand-file-name "foo" "/usr/spool/")
2197 @result{} "/usr/spool/foo"
2198 @end group
2199 @end example
2200
2201 If the part of the combined file name before the first slash is
2202 @samp{~}, it expands to the value of the @env{HOME} environment
2203 variable (usually your home directory). If the part before the first
2204 slash is @samp{~@var{user}} and if @var{user} is a valid login name,
2205 it expands to @var{user}'s home directory.
2206
2207 Filenames containing @samp{.} or @samp{..} are simplified to their
2208 canonical form:
2209
2210 @example
2211 @group
2212 (expand-file-name "bar/../foo")
2213 @result{} "/xcssun/users/rms/lewis/foo"
2214 @end group
2215 @end example
2216
2217 In some cases, a leading @samp{..} component can remain in the output:
2218
2219 @example
2220 @group
2221 (expand-file-name "../home" "/")
2222 @result{} "/../home"
2223 @end group
2224 @end example
2225
2226 @noindent
2227 This is for the sake of filesystems that have the concept of a
2228 superroot above the root directory @file{/}. On other filesystems,
2229 @file{/../} is interpreted exactly the same as @file{/}.
2230
2231 Note that @code{expand-file-name} does @emph{not} expand environment
2232 variables; only @code{substitute-in-file-name} does that:
2233
2234 @example
2235 @group
2236 (expand-file-name "$HOME/foo")
2237 @result{} "/xcssun/users/rms/lewis/$HOME/foo"
2238 @end group
2239 @end example
2240
2241 Note also that @code{expand-file-name} does not follow symbolic links
2242 at any level. This results in a difference between the way
2243 @code{file-truename} and @code{expand-file-name} treat @samp{..}.
2244 Assuming that @samp{/tmp/bar} is a symbolic link to the directory
2245 @samp{/tmp/foo/bar} we get:
2246
2247 @example
2248 @group
2249 (file-truename "/tmp/bar/../myfile")
2250 @result{} "/tmp/foo/myfile"
2251 @end group
2252 @group
2253 (expand-file-name "/tmp/bar/../myfile")
2254 @result{} "/tmp/myfile"
2255 @end group
2256 @end example
2257
2258 If you may need to follow symbolic links preceding @samp{..}, you
2259 should make sure to call @code{file-truename} without prior direct or
2260 indirect calls to @code{expand-file-name}. @xref{Truenames}.
2261 @end defun
2262
2263 @defvar default-directory
2264 The value of this buffer-local variable is the default directory for the
2265 current buffer. It should be an absolute directory name; it may start
2266 with @samp{~}. This variable is buffer-local in every buffer.
2267
2268 @code{expand-file-name} uses the default directory when its second
2269 argument is @code{nil}.
2270
2271 The value is always a string ending with a slash.
2272
2273 @example
2274 @group
2275 default-directory
2276 @result{} "/user/lewis/manual/"
2277 @end group
2278 @end example
2279 @end defvar
2280
2281 @defun substitute-in-file-name filename
2282 @anchor{Definition of substitute-in-file-name}
2283 This function replaces environment variable references in
2284 @var{filename} with the environment variable values. Following
2285 standard Unix shell syntax, @samp{$} is the prefix to substitute an
2286 environment variable value. If the input contains @samp{$$}, that is
2287 converted to @samp{$}; this gives the user a way to quote a
2288 @samp{$}.
2289
2290 The environment variable name is the series of alphanumeric characters
2291 (including underscores) that follow the @samp{$}. If the character following
2292 the @samp{$} is a @samp{@{}, then the variable name is everything up to the
2293 matching @samp{@}}.
2294
2295 Calling @code{substitute-in-file-name} on output produced by
2296 @code{substitute-in-file-name} tends to give incorrect results. For
2297 instance, use of @samp{$$} to quote a single @samp{$} won't work
2298 properly, and @samp{$} in an environment variable's value could lead
2299 to repeated substitution. Therefore, programs that call this function
2300 and put the output where it will be passed to this function need to
2301 double all @samp{$} characters to prevent subsequent incorrect
2302 results.
2303
2304 @c Wordy to avoid overfull hbox. --rjc 15mar92
2305 Here we assume that the environment variable @env{HOME}, which holds
2306 the user's home directory name, has value @samp{/xcssun/users/rms}.
2307
2308 @example
2309 @group
2310 (substitute-in-file-name "$HOME/foo")
2311 @result{} "/xcssun/users/rms/foo"
2312 @end group
2313 @end example
2314
2315 After substitution, if a @samp{~} or a @samp{/} appears immediately
2316 after another @samp{/}, the function discards everything before it (up
2317 through the immediately preceding @samp{/}).
2318
2319 @example
2320 @group
2321 (substitute-in-file-name "bar/~/foo")
2322 @result{} "~/foo"
2323 @end group
2324 @group
2325 (substitute-in-file-name "/usr/local/$HOME/foo")
2326 @result{} "/xcssun/users/rms/foo"
2327 ;; @r{@file{/usr/local/} has been discarded.}
2328 @end group
2329 @end example
2330
2331 @end defun
2332
2333 @node Unique File Names
2334 @subsection Generating Unique File Names
2335 @cindex unique file names
2336 @cindex temporary files
2337
2338 Some programs need to write temporary files. Here is the usual way to
2339 construct a name for such a file:
2340
2341 @example
2342 (make-temp-file @var{name-of-application})
2343 @end example
2344
2345 @noindent
2346 The job of @code{make-temp-file} is to prevent two different users or
2347 two different jobs from trying to use the exact same file name.
2348
2349 @defun make-temp-file prefix &optional dir-flag suffix
2350 This function creates a temporary file and returns its name. Emacs
2351 creates the temporary file's name by adding to @var{prefix} some
2352 random characters that are different in each Emacs job. The result is
2353 guaranteed to be a newly created empty file. On MS-DOS, this function
2354 can truncate the @var{string} prefix to fit into the 8+3 file-name
2355 limits. If @var{prefix} is a relative file name, it is expanded
2356 against @code{temporary-file-directory}.
2357
2358 @example
2359 @group
2360 (make-temp-file "foo")
2361 @result{} "/tmp/foo232J6v"
2362 @end group
2363 @end example
2364
2365 When @code{make-temp-file} returns, the file has been created and is
2366 empty. At that point, you should write the intended contents into the
2367 file.
2368
2369 If @var{dir-flag} is non-@code{nil}, @code{make-temp-file} creates an
2370 empty directory instead of an empty file. It returns the file name,
2371 not the directory name, of that directory. @xref{Directory Names}.
2372
2373 If @var{suffix} is non-@code{nil}, @code{make-temp-file} adds it at
2374 the end of the file name.
2375
2376 To prevent conflicts among different libraries running in the same
2377 Emacs, each Lisp program that uses @code{make-temp-file} should have its
2378 own @var{prefix}. The number added to the end of @var{prefix}
2379 distinguishes between the same application running in different Emacs
2380 jobs. Additional added characters permit a large number of distinct
2381 names even in one Emacs job.
2382 @end defun
2383
2384 The default directory for temporary files is controlled by the
2385 variable @code{temporary-file-directory}. This variable gives the user
2386 a uniform way to specify the directory for all temporary files. Some
2387 programs use @code{small-temporary-file-directory} instead, if that is
2388 non-@code{nil}. To use it, you should expand the prefix against
2389 the proper directory before calling @code{make-temp-file}.
2390
2391 @defopt temporary-file-directory
2392 @cindex @env{TMPDIR} environment variable
2393 @cindex @env{TMP} environment variable
2394 @cindex @env{TEMP} environment variable
2395 This variable specifies the directory name for creating temporary files.
2396 Its value should be a directory name (@pxref{Directory Names}), but it
2397 is good for Lisp programs to cope if the value is a directory's file
2398 name instead. Using the value as the second argument to
2399 @code{expand-file-name} is a good way to achieve that.
2400
2401 The default value is determined in a reasonable way for your operating
2402 system; it is based on the @env{TMPDIR}, @env{TMP} and @env{TEMP}
2403 environment variables, with a fall-back to a system-dependent name if
2404 none of these variables is defined.
2405
2406 Even if you do not use @code{make-temp-file} to create the temporary
2407 file, you should still use this variable to decide which directory to
2408 put the file in. However, if you expect the file to be small, you
2409 should use @code{small-temporary-file-directory} first if that is
2410 non-@code{nil}.
2411 @end defopt
2412
2413 @defopt small-temporary-file-directory
2414 This variable specifies the directory name for
2415 creating certain temporary files, which are likely to be small.
2416
2417 If you want to write a temporary file which is likely to be small, you
2418 should compute the directory like this:
2419
2420 @example
2421 (make-temp-file
2422 (expand-file-name @var{prefix}
2423 (or small-temporary-file-directory
2424 temporary-file-directory)))
2425 @end example
2426 @end defopt
2427
2428 @defun make-temp-name base-name
2429 This function generates a string that can be used as a unique file
2430 name. The name starts with @var{base-name}, and has several random
2431 characters appended to it, which are different in each Emacs job. It
2432 is like @code{make-temp-file} except that (i) it just constructs a
2433 name, and does not create a file, and (ii) @var{base-name} should be
2434 an absolute file name (on MS-DOS, this function can truncate
2435 @var{base-name} to fit into the 8+3 file-name limits).
2436
2437 @strong{Warning:} In most cases, you should not use this function; use
2438 @code{make-temp-file} instead! This function is susceptible to a race
2439 condition, between the @code{make-temp-name} call and the creation of
2440 the file, which in some cases may cause a security hole.
2441 @end defun
2442
2443 @node File Name Completion
2444 @subsection File Name Completion
2445 @cindex file name completion subroutines
2446 @cindex completion, file name
2447
2448 This section describes low-level subroutines for completing a file
2449 name. For higher level functions, see @ref{Reading File Names}.
2450
2451 @defun file-name-all-completions partial-filename directory
2452 This function returns a list of all possible completions for a file
2453 whose name starts with @var{partial-filename} in directory
2454 @var{directory}. The order of the completions is the order of the files
2455 in the directory, which is unpredictable and conveys no useful
2456 information.
2457
2458 The argument @var{partial-filename} must be a file name containing no
2459 directory part and no slash (or backslash on some systems). The current
2460 buffer's default directory is prepended to @var{directory}, if
2461 @var{directory} is not absolute.
2462
2463 In the following example, suppose that @file{~rms/lewis} is the current
2464 default directory, and has five files whose names begin with @samp{f}:
2465 @file{foo}, @file{file~}, @file{file.c}, @file{file.c.~1~}, and
2466 @file{file.c.~2~}.
2467
2468 @example
2469 @group
2470 (file-name-all-completions "f" "")
2471 @result{} ("foo" "file~" "file.c.~2~"
2472 "file.c.~1~" "file.c")
2473 @end group
2474
2475 @group
2476 (file-name-all-completions "fo" "")
2477 @result{} ("foo")
2478 @end group
2479 @end example
2480 @end defun
2481
2482 @defun file-name-completion filename directory &optional predicate
2483 This function completes the file name @var{filename} in directory
2484 @var{directory}. It returns the longest prefix common to all file names
2485 in directory @var{directory} that start with @var{filename}. If
2486 @var{predicate} is non-@code{nil} then it ignores possible completions
2487 that don't satisfy @var{predicate}, after calling that function
2488 with one argument, the expanded absolute file name.
2489
2490 If only one match exists and @var{filename} matches it exactly, the
2491 function returns @code{t}. The function returns @code{nil} if directory
2492 @var{directory} contains no name starting with @var{filename}.
2493
2494 In the following example, suppose that the current default directory
2495 has five files whose names begin with @samp{f}: @file{foo},
2496 @file{file~}, @file{file.c}, @file{file.c.~1~}, and
2497 @file{file.c.~2~}.
2498
2499 @example
2500 @group
2501 (file-name-completion "fi" "")
2502 @result{} "file"
2503 @end group
2504
2505 @group
2506 (file-name-completion "file.c.~1" "")
2507 @result{} "file.c.~1~"
2508 @end group
2509
2510 @group
2511 (file-name-completion "file.c.~1~" "")
2512 @result{} t
2513 @end group
2514
2515 @group
2516 (file-name-completion "file.c.~3" "")
2517 @result{} nil
2518 @end group
2519 @end example
2520 @end defun
2521
2522 @defopt completion-ignored-extensions
2523 @code{file-name-completion} usually ignores file names that end in any
2524 string in this list. It does not ignore them when all the possible
2525 completions end in one of these suffixes. This variable has no effect
2526 on @code{file-name-all-completions}.
2527
2528 A typical value might look like this:
2529
2530 @example
2531 @group
2532 completion-ignored-extensions
2533 @result{} (".o" ".elc" "~" ".dvi")
2534 @end group
2535 @end example
2536
2537 If an element of @code{completion-ignored-extensions} ends in a slash
2538 @samp{/}, it signals a directory. The elements which do @emph{not} end
2539 in a slash will never match a directory; thus, the above value will not
2540 filter out a directory named @file{foo.elc}.
2541 @end defopt
2542
2543 @node Standard File Names
2544 @subsection Standard File Names
2545
2546 Sometimes, an Emacs Lisp program needs to specify a standard file
2547 name for a particular use---typically, to hold configuration data
2548 specified by the current user. Usually, such files should be located
2549 in the directory specified by @code{user-emacs-directory}, which is
2550 @file{~/.emacs.d} by default (@pxref{Init File}). For example, abbrev
2551 definitions are stored by default in @file{~/.emacs.d/abbrev_defs}.
2552 The easiest way to specify such a file name is to use the function
2553 @code{locate-user-emacs-file}.
2554
2555 @defun locate-user-emacs-file base-name &optional old-name
2556 This function returns an absolute file name for an Emacs-specific
2557 configuration or data file. The argument @file{base-name} should be a
2558 relative file name. The return value is the absolute name of a file
2559 in the directory specified by @code{user-emacs-directory}; if that
2560 directory does not exist, this function creates it.
2561
2562 If the optional argument @var{old-name} is non-@code{nil}, it
2563 specifies a file in the user's home directory,
2564 @file{~/@var{old-name}}. If such a file exists, the return value is
2565 the absolute name of that file, instead of the file specified by
2566 @var{base-name}. This argument is intended to be used by Emacs
2567 packages to provide backward compatibility. For instance, prior to
2568 the introduction of @code{user-emacs-directory}, the abbrev file was
2569 located in @file{~/.abbrev_defs}. Here is the definition of
2570 @code{abbrev-file-name}:
2571
2572 @example
2573 (defcustom abbrev-file-name
2574 (locate-user-emacs-file "abbrev_defs" ".abbrev_defs")
2575 "Default name of file from which to read abbrevs."
2576 @dots{}
2577 :type 'file)
2578 @end example
2579 @end defun
2580
2581 A lower-level function for standardizing file names, which
2582 @code{locate-user-emacs-file} uses as a subroutine, is
2583 @code{convert-standard-filename}.
2584
2585 @defun convert-standard-filename filename
2586 This function returns a file name based on @var{filename}, which fits
2587 the conventions of the current operating system.
2588
2589 On GNU and Unix systems, this simply returns @var{filename}. On other
2590 operating systems, it may enforce system-specific file name
2591 conventions; for example, on MS-DOS this function performs a variety
2592 of changes to enforce MS-DOS file name limitations, including
2593 converting any leading @samp{.} to @samp{_} and truncating to three
2594 characters after the @samp{.}.
2595
2596 The recommended way to use this function is to specify a name which
2597 fits the conventions of GNU and Unix systems, and pass it to
2598 @code{convert-standard-filename}.
2599 @end defun
2600
2601 @node Contents of Directories
2602 @section Contents of Directories
2603 @cindex directory-oriented functions
2604 @cindex file names in directory
2605
2606 A directory is a kind of file that contains other files entered under
2607 various names. Directories are a feature of the file system.
2608
2609 Emacs can list the names of the files in a directory as a Lisp list,
2610 or display the names in a buffer using the @code{ls} shell command. In
2611 the latter case, it can optionally display information about each file,
2612 depending on the options passed to the @code{ls} command.
2613
2614 @defun directory-files directory &optional full-name match-regexp nosort
2615 This function returns a list of the names of the files in the directory
2616 @var{directory}. By default, the list is in alphabetical order.
2617
2618 If @var{full-name} is non-@code{nil}, the function returns the files'
2619 absolute file names. Otherwise, it returns the names relative to
2620 the specified directory.
2621
2622 If @var{match-regexp} is non-@code{nil}, this function returns only
2623 those file names that contain a match for that regular expression---the
2624 other file names are excluded from the list. On case-insensitive
2625 filesystems, the regular expression matching is case-insensitive.
2626
2627 @c Emacs 19 feature
2628 If @var{nosort} is non-@code{nil}, @code{directory-files} does not sort
2629 the list, so you get the file names in no particular order. Use this if
2630 you want the utmost possible speed and don't care what order the files
2631 are processed in. If the order of processing is visible to the user,
2632 then the user will probably be happier if you do sort the names.
2633
2634 @example
2635 @group
2636 (directory-files "~lewis")
2637 @result{} ("#foo#" "#foo.el#" "." ".."
2638 "dired-mods.el" "files.texi"
2639 "files.texi.~1~")
2640 @end group
2641 @end example
2642
2643 An error is signaled if @var{directory} is not the name of a directory
2644 that can be read.
2645 @end defun
2646
2647 @defun directory-files-recursively directory regexp &optional include-directories
2648 Return all files under @var{directory} whose names match @var{regexp}.
2649 This function searches the specified @var{directory} and its
2650 sub-directories, recursively, for files whose basenames (i.e., without
2651 the leading directories) match the specified @var{regexp}, and returns
2652 a list of the absolute file names of the matching files
2653 (@pxref{Relative File Names, absolute file names}). The file names
2654 are returned in depth-first order, meaning that files in some
2655 sub-directory are returned before the files in its parent directory.
2656 In addition, matching files found in each subdirectory are sorted
2657 alphabetically by their basenames. By default, directories whose
2658 names match @var{regexp} are omitted from the list, but if the
2659 optional argument @var{include-directories} is non-@code{nil}, they
2660 are included.
2661 @end defun
2662
2663 @defun directory-files-and-attributes directory &optional full-name match-regexp nosort id-format
2664 This is similar to @code{directory-files} in deciding which files
2665 to report on and how to report their names. However, instead
2666 of returning a list of file names, it returns for each file a
2667 list @code{(@var{filename} . @var{attributes})}, where @var{attributes}
2668 is what @code{file-attributes} would return for that file.
2669 The optional argument @var{id-format} has the same meaning as the
2670 corresponding argument to @code{file-attributes} (@pxref{Definition
2671 of file-attributes}).
2672 @end defun
2673
2674 @defun file-expand-wildcards pattern &optional full
2675 This function expands the wildcard pattern @var{pattern}, returning
2676 a list of file names that match it.
2677
2678 If @var{pattern} is written as an absolute file name,
2679 the values are absolute also.
2680
2681 If @var{pattern} is written as a relative file name, it is interpreted
2682 relative to the current default directory. The file names returned are
2683 normally also relative to the current default directory. However, if
2684 @var{full} is non-@code{nil}, they are absolute.
2685 @end defun
2686
2687 @defun insert-directory file switches &optional wildcard full-directory-p
2688 This function inserts (in the current buffer) a directory listing for
2689 directory @var{file}, formatted with @code{ls} according to
2690 @var{switches}. It leaves point after the inserted text.
2691 @var{switches} may be a string of options, or a list of strings
2692 representing individual options.
2693
2694 The argument @var{file} may be either a directory name or a file
2695 specification including wildcard characters. If @var{wildcard} is
2696 non-@code{nil}, that means treat @var{file} as a file specification with
2697 wildcards.
2698
2699 If @var{full-directory-p} is non-@code{nil}, that means the directory
2700 listing is expected to show the full contents of a directory. You
2701 should specify @code{t} when @var{file} is a directory and switches do
2702 not contain @samp{-d}. (The @samp{-d} option to @code{ls} says to
2703 describe a directory itself as a file, rather than showing its
2704 contents.)
2705
2706 On most systems, this function works by running a directory listing
2707 program whose name is in the variable @code{insert-directory-program}.
2708 If @var{wildcard} is non-@code{nil}, it also runs the shell specified by
2709 @code{shell-file-name}, to expand the wildcards.
2710
2711 MS-DOS and MS-Windows systems usually lack the standard Unix program
2712 @code{ls}, so this function emulates the standard Unix program @code{ls}
2713 with Lisp code.
2714
2715 As a technical detail, when @var{switches} contains the long
2716 @samp{--dired} option, @code{insert-directory} treats it specially,
2717 for the sake of dired. However, the normally equivalent short
2718 @samp{-D} option is just passed on to @code{insert-directory-program},
2719 as any other option.
2720 @end defun
2721
2722 @defvar insert-directory-program
2723 This variable's value is the program to run to generate a directory listing
2724 for the function @code{insert-directory}. It is ignored on systems
2725 which generate the listing with Lisp code.
2726 @end defvar
2727
2728 @node Create/Delete Dirs
2729 @section Creating, Copying and Deleting Directories
2730 @cindex creating, copying and deleting directories
2731 @c Emacs 19 features
2732
2733 Most Emacs Lisp file-manipulation functions get errors when used on
2734 files that are directories. For example, you cannot delete a directory
2735 with @code{delete-file}. These special functions exist to create and
2736 delete directories.
2737
2738 @findex mkdir
2739 @deffn Command make-directory dirname &optional parents
2740 This command creates a directory named @var{dirname}. If
2741 @var{parents} is non-@code{nil}, as is always the case in an
2742 interactive call, that means to create the parent directories first,
2743 if they don't already exist.
2744
2745 @code{mkdir} is an alias for this.
2746 @end deffn
2747
2748 @deffn Command copy-directory dirname newname &optional keep-time parents copy-contents
2749 This command copies the directory named @var{dirname} to
2750 @var{newname}. If @var{newname} names an existing directory,
2751 @var{dirname} will be copied to a subdirectory there.
2752
2753 It always sets the file modes of the copied files to match the
2754 corresponding original file.
2755
2756 The third argument @var{keep-time} non-@code{nil} means to preserve the
2757 modification time of the copied files. A prefix arg makes
2758 @var{keep-time} non-@code{nil}.
2759
2760 The fourth argument @var{parents} says whether to
2761 create parent directories if they don't exist. Interactively,
2762 this happens by default.
2763
2764 The fifth argument @var{copy-contents}, if non-@code{nil}, means to
2765 copy the contents of @var{dirname} directly into @var{newname} if the
2766 latter is an existing directory, instead of copying @var{dirname} into
2767 it as a subdirectory.
2768 @end deffn
2769
2770 @cindex trash
2771 @vindex delete-by-moving-to-trash
2772 @deffn Command delete-directory dirname &optional recursive trash
2773 This command deletes the directory named @var{dirname}. The function
2774 @code{delete-file} does not work for files that are directories; you
2775 must use @code{delete-directory} for them. If @var{recursive} is
2776 @code{nil}, and the directory contains any files,
2777 @code{delete-directory} signals an error.
2778
2779 @code{delete-directory} only follows symbolic links at the level of
2780 parent directories.
2781
2782 If the optional argument @var{trash} is non-@code{nil} and the
2783 variable @code{delete-by-moving-to-trash} is non-@code{nil}, this
2784 command moves the file into the system Trash instead of deleting it.
2785 @xref{Misc File Ops,,Miscellaneous File Operations, emacs, The GNU
2786 Emacs Manual}. When called interactively, @var{trash} is @code{t} if
2787 no prefix argument is given, and @code{nil} otherwise.
2788 @end deffn
2789
2790 @node Magic File Names
2791 @section Making Certain File Names ``Magic''
2792 @cindex magic file names
2793
2794 You can implement special handling for certain file names. This is
2795 called making those names @dfn{magic}. The principal use for this
2796 feature is in implementing access to remote files (@pxref{Remote Files,,
2797 Remote Files, emacs, The GNU Emacs Manual}).
2798
2799 To define a kind of magic file name, you must supply a regular
2800 expression to define the class of names (all those that match the
2801 regular expression), plus a handler that implements all the primitive
2802 Emacs file operations for file names that match.
2803
2804 @cindex file handler
2805 @vindex file-name-handler-alist
2806 The variable @code{file-name-handler-alist} holds a list of handlers,
2807 together with regular expressions that determine when to apply each
2808 handler. Each element has this form:
2809
2810 @example
2811 (@var{regexp} . @var{handler})
2812 @end example
2813
2814 @noindent
2815 All the Emacs primitives for file access and file name transformation
2816 check the given file name against @code{file-name-handler-alist}. If
2817 the file name matches @var{regexp}, the primitives handle that file by
2818 calling @var{handler}.
2819
2820 The first argument given to @var{handler} is the name of the
2821 primitive, as a symbol; the remaining arguments are the arguments that
2822 were passed to that primitive. (The first of these arguments is most
2823 often the file name itself.) For example, if you do this:
2824
2825 @example
2826 (file-exists-p @var{filename})
2827 @end example
2828
2829 @noindent
2830 and @var{filename} has handler @var{handler}, then @var{handler} is
2831 called like this:
2832
2833 @example
2834 (funcall @var{handler} 'file-exists-p @var{filename})
2835 @end example
2836
2837 When a function takes two or more arguments that must be file names,
2838 it checks each of those names for a handler. For example, if you do
2839 this:
2840
2841 @example
2842 (expand-file-name @var{filename} @var{dirname})
2843 @end example
2844
2845 @noindent
2846 then it checks for a handler for @var{filename} and then for a handler
2847 for @var{dirname}. In either case, the @var{handler} is called like
2848 this:
2849
2850 @example
2851 (funcall @var{handler} 'expand-file-name @var{filename} @var{dirname})
2852 @end example
2853
2854 @noindent
2855 The @var{handler} then needs to figure out whether to handle
2856 @var{filename} or @var{dirname}.
2857
2858 If the specified file name matches more than one handler, the one
2859 whose match starts last in the file name gets precedence. This rule
2860 is chosen so that handlers for jobs such as uncompression are handled
2861 first, before handlers for jobs such as remote file access.
2862
2863 Here are the operations that a magic file name handler gets to handle:
2864
2865 @ifnottex
2866 @noindent
2867 @code{access-file}, @code{add-name-to-file},
2868 @code{byte-compiler-base-file-name},@*
2869 @code{copy-directory}, @code{copy-file},
2870 @code{delete-directory}, @code{delete-file},
2871 @code{diff-latest-backup-file},
2872 @code{directory-file-name},
2873 @code{directory-files},
2874 @code{directory-files-and-attributes},
2875 @code{dired-compress-file}, @code{dired-uncache},@*
2876 @code{expand-file-name},
2877 @code{file-accessible-directory-p},
2878 @code{file-acl},
2879 @code{file-attributes},
2880 @code{file-directory-p},
2881 @code{file-equal-p},
2882 @code{file-executable-p}, @code{file-exists-p},
2883 @code{file-in-directory-p},
2884 @code{file-local-copy},
2885 @code{file-modes}, @code{file-name-all-completions},
2886 @code{file-name-as-directory},
2887 @code{file-name-completion},
2888 @code{file-name-directory},
2889 @code{file-name-nondirectory},
2890 @code{file-name-sans-versions}, @code{file-newer-than-file-p},
2891 @code{file-notify-add-watch}, @code{file-notify-rm-watch},
2892 @code{file-notify-valid-p},
2893 @code{file-ownership-preserved-p},
2894 @code{file-readable-p}, @code{file-regular-p},
2895 @code{file-remote-p}, @code{file-selinux-context},
2896 @code{file-symlink-p}, @code{file-truename}, @code{file-writable-p},
2897 @code{find-backup-file-name},
2898 @c Not sure why it was here: @code{find-file-noselect},@*
2899 @code{get-file-buffer},
2900 @code{insert-directory},
2901 @code{insert-file-contents},@*
2902 @code{load},
2903 @code{make-auto-save-file-name},
2904 @code{make-directory},
2905 @code{make-directory-internal},
2906 @code{make-symbolic-link},@*
2907 @code{process-file},
2908 @code{rename-file}, @code{set-file-acl}, @code{set-file-modes},
2909 @code{set-file-selinux-context}, @code{set-file-times},
2910 @code{set-visited-file-modtime}, @code{shell-command},
2911 @code{start-file-process},
2912 @code{substitute-in-file-name},@*
2913 @code{unhandled-file-name-directory},
2914 @code{vc-registered},
2915 @code{verify-visited-file-modtime},@*
2916 @code{write-region}.
2917 @end ifnottex
2918 @iftex
2919 @noindent
2920 @flushleft
2921 @code{access-file}, @code{add-name-to-file},
2922 @code{byte-com@discretionary{}{}{}piler-base-file-name},
2923 @code{copy-directory}, @code{copy-file},
2924 @code{delete-directory}, @code{delete-file},
2925 @code{diff-latest-backup-file},
2926 @code{directory-file-name},
2927 @code{directory-files},
2928 @code{directory-files-and-at@discretionary{}{}{}tributes},
2929 @code{dired-compress-file}, @code{dired-uncache},
2930 @code{expand-file-name},
2931 @code{file-accessible-direc@discretionary{}{}{}tory-p},
2932 @code{file-acl},
2933 @code{file-attributes},
2934 @code{file-direc@discretionary{}{}{}tory-p},
2935 @code{file-equal-p},
2936 @code{file-executable-p}, @code{file-exists-p},
2937 @code{file-in-directory-p},
2938 @code{file-local-copy},
2939 @code{file-modes}, @code{file-name-all-completions},
2940 @code{file-name-as-directory},
2941 @code{file-name-completion},
2942 @code{file-name-directory},
2943 @code{file-name-nondirec@discretionary{}{}{}tory},
2944 @code{file-name-sans-versions}, @code{file-newer-than-file-p},
2945 @code{file-notify-add-watch}, @code{file-notify-rm-watch},
2946 @code{file-notify-valid-p},
2947 @code{file-ownership-pre@discretionary{}{}{}served-p},
2948 @code{file-readable-p}, @code{file-regular-p},
2949 @code{file-remote-p}, @code{file-selinux-context},
2950 @code{file-symlink-p}, @code{file-truename}, @code{file-writable-p},
2951 @code{find-backup-file-name},
2952 @c Not sure why it was here: @code{find-file-noselect},
2953 @code{get-file-buffer},
2954 @code{insert-directory},
2955 @code{insert-file-contents},
2956 @code{load},
2957 @code{make-auto-save-file-name},
2958 @code{make-direc@discretionary{}{}{}tory},
2959 @code{make-direc@discretionary{}{}{}tory-internal},
2960 @code{make-symbolic-link},
2961 @code{process-file},
2962 @code{rename-file}, @code{set-file-acl}, @code{set-file-modes},
2963 @code{set-file-selinux-context}, @code{set-file-times},
2964 @code{set-visited-file-modtime}, @code{shell-command},
2965 @code{start-file-process},
2966 @code{substitute-in-file-name},
2967 @code{unhandled-file-name-directory},
2968 @code{vc-regis@discretionary{}{}{}tered},
2969 @code{verify-visited-file-modtime},
2970 @code{write-region}.
2971 @end flushleft
2972 @end iftex
2973
2974 Handlers for @code{insert-file-contents} typically need to clear the
2975 buffer's modified flag, with @code{(set-buffer-modified-p nil)}, if the
2976 @var{visit} argument is non-@code{nil}. This also has the effect of
2977 unlocking the buffer if it is locked.
2978
2979 The handler function must handle all of the above operations, and
2980 possibly others to be added in the future. It need not implement all
2981 these operations itself---when it has nothing special to do for a
2982 certain operation, it can reinvoke the primitive, to handle the
2983 operation in the usual way. It should always reinvoke the primitive
2984 for an operation it does not recognize. Here's one way to do this:
2985
2986 @smallexample
2987 (defun my-file-handler (operation &rest args)
2988 ;; @r{First check for the specific operations}
2989 ;; @r{that we have special handling for.}
2990 (cond ((eq operation 'insert-file-contents) @dots{})
2991 ((eq operation 'write-region) @dots{})
2992 @dots{}
2993 ;; @r{Handle any operation we don't know about.}
2994 (t (let ((inhibit-file-name-handlers
2995 (cons 'my-file-handler
2996 (and (eq inhibit-file-name-operation operation)
2997 inhibit-file-name-handlers)))
2998 (inhibit-file-name-operation operation))
2999 (apply operation args)))))
3000 @end smallexample
3001
3002 When a handler function decides to call the ordinary Emacs primitive for
3003 the operation at hand, it needs to prevent the primitive from calling
3004 the same handler once again, thus leading to an infinite recursion. The
3005 example above shows how to do this, with the variables
3006 @code{inhibit-file-name-handlers} and
3007 @code{inhibit-file-name-operation}. Be careful to use them exactly as
3008 shown above; the details are crucial for proper behavior in the case of
3009 multiple handlers, and for operations that have two file names that may
3010 each have handlers.
3011
3012 @kindex safe-magic (@r{property})
3013 Handlers that don't really do anything special for actual access to the
3014 file---such as the ones that implement completion of host names for
3015 remote file names---should have a non-@code{nil} @code{safe-magic}
3016 property. For instance, Emacs normally protects directory names
3017 it finds in @code{PATH} from becoming magic, if they look like magic
3018 file names, by prefixing them with @samp{/:}. But if the handler that
3019 would be used for them has a non-@code{nil} @code{safe-magic}
3020 property, the @samp{/:} is not added.
3021
3022 @kindex operations (@r{property})
3023 A file name handler can have an @code{operations} property to
3024 declare which operations it handles in a nontrivial way. If this
3025 property has a non-@code{nil} value, it should be a list of
3026 operations; then only those operations will call the handler. This
3027 avoids inefficiency, but its main purpose is for autoloaded handler
3028 functions, so that they won't be loaded except when they have real
3029 work to do.
3030
3031 Simply deferring all operations to the usual primitives does not
3032 work. For instance, if the file name handler applies to
3033 @code{file-exists-p}, then it must handle @code{load} itself, because
3034 the usual @code{load} code won't work properly in that case. However,
3035 if the handler uses the @code{operations} property to say it doesn't
3036 handle @code{file-exists-p}, then it need not handle @code{load}
3037 nontrivially.
3038
3039 @defvar inhibit-file-name-handlers
3040 This variable holds a list of handlers whose use is presently inhibited
3041 for a certain operation.
3042 @end defvar
3043
3044 @defvar inhibit-file-name-operation
3045 The operation for which certain handlers are presently inhibited.
3046 @end defvar
3047
3048 @defun find-file-name-handler file operation
3049 This function returns the handler function for file name @var{file},
3050 or @code{nil} if there is none. The argument @var{operation} should
3051 be the operation to be performed on the file---the value you will pass
3052 to the handler as its first argument when you call it. If
3053 @var{operation} equals @code{inhibit-file-name-operation}, or if it is
3054 not found in the @code{operations} property of the handler, this
3055 function returns @code{nil}.
3056 @end defun
3057
3058 @defun file-local-copy filename
3059 This function copies file @var{filename} to an ordinary non-magic file
3060 on the local machine, if it isn't on the local machine already. Magic
3061 file names should handle the @code{file-local-copy} operation if they
3062 refer to files on other machines. A magic file name that is used for
3063 other purposes than remote file access should not handle
3064 @code{file-local-copy}; then this function will treat the file as
3065 local.
3066
3067 If @var{filename} is local, whether magic or not, this function does
3068 nothing and returns @code{nil}. Otherwise it returns the file name
3069 of the local copy file.
3070 @end defun
3071
3072 @defun file-remote-p filename &optional identification connected
3073 This function tests whether @var{filename} is a remote file. If
3074 @var{filename} is local (not remote), the return value is @code{nil}.
3075 If @var{filename} is indeed remote, the return value is a string that
3076 identifies the remote system.
3077
3078 This identifier string can include a host name and a user name, as
3079 well as characters designating the method used to access the remote
3080 system. For example, the remote identifier string for the filename
3081 @code{/sudo::/some/file} is @code{/sudo:root@@localhost:}.
3082
3083 If @code{file-remote-p} returns the same identifier for two different
3084 filenames, that means they are stored on the same file system and can
3085 be accessed locally with respect to each other. This means, for
3086 example, that it is possible to start a remote process accessing both
3087 files at the same time. Implementers of file handlers need to ensure
3088 this principle is valid.
3089
3090 @var{identification} specifies which part of the identifier shall be
3091 returned as string. @var{identification} can be the symbol
3092 @code{method}, @code{user} or @code{host}; any other value is handled
3093 like @code{nil} and means to return the complete identifier string.
3094 In the example above, the remote @code{user} identifier string would
3095 be @code{root}.
3096
3097 If @var{connected} is non-@code{nil}, this function returns @code{nil}
3098 even if @var{filename} is remote, if Emacs has no network connection
3099 to its host. This is useful when you want to avoid the delay of
3100 making connections when they don't exist.
3101 @end defun
3102
3103 @defun unhandled-file-name-directory filename
3104 This function returns the name of a directory that is not magic. For
3105 a non-magic @var{filename} it returns the corresponding directory name
3106 (@pxref{Directory Names}). For a magic @var{filename}, it invokes the
3107 file name handler, which therefore decides what value to return. If
3108 @var{filename} is not accessible from a local process, then the file
3109 name handler should indicate that by returning @code{nil}.
3110
3111 This is useful for running a subprocess; every subprocess must have a
3112 non-magic directory to serve as its current directory, and this function
3113 is a good way to come up with one.
3114 @end defun
3115
3116 @defopt remote-file-name-inhibit-cache
3117 The attributes of remote files can be cached for better performance. If
3118 they are changed outside of Emacs's control, the cached values become
3119 invalid, and must be reread.
3120
3121 When this variable is set to @code{nil}, cached values are never
3122 expired. Use this setting with caution, only if you are sure nothing
3123 other than Emacs ever changes the remote files. If it is set to
3124 @code{t}, cached values are never used. This is the safest value, but
3125 could result in performance degradation.
3126
3127 A compromise is to set it to a positive number. This means that
3128 cached values are used for that amount of seconds since they were
3129 cached. If a remote file is checked regularly, it might be a good
3130 idea to let-bind this variable to a value less than the time period
3131 between consecutive checks. For example:
3132
3133 @example
3134 (defun display-time-file-nonempty-p (file)
3135 (let ((remote-file-name-inhibit-cache
3136 (- display-time-interval 5)))
3137 (and (file-exists-p file)
3138 (< 0 (nth 7 (file-attributes
3139 (file-chase-links file)))))))
3140 @end example
3141 @end defopt
3142
3143 @node Format Conversion
3144 @section File Format Conversion
3145
3146 @cindex file format conversion
3147 @cindex encoding file formats
3148 @cindex decoding file formats
3149 @cindex text properties in files
3150 @cindex saving text properties
3151 Emacs performs several steps to convert the data in a buffer (text,
3152 text properties, and possibly other information) to and from a
3153 representation suitable for storing into a file. This section describes
3154 the fundamental functions that perform this @dfn{format conversion},
3155 namely @code{insert-file-contents} for reading a file into a buffer,
3156 and @code{write-region} for writing a buffer into a file.
3157
3158 @menu
3159 * Overview: Format Conversion Overview. @code{insert-file-contents} and @code{write-region}.
3160 * Round-Trip: Format Conversion Round-Trip. Using @code{format-alist}.
3161 * Piecemeal: Format Conversion Piecemeal. Specifying non-paired conversion.
3162 @end menu
3163
3164 @node Format Conversion Overview
3165 @subsection Overview
3166 @noindent
3167 The function @code{insert-file-contents}:
3168
3169 @itemize
3170 @item initially, inserts bytes from the file into the buffer;
3171 @item decodes bytes to characters as appropriate;
3172 @item processes formats as defined by entries in @code{format-alist}; and
3173 @item calls functions in @code{after-insert-file-functions}.
3174 @end itemize
3175
3176 @noindent
3177 The function @code{write-region}:
3178
3179 @itemize
3180 @item initially, calls functions in @code{write-region-annotate-functions};
3181 @item processes formats as defined by entries in @code{format-alist};
3182 @item encodes characters to bytes as appropriate; and
3183 @item modifies the file with the bytes.
3184 @end itemize
3185
3186 This shows the symmetry of the lowest-level operations; reading and
3187 writing handle things in opposite order. The rest of this section
3188 describes the two facilities surrounding the three variables named
3189 above, as well as some related functions. @ref{Coding Systems}, for
3190 details on character encoding and decoding.
3191
3192 @node Format Conversion Round-Trip
3193 @subsection Round-Trip Specification
3194
3195 The most general of the two facilities is controlled by the variable
3196 @code{format-alist}, a list of @dfn{file format} specifications, which
3197 describe textual representations used in files for the data in an Emacs
3198 buffer. The descriptions for reading and writing are paired, which is
3199 why we call this ``round-trip'' specification
3200 (@pxref{Format Conversion Piecemeal}, for non-paired specification).
3201
3202 @defvar format-alist
3203 This list contains one format definition for each defined file format.
3204 Each format definition is a list of this form:
3205
3206 @example
3207 (@var{name} @var{doc-string} @var{regexp} @var{from-fn} @var{to-fn} @var{modify} @var{mode-fn} @var{preserve})
3208 @end example
3209 @end defvar
3210
3211 @cindex format definition
3212 @noindent
3213 Here is what the elements in a format definition mean:
3214
3215 @table @var
3216 @item name
3217 The name of this format.
3218
3219 @item doc-string
3220 A documentation string for the format.
3221
3222 @item regexp
3223 A regular expression which is used to recognize files represented in
3224 this format. If @code{nil}, the format is never applied automatically.
3225
3226 @item from-fn
3227 A shell command or function to decode data in this format (to convert
3228 file data into the usual Emacs data representation).
3229
3230 A shell command is represented as a string; Emacs runs the command as a
3231 filter to perform the conversion.
3232
3233 If @var{from-fn} is a function, it is called with two arguments, @var{begin}
3234 and @var{end}, which specify the part of the buffer it should convert.
3235 It should convert the text by editing it in place. Since this can
3236 change the length of the text, @var{from-fn} should return the modified
3237 end position.
3238
3239 One responsibility of @var{from-fn} is to make sure that the beginning
3240 of the file no longer matches @var{regexp}. Otherwise it is likely to
3241 get called again.
3242
3243 @item to-fn
3244 A shell command or function to encode data in this format---that is, to
3245 convert the usual Emacs data representation into this format.
3246
3247 If @var{to-fn} is a string, it is a shell command; Emacs runs the
3248 command as a filter to perform the conversion.
3249
3250 If @var{to-fn} is a function, it is called with three arguments:
3251 @var{begin} and @var{end}, which specify the part of the buffer it
3252 should convert, and @var{buffer}, which specifies which buffer. There
3253 are two ways it can do the conversion:
3254
3255 @itemize @bullet
3256 @item
3257 By editing the buffer in place. In this case, @var{to-fn} should
3258 return the end-position of the range of text, as modified.
3259
3260 @item
3261 By returning a list of annotations. This is a list of elements of the
3262 form @code{(@var{position} . @var{string})}, where @var{position} is an
3263 integer specifying the relative position in the text to be written, and
3264 @var{string} is the annotation to add there. The list must be sorted in
3265 order of position when @var{to-fn} returns it.
3266
3267 When @code{write-region} actually writes the text from the buffer to the
3268 file, it intermixes the specified annotations at the corresponding
3269 positions. All this takes place without modifying the buffer.
3270 @end itemize
3271
3272 @item modify
3273 A flag, @code{t} if the encoding function modifies the buffer, and
3274 @code{nil} if it works by returning a list of annotations.
3275
3276 @item mode-fn
3277 A minor-mode function to call after visiting a file converted from this
3278 format. The function is called with one argument, the integer 1;
3279 that tells a minor-mode function to enable the mode.
3280
3281 @item preserve
3282 A flag, @code{t} if @code{format-write-file} should not remove this format
3283 from @code{buffer-file-format}.
3284 @end table
3285
3286 The function @code{insert-file-contents} automatically recognizes file
3287 formats when it reads the specified file. It checks the text of the
3288 beginning of the file against the regular expressions of the format
3289 definitions, and if it finds a match, it calls the decoding function for
3290 that format. Then it checks all the known formats over again.
3291 It keeps checking them until none of them is applicable.
3292
3293 Visiting a file, with @code{find-file-noselect} or the commands that use
3294 it, performs conversion likewise (because it calls
3295 @code{insert-file-contents}); it also calls the mode function for each
3296 format that it decodes. It stores a list of the format names in the
3297 buffer-local variable @code{buffer-file-format}.
3298
3299 @defvar buffer-file-format
3300 This variable states the format of the visited file. More precisely,
3301 this is a list of the file format names that were decoded in the course
3302 of visiting the current buffer's file. It is always buffer-local in all
3303 buffers.
3304 @end defvar
3305
3306 When @code{write-region} writes data into a file, it first calls the
3307 encoding functions for the formats listed in @code{buffer-file-format},
3308 in the order of appearance in the list.
3309
3310 @deffn Command format-write-file file format &optional confirm
3311 This command writes the current buffer contents into the file @var{file}
3312 in a format based on @var{format}, which is a list of format names. It
3313 constructs the actual format starting from @var{format}, then appending
3314 any elements from the value of @code{buffer-file-format} with a
3315 non-@code{nil} @var{preserve} flag (see above), if they are not already
3316 present in @var{format}. It then updates @code{buffer-file-format} with
3317 this format, making it the default for future saves. Except for the
3318 @var{format} argument, this command is similar to @code{write-file}. In
3319 particular, @var{confirm} has the same meaning and interactive treatment
3320 as the corresponding argument to @code{write-file}. @xref{Definition of
3321 write-file}.
3322 @end deffn
3323
3324 @deffn Command format-find-file file format
3325 This command finds the file @var{file}, converting it according to
3326 format @var{format}. It also makes @var{format} the default if the
3327 buffer is saved later.
3328
3329 The argument @var{format} is a list of format names. If @var{format} is
3330 @code{nil}, no conversion takes place. Interactively, typing just
3331 @key{RET} for @var{format} specifies @code{nil}.
3332 @end deffn
3333
3334 @deffn Command format-insert-file file format &optional beg end
3335 This command inserts the contents of file @var{file}, converting it
3336 according to format @var{format}. If @var{beg} and @var{end} are
3337 non-@code{nil}, they specify which part of the file to read, as in
3338 @code{insert-file-contents} (@pxref{Reading from Files}).
3339
3340 The return value is like what @code{insert-file-contents} returns: a
3341 list of the absolute file name and the length of the data inserted
3342 (after conversion).
3343
3344 The argument @var{format} is a list of format names. If @var{format} is
3345 @code{nil}, no conversion takes place. Interactively, typing just
3346 @key{RET} for @var{format} specifies @code{nil}.
3347 @end deffn
3348
3349 @defvar buffer-auto-save-file-format
3350 This variable specifies the format to use for auto-saving. Its value is
3351 a list of format names, just like the value of
3352 @code{buffer-file-format}; however, it is used instead of
3353 @code{buffer-file-format} for writing auto-save files. If the value
3354 is @code{t}, the default, auto-saving uses the same format as a
3355 regular save in the same buffer. This variable is always buffer-local
3356 in all buffers.
3357 @end defvar
3358
3359 @node Format Conversion Piecemeal
3360 @subsection Piecemeal Specification
3361
3362 In contrast to the round-trip specification described in the previous
3363 subsection (@pxref{Format Conversion Round-Trip}), you can use the variables
3364 @code{after-insert-file-functions} and @code{write-region-annotate-functions}
3365 to separately control the respective reading and writing conversions.
3366
3367 Conversion starts with one representation and produces another
3368 representation. When there is only one conversion to do, there is no
3369 conflict about what to start with. However, when there are multiple
3370 conversions involved, conflict may arise when two conversions need to
3371 start with the same data.
3372
3373 This situation is best understood in the context of converting text
3374 properties during @code{write-region}. For example, the character at
3375 position 42 in a buffer is @samp{X} with a text property @code{foo}. If
3376 the conversion for @code{foo} is done by inserting into the buffer, say,
3377 @samp{FOO:}, then that changes the character at position 42 from
3378 @samp{X} to @samp{F}. The next conversion will start with the wrong
3379 data straight away.
3380
3381 To avoid conflict, cooperative conversions do not modify the buffer,
3382 but instead specify @dfn{annotations}, a list of elements of the form
3383 @code{(@var{position} . @var{string})}, sorted in order of increasing
3384 @var{position}.
3385
3386 If there is more than one conversion, @code{write-region} merges their
3387 annotations destructively into one sorted list. Later, when the text
3388 from the buffer is actually written to the file, it intermixes the
3389 specified annotations at the corresponding positions. All this takes
3390 place without modifying the buffer.
3391
3392 @c ??? What about "overriding" conversions like those allowed
3393 @c ??? for 'write-region-annotate-functions', below? --ttn
3394
3395 In contrast, when reading, the annotations intermixed with the text
3396 are handled immediately. @code{insert-file-contents} sets point to
3397 the beginning of some text to be converted, then calls the conversion
3398 functions with the length of that text. These functions should always
3399 return with point at the beginning of the inserted text. This
3400 approach makes sense for reading because annotations removed by the
3401 first converter can't be mistakenly processed by a later converter.
3402 Each conversion function should scan for the annotations it
3403 recognizes, remove the annotation, modify the buffer text (to set a
3404 text property, for example), and return the updated length of the
3405 text, as it stands after those changes. The value returned by one
3406 function becomes the argument to the next function.
3407
3408 @defvar write-region-annotate-functions
3409 A list of functions for @code{write-region} to call. Each function in
3410 the list is called with two arguments: the start and end of the region
3411 to be written. These functions should not alter the contents of the
3412 buffer. Instead, they should return annotations.
3413
3414 As a special case, a function may return with a different buffer
3415 current. Emacs takes this to mean that the current buffer contains
3416 altered text to be output. It therefore changes the @var{start} and
3417 @var{end} arguments of the @code{write-region} call, giving them the
3418 values of @code{point-min} and @code{point-max} in the new buffer,
3419 respectively. It also discards all previous annotations, because they
3420 should have been dealt with by this function.
3421 @end defvar
3422
3423 @defvar write-region-post-annotation-function
3424 The value of this variable, if non-@code{nil}, should be a function.
3425 This function is called, with no arguments, after @code{write-region}
3426 has completed.
3427
3428 If any function in @code{write-region-annotate-functions} returns with
3429 a different buffer current, Emacs calls
3430 @code{write-region-post-annotation-function} more than once. Emacs
3431 calls it with the last buffer that was current, and again with the
3432 buffer before that, and so on back to the original buffer.
3433
3434 Thus, a function in @code{write-region-annotate-functions} can create
3435 a buffer, give this variable the local value of @code{kill-buffer} in
3436 that buffer, set up the buffer with altered text, and make the buffer
3437 current. The buffer will be killed after @code{write-region} is done.
3438 @end defvar
3439
3440 @defvar after-insert-file-functions
3441 Each function in this list is called by @code{insert-file-contents}
3442 with one argument, the number of characters inserted, and with point
3443 at the beginning of the inserted text. Each function should leave
3444 point unchanged, and return the new character count describing the
3445 inserted text as modified by the function.
3446 @c ??? The docstring mentions a handler from 'file-name-handler-alist'
3447 @c "intercepting" 'insert-file-contents'. Hmmm. --ttn
3448 @end defvar
3449
3450 We invite users to write Lisp programs to store and retrieve text
3451 properties in files, using these hooks, and thus to experiment with
3452 various data formats and find good ones. Eventually we hope users
3453 will produce good, general extensions we can install in Emacs.
3454
3455 We suggest not trying to handle arbitrary Lisp objects as text property
3456 names or values---because a program that general is probably difficult
3457 to write, and slow. Instead, choose a set of possible data types that
3458 are reasonably flexible, and not too hard to encode.