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