annotate man/lispref/files.texi @ 5044:e84a30b0e4a2

remove duplicative code in change_frame_size() -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-02-15 Ben Wing <ben@xemacs.org> * frame.c (change_frame_size_1): Simplify the logic in this function. (1) Don't allow 0 as the value of height or width. The old code that tried to allow this was totally broken, anyway, so obviously this never happens any more. (2) Don't duplicate the code in frame_conversion_internal() that converts displayable pixel size to total pixel size -- just call that function.
author Ben Wing <ben@xemacs.org>
date Mon, 15 Feb 2010 22:58:10 -0600
parents 576fb035e263
children 9fae6227ede5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/files.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @node Files, Backups and Auto-Saving, Documentation, Top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @chapter Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 In XEmacs, you can find, create, view, save, and otherwise work with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 files and file directories. This chapter describes most of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 file-related functions of XEmacs Lisp, but a few others are described in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 @ref{Buffers}, and those related to backups and auto-saving are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 described in @ref{Backups and Auto-Saving}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 Many of the file functions take one or more arguments that are file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 names. A file name is actually a string. Most of these functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 expand file name arguments using @code{expand-file-name}, so that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 @file{~} is handled correctly, as are relative file names (including
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 @samp{../}). These functions don't recognize environment variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 substitutions such as @samp{$HOME}. @xref{File Name Expansion}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 * Visiting Files:: Reading files into Emacs buffers for editing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 * Saving Buffers:: Writing changed buffers back into files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 * Reading from Files:: Reading files into buffers without visiting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 * Writing to Files:: Writing new files from parts of buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 * File Locks:: Locking and unlocking files, to prevent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 simultaneous editing by two people.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 * Information about Files:: Testing existence, accessibility, size of files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 * Changing File Attributes:: Renaming files, changing protection, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 * File Names:: Decomposing and expanding file names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 * Contents of Directories:: Getting a list of the files in a directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 * Create/Delete Dirs:: Creating and Deleting Directories.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 * Magic File Names:: Defining "magic" special handling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 for certain file names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 * Partial Files:: Treating a section of a buffer as a file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 * Format Conversion:: Conversion to and from various file formats.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 * Files and MS-DOS:: Distinguishing text and binary files on MS-DOS.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 @node Visiting Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 @section Visiting Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 @cindex finding files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 @cindex visiting files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 Visiting a file means reading a file into a buffer. Once this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 done, we say that the buffer is @dfn{visiting} that file, and call the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 file ``the visited file'' of the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 A file and a buffer are two different things. A file is information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 recorded permanently in the computer (unless you delete it). A buffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 on the other hand, is information inside of XEmacs that will vanish at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 the end of the editing session (or when you kill the buffer). Usually,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 a buffer contains information that you have copied from a file; then we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 say the buffer is visiting that file. The copy in the buffer is what
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 you modify with editing commands. Such changes to the buffer do not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 change the file; therefore, to make the changes permanent, you must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 @dfn{save} the buffer, which means copying the altered buffer contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 back into the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 In spite of the distinction between files and buffers, people often
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 refer to a file when they mean a buffer and vice-versa. Indeed, we say,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 ``I am editing a file,'' rather than, ``I am editing a buffer that I
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 will soon save as a file of the same name.'' Humans do not usually need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 to make the distinction explicit. When dealing with a computer program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 however, it is good to keep the distinction in mind.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 * Visiting Functions:: The usual interface functions for visiting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 * Subroutines of Visiting:: Lower-level subroutines that they use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 @node Visiting Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 @subsection Functions for Visiting Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 This section describes the functions normally used to visit files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 For historical reasons, these functions have names starting with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 @samp{find-} rather than @samp{visit-}. @xref{Buffer File Name}, for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 functions and variables that access the visited file name of a buffer or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 that find an existing buffer by its visited file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 In a Lisp program, if you want to look at the contents of a file but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 not alter it, the fastest way is to use @code{insert-file-contents} in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 temporary buffer. Visiting the file is not necessary and takes longer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 @xref{Reading from Files}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 @deffn Command find-file filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 This command selects a buffer visiting the file @var{filename},
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
89 using an existing buffer if there is one, and otherwise creating a
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 new buffer and reading the file into it. It also returns that buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 The body of the @code{find-file} function is very simple and looks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 (switch-to-buffer (find-file-noselect filename))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 (See @code{switch-to-buffer} in @ref{Displaying Buffers}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 When @code{find-file} is called interactively, it prompts for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 @var{filename} in the minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 @defun find-file-noselect filename &optional nowarn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 This function is the guts of all the file-visiting functions. It finds
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 or creates a buffer visiting the file @var{filename}, and returns it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 It uses an existing buffer if there is one, and otherwise creates a new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 buffer and reads the file into it. You may make the buffer current or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 display it in a window if you wish, but this function does not do so.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 When @code{find-file-noselect} uses an existing buffer, it first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 verifies that the file has not changed since it was last visited or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 saved in that buffer. If the file has changed, then this function asks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 the user whether to reread the changed file. If the user says
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 @samp{yes}, any changes previously made in the buffer are lost.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 If @code{find-file-noselect} needs to create a buffer, and there is no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 file named @var{filename}, it displays the message @samp{New file} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 the echo area, and leaves the buffer empty.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 @c XEmacs feature
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
124 If @var{nowarn} is non-@code{nil}, various warnings that XEmacs normally
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 gives (e.g. if another buffer is already visiting @var{filename} but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 @var{filename} has been removed from disk since that buffer was created)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 are suppressed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 The @code{find-file-noselect} function calls @code{after-find-file}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 after reading the file (@pxref{Subroutines of Visiting}). That function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 sets the buffer major mode, parses local variables, warns the user if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 there exists an auto-save file more recent than the file just visited,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 and finishes by running the functions in @code{find-file-hooks}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 The @code{find-file-noselect} function returns the buffer that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 visiting the file @var{filename}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 (find-file-noselect "/etc/fstab")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 @result{} #<buffer fstab>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 @deffn Command find-file-other-window filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 This command selects a buffer visiting the file @var{filename}, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 does so in a window other than the selected window. It may use another
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 existing window or split a window; see @ref{Displaying Buffers}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 When this command is called interactively, it prompts for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 @var{filename}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 @deffn Command find-file-read-only filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 This command selects a buffer visiting the file @var{filename}, like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 @code{find-file}, but it marks the buffer as read-only. @xref{Read Only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 Buffers}, for related functions and variables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 When this command is called interactively, it prompts for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 @var{filename}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
164 @deffn Command view-file filename &optional other-window-p
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 This command visits @var{filename} in View mode, and displays it in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 recursive edit, returning to the previous buffer when done. View mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 is a mode that allows you to skim rapidly through the file but does not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 let you modify it. Entering View mode runs the normal hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 @code{view-mode-hook}. @xref{Hooks}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 When @code{view-file} is called interactively, it prompts for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 @var{filename}.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
173
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
174 With non-@code{nil} prefix arg @var{other-window-p}, visit @var{filename}
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
175 in another window.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 @defvar find-file-hooks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 The value of this variable is a list of functions to be called after a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 file is visited. The file's local-variables specification (if any) will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 have been processed before the hooks are run. The buffer visiting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 file is current when the hook functions are run.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 This variable works just like a normal hook, but we think that renaming
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 it would not be advisable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 @defvar find-file-not-found-hooks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 The value of this variable is a list of functions to be called when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 @code{find-file} or @code{find-file-noselect} is passed a nonexistent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 file name. @code{find-file-noselect} calls these functions as soon as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 it detects a nonexistent file. It calls them in the order of the list,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 until one of them returns non-@code{nil}. @code{buffer-file-name} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 already set up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 This is not a normal hook because the values of the functions are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 used and they may not all be called.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 @node Subroutines of Visiting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 @subsection Subroutines of Visiting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 The @code{find-file-noselect} function uses the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 @code{create-file-buffer} and @code{after-find-file} functions as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 subroutines. Sometimes it is useful to call them directly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 @defun create-file-buffer filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 This function creates a suitably named buffer for visiting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 @var{filename}, and returns it. It uses @var{filename} (sans directory)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 as the name if that name is free; otherwise, it appends a string such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 @samp{<2>} to get an unused name. See also @ref{Creating Buffers}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 @strong{Please note:} @code{create-file-buffer} does @emph{not}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 associate the new buffer with a file and does not select the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 It also does not use the default major mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 (create-file-buffer "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 @result{} #<buffer foo>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 (create-file-buffer "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 @result{} #<buffer foo<2>>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 (create-file-buffer "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 @result{} #<buffer foo<3>>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 This function is used by @code{find-file-noselect}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 It uses @code{generate-new-buffer} (@pxref{Creating Buffers}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 @defun after-find-file &optional error warn noauto
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 This function sets the buffer major mode, and parses local variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 (@pxref{Auto Major Mode}). It is called by @code{find-file-noselect}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 and by the default revert function (@pxref{Reverting}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 @cindex new file message
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 @cindex file open error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 If reading the file got an error because the file does not exist, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 its directory does exist, the caller should pass a non-@code{nil} value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 for @var{error}. In that case, @code{after-find-file} issues a warning:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 @samp{(New File)}. For more serious errors, the caller should usually not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 call @code{after-find-file}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 If @var{warn} is non-@code{nil}, then this function issues a warning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 if an auto-save file exists and is more recent than the visited file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 @c XEmacs feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 If @var{noauto} is non-@code{nil}, then this function does not turn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 on auto-save mode; otherwise, it does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 The last thing @code{after-find-file} does is call all the functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 in @code{find-file-hooks}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 @node Saving Buffers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 @section Saving Buffers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 When you edit a file in XEmacs, you are actually working on a buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 that is visiting that file---that is, the contents of the file are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 copied into the buffer and the copy is what you edit. Changes to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 buffer do not change the file until you @dfn{save} the buffer, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 means copying the contents of the buffer into the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 @deffn Command save-buffer &optional backup-option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 This function saves the contents of the current buffer in its visited
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 file if the buffer has been modified since it was last visited or saved.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 Otherwise it does nothing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 @code{save-buffer} is responsible for making backup files. Normally,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 @var{backup-option} is @code{nil}, and @code{save-buffer} makes a backup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 file only if this is the first save since visiting the file. Other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 values for @var{backup-option} request the making of backup files in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 other circumstances:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 With an argument of 4 or 64, reflecting 1 or 3 @kbd{C-u}'s, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 @code{save-buffer} function marks this version of the file to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 backed up when the buffer is next saved.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 With an argument of 16 or 64, reflecting 2 or 3 @kbd{C-u}'s, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 @code{save-buffer} function unconditionally backs up the previous
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 version of the file before saving it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 @deffn Command save-some-buffers &optional save-silently-p exiting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 This command saves some modified file-visiting buffers. Normally it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 asks the user about each buffer. But if @var{save-silently-p} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 non-@code{nil}, it saves all the file-visiting buffers without querying
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 the user.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 The optional @var{exiting} argument, if non-@code{nil}, requests this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 function to offer also to save certain other buffers that are not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 visiting files. These are buffers that have a non-@code{nil} local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 value of @code{buffer-offer-save}. (A user who says yes to saving one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 of these is asked to specify a file name to use.) The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 @code{save-buffers-kill-emacs} function passes a non-@code{nil} value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 for this argument.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 @defvar buffer-offer-save
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 When this variable is non-@code{nil} in a buffer, XEmacs offers to save
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 the buffer on exit even if the buffer is not visiting a file. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 variable is automatically local in all buffers. Normally, Mail mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 (used for editing outgoing mail) sets this to @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 @deffn Command write-file filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 This function writes the current buffer into file @var{filename}, makes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 the buffer visit that file, and marks it not modified. Then it renames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 the buffer based on @var{filename}, appending a string like @samp{<2>}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 if necessary to make a unique buffer name. It does most of this work by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 calling @code{set-visited-file-name} and @code{save-buffer}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 @defvar write-file-hooks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 The value of this variable is a list of functions to be called before
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 writing out a buffer to its visited file. If one of them returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 non-@code{nil}, the file is considered already written and the rest of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 the functions are not called, nor is the usual code for writing the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 executed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 If a function in @code{write-file-hooks} returns non-@code{nil}, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 is responsible for making a backup file (if that is appropriate).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 To do so, execute the following code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 (or buffer-backed-up (backup-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 You might wish to save the file modes value returned by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 @code{backup-buffer} and use that to set the mode bits of the file that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 you write. This is what @code{save-buffer} normally does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 Even though this is not a normal hook, you can use @code{add-hook} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 @code{remove-hook} to manipulate the list. @xref{Hooks}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 @defvar local-write-file-hooks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 This works just like @code{write-file-hooks}, but it is intended
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 to be made local to particular buffers. It's not a good idea to make
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 @code{write-file-hooks} local to a buffer---use this variable instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 The variable is marked as a permanent local, so that changing the major
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 mode does not alter a buffer-local value. This is convenient for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 packages that read ``file'' contents in special ways, and set up hooks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 to save the data in a corresponding way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 @defvar write-contents-hooks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 This works just like @code{write-file-hooks}, but it is intended for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 hooks that pertain to the contents of the file, as opposed to hooks that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 pertain to where the file came from. Such hooks are usually set up by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 major modes, as buffer-local bindings for this variable. Switching to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 new major mode always resets this variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 @defvar after-save-hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 This normal hook runs after a buffer has been saved in its visited file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 @defvar file-precious-flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 If this variable is non-@code{nil}, then @code{save-buffer} protects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 against I/O errors while saving by writing the new file to a temporary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 name instead of the name it is supposed to have, and then renaming it to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 the intended name after it is clear there are no errors. This procedure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 prevents problems such as a lack of disk space from resulting in an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 invalid file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 As a side effect, backups are necessarily made by copying. @xref{Rename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 or Copy}. Yet, at the same time, saving a precious file always breaks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 all hard links between the file you save and other file names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 Some modes set this variable non-@code{nil} locally in particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 @defopt require-final-newline
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 This variable determines whether files may be written out that do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 @emph{not} end with a newline. If the value of the variable is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 @code{t}, then @code{save-buffer} silently adds a newline at the end of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 the file whenever the buffer being saved does not already end in one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 If the value of the variable is non-@code{nil}, but not @code{t}, then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 @code{save-buffer} asks the user whether to add a newline each time the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 case arises.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 If the value of the variable is @code{nil}, then @code{save-buffer}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 doesn't add newlines at all. @code{nil} is the default value, but a few
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 major modes set it to @code{t} in particular buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 @end defopt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 @node Reading from Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 @section Reading from Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 You can copy a file from the disk and insert it into a buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 using the @code{insert-file-contents} function. Don't use the user-level
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 command @code{insert-file} in a Lisp program, as that sets the mark.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
409 @defun insert-file-contents filename &optional visit start end replace
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 This function inserts the contents of file @var{filename} into the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 current buffer after point. It returns a list of the absolute file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 and the length of the data inserted. An error is signaled if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 @var{filename} is not the name of a file that can be read.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 The function @code{insert-file-contents} checks the file contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 against the defined file formats, and converts the file contents if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 appropriate. @xref{Format Conversion}. It also calls the functions in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 the list @code{after-insert-file-functions}; see @ref{Saving
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 Properties}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 If @var{visit} is non-@code{nil}, this function additionally marks the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 buffer as unmodified and sets up various fields in the buffer so that it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 is visiting the file @var{filename}: these include the buffer's visited
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 file name and its last save file modtime. This feature is used by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 @code{find-file-noselect} and you probably should not use it yourself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
427 If @var{start} and @var{end} are non-@code{nil}, they should be integers
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 specifying the portion of the file to insert. In this case, @var{visit}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 must be @code{nil}. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 (insert-file-contents filename nil 0 500)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 inserts the first 500 characters of a file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 If the argument @var{replace} is non-@code{nil}, it means to replace the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 contents of the buffer (actually, just the accessible portion) with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 contents of the file. This is better than simply deleting the buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 contents and inserting the whole file, because (1) it preserves some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 marker positions and (2) it puts less data in the undo list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 If you want to pass a file name to another process so that another
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 program can read the file, use the function @code{file-local-copy}; see
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 @ref{Magic File Names}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 @node Writing to Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 @section Writing to Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 You can write the contents of a buffer, or part of a buffer, directly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 to a file on disk using the @code{append-to-file} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 @code{write-region} functions. Don't use these functions to write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 files that are being visited; that could cause confusion in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 mechanisms for visiting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 @deffn Command append-to-file start end filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 This function appends the contents of the region delimited by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 @var{start} and @var{end} in the current buffer to the end of file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 @var{filename}. If that file does not exist, it is created. If that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 file exists it is overwritten. This function returns @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 An error is signaled if @var{filename} specifies a nonwritable file,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 or a nonexistent file in a directory where files cannot be created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 @deffn Command write-region start end filename &optional append visit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 This function writes the region delimited by @var{start} and @var{end}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 in the current buffer into the file specified by @var{filename}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 If @var{start} is a string, then @code{write-region} writes or appends
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 that string, rather than text from the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 If @var{append} is non-@code{nil}, then the specified text is appended
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 to the existing file contents (if any).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 If @var{visit} is @code{t}, then XEmacs establishes an association
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 between the buffer and the file: the buffer is then visiting that file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 It also sets the last file modification time for the current buffer to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 @var{filename}'s modtime, and marks the buffer as not modified. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 feature is used by @code{save-buffer}, but you probably should not use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 it yourself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 If @var{visit} is a string, it specifies the file name to visit. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 way, you can write the data to one file (@var{filename}) while recording
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 the buffer as visiting another file (@var{visit}). The argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 @var{visit} is used in the echo area message and also for file locking;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 @var{visit} is stored in @code{buffer-file-name}. This feature is used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 to implement @code{file-precious-flag}; don't use it yourself unless you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 really know what you're doing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 The function @code{write-region} converts the data which it writes to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 the appropriate file formats specified by @code{buffer-file-format}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 @xref{Format Conversion}. It also calls the functions in the list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 @code{write-region-annotate-functions}; see @ref{Saving Properties}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 Normally, @code{write-region} displays a message @samp{Wrote file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 @var{filename}} in the echo area. If @var{visit} is neither @code{t}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 nor @code{nil} nor a string, then this message is inhibited. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 feature is useful for programs that use files for internal purposes,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 files that the user does not need to know about.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 @node File Locks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 @section File Locks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 @cindex file locks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 When two users edit the same file at the same time, they are likely to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 interfere with each other. XEmacs tries to prevent this situation from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 arising by recording a @dfn{file lock} when a file is being modified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 XEmacs can then detect the first attempt to modify a buffer visiting a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 file that is locked by another XEmacs process, and ask the user what to do.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 File locks do not work properly when multiple machines can share
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 file systems, such as with NFS. Perhaps a better file locking system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 will be implemented in the future. When file locks do not work, it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 possible for two users to make changes simultaneously, but XEmacs can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 still warn the user who saves second. Also, the detection of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 modification of a buffer visiting a file changed on disk catches some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 cases of simultaneous editing; see @ref{Modification Time}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 @c Not optional in FSF Emacs 19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 @defun file-locked-p &optional filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 This function returns @code{nil} if the file @var{filename} is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 locked by this XEmacs process. It returns @code{t} if it is locked by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 this XEmacs, and it returns the name of the user who has locked it if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 is locked by someone else.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 (file-locked-p "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 @defun lock-buffer &optional filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 This function locks the file @var{filename}, if the current buffer is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 modified. The argument @var{filename} defaults to the current buffer's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 visited file. Nothing is done if the current buffer is not visiting a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 file, or is not modified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 @defun unlock-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 This function unlocks the file being visited in the current buffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 if the buffer is modified. If the buffer is not modified, then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 the file should not be locked, so this function does nothing. It also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 does nothing if the current buffer is not visiting a file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
554 @defun ask-user-about-lock filename other-user
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
555 This function is called when the user tries to modify @var{filename},
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
556 but it is locked by another user named @var{other-user}. The value it
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
557 returns determines what happens next:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 A value of @code{t} says to grab the lock on the file. Then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 this user may edit the file and @var{other-user} loses the lock.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 A value of @code{nil} says to ignore the lock and let this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 user edit the file anyway.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 @kindex file-locked
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 This function may instead signal a @code{file-locked} error, in which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 case the change that the user was about to make does not take place.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 The error message for this error looks like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 @example
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
576 @error{} File is locked: @var{filename} @var{other-user}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 @noindent
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
580 where @var{filename} is the name of the file and @var{other-user} is the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 name of the user who has locked the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 The default definition of this function asks the user to choose what
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 to do. If you wish, you can replace the @code{ask-user-about-lock}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 function with your own version that decides in another way. The code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 for its usual definition is in @file{userlock.el}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 @node Information about Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 @section Information about Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 The functions described in this section all operate on strings that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 designate file names. All the functions have names that begin with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 word @samp{file}. These functions all return information about actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 files or directories, so their arguments must all exist as actual files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 or directories unless otherwise noted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 * Testing Accessibility:: Is a given file readable? Writable?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 * Kinds of Files:: Is it a directory? A symbolic link?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 * Truenames:: Eliminating symbolic links from a file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 * File Attributes:: How large is it? Any other names? Etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 @node Testing Accessibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 @subsection Testing Accessibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 @cindex accessibility of a file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 @cindex file accessibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 These functions test for permission to access a file in specific ways.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 @defun file-exists-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 This function returns @code{t} if a file named @var{filename} appears
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 to exist. This does not mean you can necessarily read the file, only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 that you can find out its attributes. (On Unix, this is true if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 file exists and you have execute permission on the containing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 directories, regardless of the protection of the file itself.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 If the file does not exist, or if fascist access control policies
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 prevent you from finding the attributes of the file, this function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 returns @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 @defun file-readable-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 This function returns @code{t} if a file named @var{filename} exists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 and you can read it. It returns @code{nil} otherwise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 (file-readable-p "files.texi")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 (file-exists-p "/usr/spool/mqueue")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 (file-readable-p "/usr/spool/mqueue")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 @defun file-executable-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 This function returns @code{t} if a file named @var{filename} exists and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 you can execute it. It returns @code{nil} otherwise. If the file is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 directory, execute permission means you can check the existence and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 attributes of files inside the directory, and open those files if their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 modes permit.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 @defun file-writable-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 This function returns @code{t} if the file @var{filename} can be written
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 or created by you, and @code{nil} otherwise. A file is writable if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 file exists and you can write it. It is creatable if it does not exist,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 but the specified directory does exist and you can write in that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 In the third example below, @file{foo} is not writable because the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 parent directory does not exist, even though the user could create such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 a directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 (file-writable-p "~/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 (file-writable-p "/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 (file-writable-p "~/no-such-dir/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 @defun file-accessible-directory-p dirname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 This function returns @code{t} if you have permission to open existing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 files in the directory whose name as a file is @var{dirname}; otherwise
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 (or if there is no such directory), it returns @code{nil}. The value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 of @var{dirname} may be either a directory name or the file name of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 Example: after the following,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 (file-accessible-directory-p "/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 we can deduce that any attempt to read a file in @file{/foo/} will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 give an error.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 @defun file-ownership-preserved-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 This function returns @code{t} if deleting the file @var{filename} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 then creating it anew would keep the file's owner unchanged.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 @defun file-newer-than-file-p filename1 filename2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 @cindex file age
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 @cindex file modification time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 This function returns @code{t} if the file @var{filename1} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 newer than file @var{filename2}. If @var{filename1} does not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 exist, it returns @code{nil}. If @var{filename2} does not exist,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 it returns @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 In the following example, assume that the file @file{aug-19} was written
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 on the 19th, @file{aug-20} was written on the 20th, and the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 @file{no-file} doesn't exist at all.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 (file-newer-than-file-p "aug-19" "aug-20")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 (file-newer-than-file-p "aug-20" "aug-19")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 (file-newer-than-file-p "aug-19" "no-file")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 (file-newer-than-file-p "no-file" "aug-19")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 You can use @code{file-attributes} to get a file's last modification
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 time as a list of two numbers. @xref{File Attributes}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 @node Kinds of Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 @subsection Distinguishing Kinds of Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 This section describes how to distinguish various kinds of files, such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 as directories, symbolic links, and ordinary files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 @defun file-symlink-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 @cindex file symbolic links
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 If the file @var{filename} is a symbolic link, the @code{file-symlink-p}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 function returns the file name to which it is linked. This may be the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 name of a text file, a directory, or even another symbolic link, or it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 may be a nonexistent file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 If the file @var{filename} is not a symbolic link (or there is no such file),
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
755 @code{file-symlink-p} returns @code{nil}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 (file-symlink-p "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 (file-symlink-p "sym-link")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 @result{} "foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 (file-symlink-p "sym-link2")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 @result{} "sym-link"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 (file-symlink-p "/bin")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 @result{} "/pub/bin"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 @c !!! file-symlink-p: should show output of ls -l for comparison
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 @defun file-directory-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 This function returns @code{t} if @var{filename} is the name of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 existing directory, @code{nil} otherwise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 (file-directory-p "~rms")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 (file-directory-p "~rms/lewis/files.texi")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 (file-directory-p "~rms/lewis/no-such-file")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 (file-directory-p "$HOME")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 (file-directory-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 (substitute-in-file-name "$HOME"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 @defun file-regular-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 This function returns @code{t} if the file @var{filename} exists and is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 a regular file (not a directory, symbolic link, named pipe, terminal, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 other I/O device).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 @node Truenames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 @subsection Truenames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 @cindex truename (of file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 @c Emacs 19 features
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 The @dfn{truename} of a file is the name that you get by following
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 symbolic links until none remain, then expanding to get rid of @samp{.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 and @samp{..} as components. Strictly speaking, a file need not have a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 unique truename; the number of distinct truenames a file has is equal to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 the number of hard links to the file. However, truenames are useful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 because they eliminate symbolic links as a cause of name variation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 @defun file-truename filename &optional default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 The function @code{file-truename} returns the true name of the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 @var{filename}. This is the name that you get by following symbolic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 links until none remain.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 @c XEmacs allows relative filenames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 If the filename is relative, @var{default} is the directory to start
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 with. If @var{default} is @code{nil} or missing, the current buffer's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 value of @code{default-directory} is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 @xref{Buffer File Name}, for related information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 @node File Attributes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 @subsection Other Information about Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 This section describes the functions for getting detailed information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 about a file, other than its contents. This information includes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 mode bits that control access permission, the owner and group numbers,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 the number of names, the inode number, the size, and the times of access
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 and modification.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 @defun file-modes filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 @cindex permission
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 @cindex file attributes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 This function returns the mode bits of @var{filename}, as an integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 The mode bits are also called the file permissions, and they specify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 access control in the usual Unix fashion. If the low-order bit is 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 then the file is executable by all users, if the second-lowest-order bit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 is 1, then the file is writable by all users, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 The highest value returnable is 4095 (7777 octal), meaning that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 everyone has read, write, and execute permission, that the @sc{suid} bit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 is set for both others and group, and that the sticky bit is set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 (file-modes "~/junk/diffs")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 @result{} 492 ; @r{Decimal integer.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 (format "%o" 492)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 @result{} "754" ; @r{Convert to octal.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 (set-file-modes "~/junk/diffs" 438)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 (format "%o" 438)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 @result{} "666" ; @r{Convert to octal.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 % ls -l diffs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 -rw-rw-rw- 1 lewis 0 3063 Oct 30 16:00 diffs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 @defun file-nlinks filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 This functions returns the number of names (i.e., hard links) that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 file @var{filename} has. If the file does not exist, then this function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 returns @code{nil}. Note that symbolic links have no effect on this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 function, because they are not considered to be names of the files they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 link to.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 % ls -l foo*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 -rw-rw-rw- 2 rms 4 Aug 19 01:27 foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 -rw-rw-rw- 2 rms 4 Aug 19 01:27 foo1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 (file-nlinks "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 @result{} 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 (file-nlinks "doesnt-exist")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 @defun file-attributes filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 This function returns a list of attributes of file @var{filename}. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 the specified file cannot be opened, it returns @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 The elements of the list, in order, are:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 @enumerate 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 @code{t} for a directory, a string for a symbolic link (the name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 linked to), or @code{nil} for a text file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 @c Wordy so as to prevent an overfull hbox. --rjc 15mar92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 The number of names the file has. Alternate names, also known as hard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 links, can be created by using the @code{add-name-to-file} function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 (@pxref{Changing File Attributes}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 The file's @sc{uid}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 The file's @sc{gid}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 The time of last access, as a list of two integers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 The first integer has the high-order 16 bits of time,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 the second has the low 16 bits. (This is similar to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 value of @code{current-time}; see @ref{Time of Day}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 The time of last modification as a list of two integers (as above).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 The time of last status change as a list of two integers (as above).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 The size of the file in bytes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 The file's modes, as a string of ten letters or dashes,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 as in @samp{ls -l}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 @code{t} if the file's @sc{gid} would change if file were
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 deleted and recreated; @code{nil} otherwise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 The file's inode number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 The file system number of the file system that the file is in. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 element and the file's inode number together give enough information to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 distinguish any two files on the system---no two files can have the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 values for both of these numbers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 For example, here are the file attributes for @file{files.texi}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 (file-attributes "files.texi")
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
974 @result{} (nil
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
975 1
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
976 2235
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
977 75
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
978 (8489 20284)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
979 (8489 20284)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 (8489 20285)
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
981 14906
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
982 "-rw-rw-rw-"
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
983 nil
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 129500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 -32252)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 and here is how the result is interpreted:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 @item nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 is neither a directory nor a symbolic link.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 @item 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 has only one name (the name @file{files.texi} in the current default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 directory).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 @item 2235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 is owned by the user with @sc{uid} 2235.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 @item 75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 is in the group with @sc{gid} 75.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 @item (8489 20284)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 was last accessed on Aug 19 00:09. Use @code{format-time-string} to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 ! convert this number into a time string. @xref{Time Conversion}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 @item (8489 20284)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 was last modified on Aug 19 00:09.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 @item (8489 20285)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 last had its inode changed on Aug 19 00:09.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 @item 14906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 is 14906 characters long.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 @item "-rw-rw-rw-"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 has a mode of read and write access for the owner, group, and world.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 @item nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 would retain the same @sc{gid} if it were recreated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 @item 129500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 has an inode number of 129500.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 @item -32252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 is on file system number -32252.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 @node Changing File Attributes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 @section Changing File Names and Attributes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 @cindex renaming files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 @cindex copying files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 @cindex deleting files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 @cindex linking files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 @cindex setting modes of files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 The functions in this section rename, copy, delete, link, and set the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 modes of files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1043 In the functions that have arguments @var{newname} and
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1044 @var{ok-if-already-exists}, if a file by the name of @var{newname}
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1045 already exists, the actions taken depend on the value of
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1046 @var{ok-if-already-exists}:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 Signal a @code{file-already-exists} error if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 @var{ok-if-already-exists} is @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 @item
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1054 Request confirmation if @var{ok-if-already-exists} is a number. This is
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1055 what happens when the function is invoked interactively.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 Replace the old file without confirmation if @var{ok-if-already-exists}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 is any other value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1062 @deffn Command add-name-to-file filename newname &optional ok-if-already-exists
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 @cindex file with multiple names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 @cindex file hard link
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1065 This function gives the file named @var{filename} the additional name
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 @var{newname}. This means that @var{newname} becomes a new ``hard
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1067 link'' to @var{filename}. Both these arguments must be strings.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 In the first part of the following example, we list two files,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 @file{foo} and @file{foo3}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 % ls -l fo*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 -rw-rw-rw- 1 rms 29 Aug 18 20:32 foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 -rw-rw-rw- 1 rms 24 Aug 18 20:31 foo3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 Then we evaluate the form @code{(add-name-to-file "~/lewis/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 "~/lewis/foo2")}. Again we list the files. This shows two names,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 @file{foo} and @file{foo2}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 (add-name-to-file "~/lewis/foo1" "~/lewis/foo2")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 % ls -l fo*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 -rw-rw-rw- 2 rms 29 Aug 18 20:32 foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 -rw-rw-rw- 2 rms 29 Aug 18 20:32 foo2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 -rw-rw-rw- 1 rms 24 Aug 18 20:31 foo3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 @c !!! Check whether this set of examples is consistent. --rjc 15mar92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 Finally, we evaluate the following:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 (add-name-to-file "~/lewis/foo" "~/lewis/foo3" t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 and list the files again. Now there are three names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 for one file: @file{foo}, @file{foo2}, and @file{foo3}. The old
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 contents of @file{foo3} are lost.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 (add-name-to-file "~/lewis/foo1" "~/lewis/foo3")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 % ls -l fo*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 -rw-rw-rw- 3 rms 29 Aug 18 20:32 foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 -rw-rw-rw- 3 rms 29 Aug 18 20:32 foo2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 -rw-rw-rw- 3 rms 29 Aug 18 20:32 foo3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1124 This function is meaningless on non-Unix systems, where multiple names
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1125 for one file are not allowed.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 See also @code{file-nlinks} in @ref{File Attributes}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 @deffn Command rename-file filename newname &optional ok-if-already-exists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 This command renames the file @var{filename} as @var{newname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 If @var{filename} has additional names aside from @var{filename}, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 continues to have those names. In fact, adding the name @var{newname}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 with @code{add-name-to-file} and then deleting @var{filename} has the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 same effect as renaming, aside from momentary intermediate states.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 In an interactive call, this function prompts for @var{filename} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 @var{newname} in the minibuffer; also, it requests confirmation if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 @var{newname} already exists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1143 @deffn Command copy-file filename newname &optional ok-if-already-exists time
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1144 This command copies the file @var{filename} to @var{newname}. An
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1145 error is signaled if @var{filename} does not exist.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 If @var{time} is non-@code{nil}, then this functions gives the new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 file the same last-modified time that the old one has. (This works on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 only some operating systems.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 In an interactive call, this function prompts for @var{filename} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 @var{newname} in the minibuffer; also, it requests confirmation if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 @var{newname} already exists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 @deffn Command delete-file filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 @pindex rm
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 This command deletes the file @var{filename}, like the shell command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 @samp{rm @var{filename}}. If the file has multiple names, it continues
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 to exist under the other names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 A suitable kind of @code{file-error} error is signaled if the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 does not exist, or is not deletable. (On Unix, a file is deletable if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 its directory is writable.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 See also @code{delete-directory} in @ref{Create/Delete Dirs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1169 @deffn Command make-symbolic-link filename newname &optional ok-if-already-exists
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 @pindex ln
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 @kindex file-already-exists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 This command makes a symbolic link to @var{filename}, named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 @var{newname}. This is like the shell command @samp{ln -s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 @var{filename} @var{newname}}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 In an interactive call, this function prompts for @var{filename} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 @var{newname} in the minibuffer; also, it requests confirmation if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 @var{newname} already exists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 @defun set-file-modes filename mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 This function sets mode bits of @var{filename} to @var{mode} (which must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 be an integer). Only the low 12 bits of @var{mode} are used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 @defun set-default-file-modes mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 This function sets the default file protection for new files created by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 XEmacs and its subprocesses. Every file created with XEmacs initially has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 this protection. On Unix, the default protection is the bitwise
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 complement of the ``umask'' value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 The argument @var{mode} must be an integer. Only the low 9 bits of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 @var{mode} are used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 Saving a modified version of an existing file does not count as creating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 the file; it does not change the file's mode, and does not use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 default file protection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 @defun default-file-modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 This function returns the current default protection value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 @cindex MS-DOS and file modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 @cindex file modes and MS-DOS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 On MS-DOS, there is no such thing as an ``executable'' file mode bit.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 So Emacs considers a file executable if its name ends in @samp{.com},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 @samp{.bat} or @samp{.exe}. This is reflected in the values returned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 by @code{file-modes} and @code{file-attributes}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 @node File Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 @section File Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 @cindex file names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 Files are generally referred to by their names, in XEmacs as elsewhere.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 File names in XEmacs are represented as strings. The functions that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 operate on a file all expect a file name argument.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 In addition to operating on files themselves, XEmacs Lisp programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 often need to operate on the names; i.e., to take them apart and to use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 part of a name to construct related file names. This section describes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 how to manipulate file names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 The functions in this section do not actually access files, so they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 can operate on file names that do not refer to an existing file or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1229 On MS-DOS, these functions understand MS-DOS file-name syntax as well as
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1230 Unix syntax. This is so that all the standard Lisp libraries can specify
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1231 file names in Unix syntax and work properly on all systems without
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1232 change. Similarly for other operating systems.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 * File Name Components:: The directory part of a file name, and the rest.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236 * Directory Names:: A directory's name as a directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 is different from its name as a file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 * Relative File Names:: Some file names are relative to a current directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 * File Name Expansion:: Converting relative file names to absolute ones.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 * Unique File Names:: Generating names for temporary files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 * File Name Completion:: Finding the completions for a given file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 * User Name Completion:: Finding the completions for a given user name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 @node File Name Components
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 @subsection File Name Components
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 @cindex directory part (of file name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 @cindex nondirectory part (of file name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 @cindex version number (in file name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 The operating system groups files into directories. To specify a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 file, you must specify the directory and the file's name within that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 directory. Therefore, XEmacs considers a file name as having two main
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 parts: the @dfn{directory name} part, and the @dfn{nondirectory} part
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 (or @dfn{file name within the directory}). Either part may be empty.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 Concatenating these two parts reproduces the original file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 On Unix, the directory part is everything up to and including the last
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1259 slash; the nondirectory part is the rest.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 For some purposes, the nondirectory part is further subdivided into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 the name proper and the @dfn{version number}. On Unix, only backup
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1263 files have version numbers in their names.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 @defun file-name-directory filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266 This function returns the directory part of @var{filename} (or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 @code{nil} if @var{filename} does not include a directory part). On
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1268 Unix, the function returns a string ending in a slash.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 (file-name-directory "lewis/foo") ; @r{Unix example}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 @result{} "lewis/"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 (file-name-directory "foo") ; @r{Unix example}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 @defun file-name-nondirectory filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 This function returns the nondirectory part of @var{filename}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 (file-name-nondirectory "lewis/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 @result{} "foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 (file-name-nondirectory "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 @result{} "foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 @defun file-name-sans-versions filename &optional keep-backup-version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 This function returns @var{filename} without any file version numbers,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 backup version numbers, or trailing tildes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 @c XEmacs feature?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 If @var{keep-backup-version} is non-@code{nil}, we do not remove backup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 version numbers, only true file version numbers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 (file-name-sans-versions "~rms/foo.~1~")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 @result{} "~rms/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 (file-name-sans-versions "~rms/foo~")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 @result{} "~rms/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 (file-name-sans-versions "~rms/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 @result{} "~rms/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 @defun file-name-sans-extension filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 This function returns @var{filename} minus its ``extension,'' if any.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323 The extension, in a file name, is the part that starts with the last
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324 @samp{.} in the last name component. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 (file-name-sans-extension "foo.lose.c")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 @result{} "foo.lose"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 (file-name-sans-extension "big.hack/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 @result{} "big.hack/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 @node Directory Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 @subsection Directory Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 @cindex directory name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 @cindex file name of directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339 A @dfn{directory name} is the name of a directory. A directory is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340 kind of file, and it has a file name, which is related to the directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 name but not identical to it. (This is not quite the same as the usual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 Unix terminology.) These two different names for the same entity are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 related by a syntactic transformation. On Unix, this is simple: a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 directory name ends in a slash, whereas the directory's name as a file
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1345 lacks that slash.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 The difference between a directory name and its name as a file is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 subtle but crucial. When an XEmacs variable or function argument is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 described as being a directory name, a file name of a directory is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 acceptable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352 The following two functions convert between directory names and file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 names. They do nothing special with environment variable substitutions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 such as @samp{$HOME}, and the constructs @samp{~}, and @samp{..}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 @defun file-name-as-directory filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 This function returns a string representing @var{filename} in a form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 that the operating system will interpret as the name of a directory. In
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1359 Unix, this means appending a slash to the string.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363 (file-name-as-directory "~rms/lewis")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 @result{} "~rms/lewis/"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 @defun directory-file-name dirname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 This function returns a string representing @var{dirname} in a form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 that the operating system will interpret as the name of a file. On
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1372 Unix, this means removing a final slash from the string.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 (directory-file-name "~lewis/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 @result{} "~lewis"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 @cindex directory name abbreviation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 Directory name abbreviations are useful for directories that are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 normally accessed through symbolic links. Sometimes the users recognize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 primarily the link's name as ``the name'' of the directory, and find it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386 annoying to see the directory's ``real'' name. If you define the link
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 name as an abbreviation for the ``real'' name, XEmacs shows users the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 abbreviation instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 If you wish to convert a directory name to its abbreviation, use this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 function:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1393 @defun abbreviate-file-name filename &optional hack-homedir
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 This function applies abbreviations from @code{directory-abbrev-alist}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 to its argument, and substitutes @samp{~} for the user's home
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 @c XEmacs feature?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399 If @var{hack-homedir} is non-@code{nil}, then this also substitutes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 @samp{~} for the user's home directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 @defvar directory-abbrev-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405 The variable @code{directory-abbrev-alist} contains an alist of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 abbreviations to use for file directories. Each element has the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 @code{(@var{from} . @var{to})}, and says to replace @var{from} with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 @var{to} when it appears in a directory name. The @var{from} string is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 actually a regular expression; it should always start with @samp{^}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 The function @code{abbreviate-file-name} performs these substitutions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 You can set this variable in @file{site-init.el} to describe the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 abbreviations appropriate for your site.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 Here's an example, from a system on which file system @file{/home/fsf}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 and so on are normally accessed through symbolic links named @file{/fsf}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 and so on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 (("^/home/fsf" . "/fsf")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 ("^/home/gp" . "/gp")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 ("^/home/gd" . "/gd"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 @c To convert a directory name to its abbreviation, use this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427 @c function:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 @c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 @c @defun abbreviate-file-name dirname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 @c This function applies abbreviations from @code{directory-abbrev-alist}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 @c to its argument, and substitutes @samp{~} for the user's home
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432 @c directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 @c @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 @node Relative File Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 @subsection Absolute and Relative File Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437 @cindex absolute file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 @cindex relative file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 All the directories in the file system form a tree starting at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 root directory. A file name can specify all the directory names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 starting from the root of the tree; then it is called an @dfn{absolute}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 file name. Or it can specify the position of the file in the tree
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 relative to a default directory; then it is called a @dfn{relative}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 file name. On Unix, an absolute file name starts with a slash or a
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1446 tilde (@samp{~}), and a relative one does not.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 @defun file-name-absolute-p filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 This function returns @code{t} if file @var{filename} is an absolute
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1450 file name, @code{nil} otherwise.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 (file-name-absolute-p "~rms/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 (file-name-absolute-p "rms/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 (file-name-absolute-p "/user/rms/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 @node File Name Expansion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 @subsection Functions that Expand Filenames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 @cindex expansion of file names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 @dfn{Expansion} of a file name means converting a relative file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 to an absolute one. Since this is done relative to a default directory,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 you must specify the default directory name as well as the file name to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 be expanded. Expansion also simplifies file names by eliminating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 redundancies such as @file{./} and @file{@var{name}/../}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 @defun expand-file-name filename &optional directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479 This function converts @var{filename} to an absolute file name. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 @var{directory} is supplied, it is the directory to start with if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 @var{filename} is relative. (The value of @var{directory} should itself
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 be an absolute directory name; it may start with @samp{~}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 Otherwise, the current buffer's value of @code{default-directory} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 used. For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 (expand-file-name "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 @result{} "/xcssun/users/rms/lewis/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 (expand-file-name "../foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 @result{} "/xcssun/users/rms/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 (expand-file-name "foo" "/usr/spool/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 @result{} "/usr/spool/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 (expand-file-name "$HOME/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 @result{} "/xcssun/users/rms/lewis/$HOME/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 Filenames containing @samp{.} or @samp{..} are simplified to their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 canonical form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 (expand-file-name "bar/../foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 @result{} "/xcssun/users/rms/lewis/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 @samp{~/} at the beginning is expanded into the user's home directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 A @samp{/} or @samp{~} following a @samp{/}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 Note that @code{expand-file-name} does @emph{not} expand environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 variables; only @code{substitute-in-file-name} does that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 @defun file-relative-name filename &optional directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 This function does the inverse of expansion---it tries to return a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 relative name that is equivalent to @var{filename} when interpreted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 relative to @var{directory}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 @c XEmacs feature?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 If @var{directory} is @code{nil} or omitted, the value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 @code{default-directory} is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 (file-relative-name "/foo/bar" "/foo/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 @result{} "bar")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 (file-relative-name "/foo/bar" "/hack/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 @result{} "../foo/bar")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 @defvar default-directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 The value of this buffer-local variable is the default directory for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 current buffer. It should be an absolute directory name; it may start
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 with @samp{~}. This variable is local in every buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 @code{expand-file-name} uses the default directory when its second
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 argument is @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 On Unix systems, the value is always a string ending with a slash.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 default-directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 @result{} "/user/lewis/manual/"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 @defun substitute-in-file-name filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 This function replaces environment variable references in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 @var{filename} with the environment variable values. Following standard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 Unix shell syntax, @samp{$} is the prefix to substitute an environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 variable value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 The environment variable name is the series of alphanumeric characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 (including underscores) that follow the @samp{$}. If the character following
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 the @samp{$} is a @samp{@{}, then the variable name is everything up to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 matching @samp{@}}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 @c Wordy to avoid overfull hbox. --rjc 15mar92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 Here we assume that the environment variable @code{HOME}, which holds
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 the user's home directory name, has value @samp{/xcssun/users/rms}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 (substitute-in-file-name "$HOME/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 @result{} "/xcssun/users/rms/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 @c If a @samp{~} or a @samp{/} appears following a @samp{/}, after
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 @c substitution, everything before the following @samp{/} is discarded:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 After substitution, a @samp{/} or @samp{~} following a @samp{/} is taken
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 to be the start of an absolute file name that overrides what precedes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 it, so everything before that @samp{/} or @samp{~} is deleted. For
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 (substitute-in-file-name "bar/~/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 @result{} "~/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 (substitute-in-file-name "/usr/local/$HOME/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 @result{} "/xcssun/users/rms/foo"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 @node Unique File Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 @subsection Generating Unique File Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 Some programs need to write temporary files. Here is the usual way to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 construct a name for such a file:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 (make-temp-name (expand-file-name @var{name-of-application} (temp-directory)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 Here we use @code{(temp-directory)} to specify a directory for temporary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 files---under Unix, it will normally evaluate to @file{"/tmp/"}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 job of @code{make-temp-name} is to prevent two different users or two
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 different processes from trying to use the same name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 @defun temp-directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 This function returns the name of the directory to use for temporary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618 files. Under Unix, this will be the value of @code{TMPDIR}, defaulting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 to @file{/tmp}. On Windows, this will be obtained from the @code{TEMP}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 or @code{TMP} environment variables, defaulting to @file{/}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 Note that the @code{temp-directory} function does not exist under FSF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 Emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 @defun make-temp-name prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 This function generates a temporary file name starting with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 @var{prefix}. The Emacs process number forms part of the result, so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 there is no danger of generating a name being used by another process.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 (make-temp-name "/tmp/foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 @result{} "/tmp/fooGaAQjC"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 In addition, this function makes an attempt to choose a name that does
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1639 not specify an existing file. To make this work, @var{prefix} should be
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 an absolute file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 To avoid confusion, each Lisp application should preferably use a unique
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 @var{prefix} to @code{make-temp-name}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 @node File Name Completion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 @subsection File Name Completion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 @cindex file name completion subroutines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 @cindex completion, file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 This section describes low-level subroutines for completing a file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 name. For other completion functions, see @ref{Completion}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 @defun file-name-all-completions partial-filename directory
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1655 This function returns a list of all possible completions for files
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 whose name starts with @var{partial-filename} in directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 @var{directory}. The order of the completions is the order of the files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 in the directory, which is unpredictable and conveys no useful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 The argument @var{partial-filename} must be a file name containing no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 directory part and no slash. The current buffer's default directory is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 prepended to @var{directory}, if @var{directory} is not absolute.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1665 File names which end with any member of @code{completion-ignored-extensions}
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1666 are not considered as possible completions for @var{partial-filename} unless
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1667 there is no other possible completion. @code{completion-ignored-extensions}
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1668 is not applied to the names of directories.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1669
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 In the following example, suppose that the current default directory,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 @file{~rms/lewis}, has five files whose names begin with @samp{f}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 @file{foo}, @file{file~}, @file{file.c}, @file{file.c.~1~}, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 @file{file.c.~2~}.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 (file-name-all-completions "f" "")
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1678 @result{} ("foo" "file~" "file.c.~2~"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 "file.c.~1~" "file.c")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 @group
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1683 (file-name-all-completions "fo" "")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 @result{} ("foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1689 @defun file-name-completion partial-filename directory
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1690 This function completes the file name @var{partial-filename} in directory
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 @var{directory}. It returns the longest prefix common to all file names
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1692 in directory @var{directory} that start with @var{partial-filename}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1694 If only one match exists and @var{partial-filename} matches it exactly, the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 function returns @code{t}. The function returns @code{nil} if directory
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1696 @var{directory} contains no name starting with @var{partial-filename}.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1697
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1698 File names which end with any member of @code{completion-ignored-extensions}
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1699 are not considered as possible completions for @var{partial-filename} unless
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1700 there is no other possible completion. @code{completion-ignored-extensions}
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1701 is not applied to the names of directories.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 In the following example, suppose that the current default directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 has five files whose names begin with @samp{f}: @file{foo},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 @file{file~}, @file{file.c}, @file{file.c.~1~}, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 @file{file.c.~2~}.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 (file-name-completion "fi" "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 @result{} "file"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 (file-name-completion "file.c.~1" "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 @result{} "file.c.~1~"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 (file-name-completion "file.c.~1~" "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 (file-name-completion "file.c.~3" "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 @defopt completion-ignored-extensions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 @code{file-name-completion} usually ignores file names that end in any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 string in this list. It does not ignore them when all the possible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 completions end in one of these suffixes or when a buffer showing all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 possible completions is displayed.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 A typical value might look like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 completion-ignored-extensions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 @result{} (".o" ".elc" "~" ".dvi")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 @end defopt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 @node User Name Completion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 @subsection User Name Completion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 @cindex user name completion subroutines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 @cindex completion, user name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 This section describes low-level subroutines for completing a user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 name. For other completion functions, see @ref{Completion}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 @defun user-name-all-completions partial-username
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1756 This function returns a list of all possible completions for a user name
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1757 starting with @var{partial-username}. The order of the completions is
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1758 unpredictable and conveys no useful information.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1760 The argument @var{partial-username} must be a partial user name
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 containing no tilde character and no slash.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1764 @defun user-name-completion partial-username
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1765 This function completes a user name from @var{partial-username}. It
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1766 returns the longest prefix common to all user names that start with
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1767 @var{partial-username}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1769 If only one match exists and @var{partial-username} matches it exactly,
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1770 the function returns @code{t}. The function returns @code{nil} if no
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1771 user name starting with @var{partial-username} exists.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1774 @defun user-name-completion-1 partial-username
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1775 This function completes the partial user name @var{partial-username},
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1776 like @code{user-name-completion}, differing only in the return value.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 This function returns the cons of the completion returned by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 @code{user-name-completion}, and a boolean indicating whether that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 completion was unique.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 @node Contents of Directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 @section Contents of Directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785 @cindex directory-oriented functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 @cindex file names in directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 A directory is a kind of file that contains other files entered under
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 various names. Directories are a feature of the file system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 XEmacs can list the names of the files in a directory as a Lisp list,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 or display the names in a buffer using the @code{ls} shell command. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 the latter case, it can optionally display information about each file,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 depending on the value of switches passed to the @code{ls} command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 @defun directory-files directory &optional full-name match-regexp nosort files-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 This function returns a list of the names of the files in the directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 @var{directory}. By default, the list is in alphabetical order.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 If @var{full-name} is non-@code{nil}, the function returns the files'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 absolute file names. Otherwise, it returns just the names relative to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 the specified directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 If @var{match-regexp} is non-@code{nil}, this function returns only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 those file names that contain that regular expression---the other file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 names are discarded from the list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 If @var{nosort} is non-@code{nil}, @code{directory-files} does not sort
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 the list, so you get the file names in no particular order. Use this if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811 you want the utmost possible speed and don't care what order the files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 are processed in. If the order of processing is visible to the user,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 then the user will probably be happier if you do sort the names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 @c XEmacs feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 If @var{files-only} is the symbol @code{t}, then only the ``files'' in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817 the directory will be returned; subdirectories will be excluded. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 @var{files-only} is not @code{nil} and not @code{t}, then only the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 subdirectories will be returned. Otherwise, if @var{files-only} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820 @code{nil} (the default) then both files and subdirectories will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 (directory-files "~lewis")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 @result{} ("#foo#" "#foo.el#" "." ".."
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1827 "dired-mods.el" "files.texi"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 "files.texi.~1~")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 An error is signaled if @var{directory} is not the name of a directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833 that can be read.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 @ignore @c Not in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 @defun file-name-all-versions file dirname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 This function returns a list of all versions of the file named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 @var{file} in directory @var{dirname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843 @defun insert-directory file switches &optional wildcard full-directory-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 This function inserts (in the current buffer) a directory listing for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 directory @var{file}, formatted with @code{ls} according to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 @var{switches}. It leaves point after the inserted text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 The argument @var{file} may be either a directory name or a file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 specification including wildcard characters. If @var{wildcard} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 non-@code{nil}, that means treat @var{file} as a file specification with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 wildcards.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 If @var{full-directory-p} is non-@code{nil}, that means @var{file} is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 directory and switches do not contain @samp{-d}, so that the listing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 should show the full contents of the directory. (The @samp{-d} option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 to @code{ls} says to describe a directory itself rather than its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 contents.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 This function works by running a directory listing program whose name is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 in the variable @code{insert-directory-program}. If @var{wildcard} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 non-@code{nil}, it also runs the shell specified by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 @code{shell-file-name}, to expand the wildcards.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 @defvar insert-directory-program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 This variable's value is the program to run to generate a directory listing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867 for the function @code{insert-directory}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 @node Create/Delete Dirs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 @section Creating and Deleting Directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 @c Emacs 19 features
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 Most XEmacs Lisp file-manipulation functions get errors when used on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 files that are directories. For example, you cannot delete a directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 with @code{delete-file}. These special functions exist to create and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 delete directories.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879 @deffn Command make-directory dirname &optional parents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 This function creates a directory named @var{dirname}. Interactively,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 the default choice of directory to create is the current default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882 directory for file names. That is useful when you have visited a file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 in a nonexistent directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885 @c XEmacs feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 Non-interactively, optional argument @var{parents} says whether to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 create parent directories if they don't exist. (Interactively, this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 always happens.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 @deffn Command delete-directory dirname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 This function deletes the directory named @var{dirname}. The function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 @code{delete-file} does not work for files that are directories; you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 must use @code{delete-directory} in that case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897 @node Magic File Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 @section Making Certain File Names ``Magic''
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 @cindex magic file names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 You can implement special handling for certain file names. This is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 called making those names @dfn{magic}. You must supply a regular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 expression to define the class of names (all those that match the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 regular expression), plus a handler that implements all the primitive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906 XEmacs file operations for file names that do match.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 The variable @code{file-name-handler-alist} holds a list of handlers,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 together with regular expressions that determine when to apply each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 handler. Each element has this form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 (@var{regexp} . @var{handler})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 All the XEmacs primitives for file access and file name transformation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 check the given file name against @code{file-name-handler-alist}. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 the file name matches @var{regexp}, the primitives handle that file by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 calling @var{handler}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 The first argument given to @var{handler} is the name of the primitive;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 the remaining arguments are the arguments that were passed to that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 operation. (The first of these arguments is typically the file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 itself.) For example, if you do this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 (file-exists-p @var{filename})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 and @var{filename} has handler @var{handler}, then @var{handler} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 called like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936 (funcall @var{handler} 'file-exists-p @var{filename})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 Here are the operations that a magic file name handler gets to handle:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 @code{add-name-to-file}, @code{copy-file}, @code{delete-directory},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 @code{delete-file},@*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 @code{diff-latest-backup-file},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945 @code{directory-file-name},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 @code{directory-files},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 @code{dired-compress-file}, @code{dired-uncache},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 @code{expand-file-name},@*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 @code{file-accessible-directory-p},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 @code{file-attributes}, @code{file-directory-p},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 @code{file-executable-p}, @code{file-exists-p}, @code{file-local-copy},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 @code{file-modes}, @code{file-name-all-completions},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 @code{file-name-as-directory}, @code{file-name-completion},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954 @code{file-name-directory}, @code{file-name-nondirectory},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 @code{file-name-sans-versions}, @code{file-newer-than-file-p},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 @code{file-readable-p}, @code{file-regular-p}, @code{file-symlink-p},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 @code{file-truename}, @code{file-writable-p},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 @code{get-file-buffer},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 @code{insert-directory},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 @code{insert-file-contents}, @code{load}, @code{make-directory},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 @code{make-symbolic-link}, @code{rename-file}, @code{set-file-modes},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 @code{set-visited-file-modtime}, @code{unhandled-file-name-directory},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 @code{verify-visited-file-modtime}, @code{write-region}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 Handlers for @code{insert-file-contents} typically need to clear the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 buffer's modified flag, with @code{(set-buffer-modified-p nil)}, if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 @var{visit} argument is non-@code{nil}. This also has the effect of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 unlocking the buffer if it is locked.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 The handler function must handle all of the above operations, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 possibly others to be added in the future. It need not implement all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 these operations itself---when it has nothing special to do for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 certain operation, it can reinvoke the primitive, to handle the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 operation ``in the usual way''. It should always reinvoke the primitive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 for an operation it does not recognize. Here's one way to do this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 (defun my-file-handler (operation &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 ;; @r{First check for the specific operations}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 ;; @r{that we have special handling for.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 (cond ((eq operation 'insert-file-contents) @dots{})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 ((eq operation 'write-region) @dots{})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 ;; @r{Handle any operation we don't know about.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 (t (let ((inhibit-file-name-handlers
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
1986 (cons 'my-file-handler
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 (and (eq inhibit-file-name-operation operation)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 inhibit-file-name-handlers)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 (inhibit-file-name-operation operation))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 (apply operation args)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 When a handler function decides to call the ordinary Emacs primitive for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 the operation at hand, it needs to prevent the primitive from calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 the same handler once again, thus leading to an infinite recursion. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 example above shows how to do this, with the variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 @code{inhibit-file-name-handlers} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 @code{inhibit-file-name-operation}. Be careful to use them exactly as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 shown above; the details are crucial for proper behavior in the case of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 multiple handlers, and for operations that have two file names that may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 each have handlers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 @defvar inhibit-file-name-handlers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 This variable holds a list of handlers whose use is presently inhibited
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 for a certain operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 @defvar inhibit-file-name-operation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 The operation for which certain handlers are presently inhibited.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2012 @defun find-file-name-handler filename &optional operation
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2013 This function returns the handler function for file name @var{filename}, or
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 @code{nil} if there is none. The argument @var{operation} should be the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 operation to be performed on the file---the value you will pass to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 handler as its first argument when you call it. The operation is needed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017 for comparison with @code{inhibit-file-name-operation}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020 @defun file-local-copy filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021 This function copies file @var{filename} to an ordinary non-magic file,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 if it isn't one already.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024 If @var{filename} specifies a ``magic'' file name, which programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025 outside Emacs cannot directly read or write, this copies the contents to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026 an ordinary file and returns that file's name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028 If @var{filename} is an ordinary file name, not magic, then this function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029 does nothing and returns @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032 @defun unhandled-file-name-directory filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033 This function returns the name of a directory that is not magic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 It uses the directory part of @var{filename} if that is not magic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 Otherwise, it asks the handler what to do.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 This is useful for running a subprocess; every subprocess must have a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038 non-magic directory to serve as its current directory, and this function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 is a good way to come up with one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 @node Partial Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043 @section Partial Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 @cindex partial files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 * Intro to Partial Files::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 * Creating a Partial File::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 * Detached Partial Files::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 @node Intro to Partial Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 @subsection Intro to Partial Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 A @dfn{partial file} is a section of a buffer (called the @dfn{master
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056 buffer}) that is placed in its own buffer and treated as its own file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057 Changes made to the partial file are not reflected in the master buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 until the partial file is ``saved'' using the standard buffer save
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059 commands. Partial files can be ``reverted'' (from the master buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 just like normal files. When a file part is active on a master buffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 that section of the master buffer is marked as read-only. Two file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 parts on the same master buffer are not allowed to overlap. Partial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 file buffers are indicated by the words @samp{File Part} in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 modeline.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 The master buffer knows about all the partial files that are active on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 it, and thus killing or reverting the master buffer will be handled
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068 properly. When the master buffer is saved, if there are any unsaved
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 partial files active on it then the user will be given the opportunity
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 to first save these files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 When a partial file buffer is first modified, the master buffer is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 automatically marked as modified so that saving the master buffer will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 work correctly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 @node Creating a Partial File
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077 @subsection Creating a Partial File
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2079 @deffn Command make-file-part &optional start end name buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2080 Make a file part on buffer @var{buffer} out of the region. Call it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 @var{name}. This command creates a new buffer containing the contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 of the region and marks the buffer as referring to the specified buffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083 called the @dfn{master buffer}. When the file-part buffer is saved, its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084 changes are integrated back into the master buffer. When the master
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085 buffer is deleted, all file parts are deleted with it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 When called from a function, expects four arguments, @var{start},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 @var{end}, @var{name}, and @var{buffer}, all of which are optional and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 default to the beginning of @var{buffer}, the end of @var{buffer}, a
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2090 name generated from @var{buffer}'s name, and the current buffer,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 respectively.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2092 @end deffn
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 @node Detached Partial Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 @subsection Detached Partial Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 Every partial file has an extent in the master buffer associated with it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 (called the @dfn{master extent}), marking where in the master buffer the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099 partial file begins and ends. If the text in master buffer that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 contained by the extent is deleted, then the extent becomes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2101 ``detached'', meaning that it no longer refers to a specific region of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2102 the master buffer. This can happen either when the text is deleted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2103 directly or when the master buffer is reverted. Neither of these should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2104 happen in normal usage because the master buffer should generally not be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2105 edited directly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2107 Before doing any operation that references a partial file's master
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2108 extent, XEmacs checks to make sure that the extent is not detached. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2109 this is the case, XEmacs warns the user of this and the master extent is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2110 deleted out of the master buffer, disconnecting the file part. The file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2111 part's filename is cleared and thus must be explicitly specified if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2112 detached file part is to be saved.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2114 @node Format Conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2115 @section File Format Conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2117 @cindex file format conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2118 @cindex encoding file formats
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2119 @cindex decoding file formats
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2120 The variable @code{format-alist} defines a list of @dfn{file formats},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121 which describe textual representations used in files for the data (text,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122 text-properties, and possibly other information) in an Emacs buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2123 Emacs performs format conversion if appropriate when reading and writing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2124 files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 @defvar format-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 This list contains one format definition for each defined file format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 @cindex format definition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131 Each format definition is a list of this form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134 (@var{name} @var{doc-string} @var{regexp} @var{from-fn} @var{to-fn} @var{modify} @var{mode-fn})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137 Here is what the elements in a format definition mean:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 @table @var
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140 @item name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 The name of this format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 @item doc-string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 A documentation string for the format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146 @item regexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 A regular expression which is used to recognize files represented in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 this format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150 @item from-fn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151 A function to call to decode data in this format (to convert file data into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152 the usual Emacs data representation).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 The @var{from-fn} is called with two args, @var{begin} and @var{end},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155 which specify the part of the buffer it should convert. It should convert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 the text by editing it in place. Since this can change the length of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157 text, @var{from-fn} should return the modified end position.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 One responsibility of @var{from-fn} is to make sure that the beginning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 of the file no longer matches @var{regexp}. Otherwise it is likely to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2161 get called again.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163 @item to-fn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164 A function to call to encode data in this format (to convert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 the usual Emacs data representation into this format).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167 The @var{to-fn} is called with two args, @var{begin} and @var{end},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 which specify the part of the buffer it should convert. There are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 two ways it can do the conversion:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2172 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2173 By editing the buffer in place. In this case, @var{to-fn} should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2174 return the end-position of the range of text, as modified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2177 By returning a list of annotations. This is a list of elements of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2178 form @code{(@var{position} . @var{string})}, where @var{position} is an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 integer specifying the relative position in the text to be written, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 @var{string} is the annotation to add there. The list must be sorted in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 order of position when @var{to-fn} returns it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2182
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183 When @code{write-region} actually writes the text from the buffer to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 file, it intermixes the specified annotations at the corresponding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 positions. All this takes place without modifying the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188 @item modify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 A flag, @code{t} if the encoding function modifies the buffer, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2190 @code{nil} if it works by returning a list of annotations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2192 @item mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2193 A mode function to call after visiting a file converted from this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2194 format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2195 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197 The function @code{insert-file-contents} automatically recognizes file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2198 formats when it reads the specified file. It checks the text of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2199 beginning of the file against the regular expressions of the format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2200 definitions, and if it finds a match, it calls the decoding function for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2201 that format. Then it checks all the known formats over again.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2202 It keeps checking them until none of them is applicable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204 Visiting a file, with @code{find-file-noselect} or the commands that use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2205 it, performs conversion likewise (because it calls
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 @code{insert-file-contents}); it also calls the mode function for each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2207 format that it decodes. It stores a list of the format names in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2208 buffer-local variable @code{buffer-file-format}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2210 @defvar buffer-file-format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211 This variable states the format of the visited file. More precisely,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212 this is a list of the file format names that were decoded in the course
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 of visiting the current buffer's file. It is always local in all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214 buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2215 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217 When @code{write-region} writes data into a file, it first calls the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 encoding functions for the formats listed in @code{buffer-file-format},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2219 in the order of appearance in the list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2220
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2221 @deffn Command format-write-file file format
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2222 This command writes the current buffer contents into the file @var{file}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223 in format @var{format}, and makes that format the default for future
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224 saves of the buffer. The argument @var{format} is a list of format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2225 names.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2226 @end deffn
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2228 @deffn Command format-find-file file format
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229 This command finds the file @var{file}, converting it according to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 format @var{format}. It also makes @var{format} the default if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 buffer is saved later.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233 The argument @var{format} is a list of format names. If @var{format} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 @code{nil}, no conversion takes place. Interactively, typing just
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 @key{RET} for @var{format} specifies @code{nil}.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2236 @end deffn
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2238 @deffn Command format-insert-file file format &optional start end
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239 This command inserts the contents of file @var{file}, converting it
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2240 according to format @var{format}. If @var{start} and @var{end} are
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 non-@code{nil}, they specify which part of the file to read, as in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 @code{insert-file-contents} (@pxref{Reading from Files}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2244 The return value is like what @code{insert-file-contents} returns: a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2245 list of the absolute file name and the length of the data inserted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246 (after conversion).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2248 The argument @var{format} is a list of format names. If @var{format} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249 @code{nil}, no conversion takes place. Interactively, typing just
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250 @key{RET} for @var{format} specifies @code{nil}.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
2251 @end deffn
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2253 @defvar auto-save-file-format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2254 This variable specifies the format to use for auto-saving. Its value is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255 a list of format names, just like the value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256 @code{buffer-file-format}; but it is used instead of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 @code{buffer-file-format} for writing auto-save files. This variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258 is always local in all buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2259 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 @node Files and MS-DOS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262 @section Files and MS-DOS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 @cindex MS-DOS file types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 @cindex file types on MS-DOS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 @cindex text files and binary files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 @cindex binary files and text files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 Emacs on MS-DOS makes a distinction between text files and binary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 files. This is necessary because ordinary text files on MS-DOS use a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 two character sequence between lines: carriage-return and linefeed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 (@sc{crlf}). Emacs expects just a newline character (a linefeed) between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272 lines. When Emacs reads or writes a text file on MS-DOS, it needs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 convert the line separators. This means it needs to know which files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274 are text files and which are binary. It makes this decision when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275 visiting a file, and records the decision in the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 @code{buffer-file-type} for use when the file is saved.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278 @xref{MS-DOS Subprocesses}, for a related feature for subprocesses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280 @defvar buffer-file-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281 This variable, automatically local in each buffer, records the file type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 of the buffer's visited file. The value is @code{nil} for text,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 @code{t} for binary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286 @defun find-buffer-file-type filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287 This function determines whether file @var{filename} is a text file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 or a binary file. It returns @code{nil} for text, @code{t} for binary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291 @defopt file-name-buffer-file-type-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292 This variable holds an alist for distinguishing text files from binary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293 files. Each element has the form (@var{regexp} . @var{type}), where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 @var{regexp} is matched against the file name, and @var{type} may be is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295 @code{nil} for text, @code{t} for binary, or a function to call to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2296 compute which. If it is a function, then it is called with a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2297 argument (the file name) and should return @code{t} or @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2298 @end defopt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2300 @defopt default-buffer-file-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2301 This variable specifies the default file type for files whose names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2302 don't indicate anything in particular. Its value should be @code{nil}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2303 for text, or @code{t} for binary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2304 @end defopt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2306 @deffn Command find-file-text filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2307 Like @code{find-file}, but treat the file as text regardless of its name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2308 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2309
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2310 @deffn Command find-file-binary filename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2311 Like @code{find-file}, but treat the file as binary regardless of its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2312 name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2313 @end deffn