diff options
| author | Jim Blandy | 1992-12-12 15:32:51 +0000 |
|---|---|---|
| committer | Jim Blandy | 1992-12-12 15:32:51 +0000 |
| commit | 642ef2454b011a69bd615f2f9f34c4c6c7ae1679 (patch) | |
| tree | 943c2eefcc157f0e12bc547eb0782de9f5b0e0eb /src | |
| parent | 58616e67550336ab0555ed21d4f32c329d77bf88 (diff) | |
| download | emacs-642ef2454b011a69bd615f2f9f34c4c6c7ae1679.tar.gz emacs-642ef2454b011a69bd615f2f9f34c4c6c7ae1679.zip | |
Give subprocess creation a way to find a valid current directory
for subprocesses when the buffer's default-directory is a handled
name.
* fileio.c (Funhandled_file_name_directory): New function.
(Qunhandled_file_name_directory): New file-name-handler operation.
(syms_of_fileio): Defsubr Sunhandled_file_name_directory, and
initialize and staticpro Qunhandled_file_name_directory.
* callproc.c (Fcall_process): Call Funhandled_file_name_directory
on the buffer's default directory. Do it earlier in the function
so there's less to GCPRO.
* process.c (create_process): Don't check the validity of the
buffer's default directory here...
(Fstart_process): Instead, do it here; if we call
Funhandled_file_name_directory here, there's less GCPROing to do.
* fileio.c (find_file_handler): Rename this to
Ffind_file_name_handler, and make it visible to lisp. Add a QUIT
to the loop which scans file-name-handler-alist. All uses
changed.
(syms_of_fileio): Mention this new function in the docstring for
Vfile_name_handler_alist. defsubr Sfind_file_name_handler.
* lisp.h (Ffind_file_name_handler): Added extern declaration.
* dired.c: All uses of find_file_handler changed here too.
* fileio.c (syms_of_fileio): Add staticpros for Qexpand_file_name,
Qdirectory_file_name, Qfile_name_directory,
Qfile_name_nondirectory, Qfile_name_as_directory.
Diffstat (limited to 'src')
| -rw-r--r-- | src/fileio.c | 114 |
1 files changed, 77 insertions, 37 deletions
diff --git a/src/fileio.c b/src/fileio.c index 58b7972a757..f96dd00af34 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -133,6 +133,7 @@ Lisp_Object Qexpand_file_name; | |||
| 133 | Lisp_Object Qdirectory_file_name; | 133 | Lisp_Object Qdirectory_file_name; |
| 134 | Lisp_Object Qfile_name_directory; | 134 | Lisp_Object Qfile_name_directory; |
| 135 | Lisp_Object Qfile_name_nondirectory; | 135 | Lisp_Object Qfile_name_nondirectory; |
| 136 | Lisp_Object Qunhandled_file_name_directory; | ||
| 136 | Lisp_Object Qfile_name_as_directory; | 137 | Lisp_Object Qfile_name_as_directory; |
| 137 | Lisp_Object Qcopy_file; | 138 | Lisp_Object Qcopy_file; |
| 138 | Lisp_Object Qmake_directory; | 139 | Lisp_Object Qmake_directory; |
| @@ -155,13 +156,16 @@ Lisp_Object Qinsert_file_contents; | |||
| 155 | Lisp_Object Qwrite_region; | 156 | Lisp_Object Qwrite_region; |
| 156 | Lisp_Object Qverify_visited_file_modtime; | 157 | Lisp_Object Qverify_visited_file_modtime; |
| 157 | 158 | ||
| 158 | /* If FILENAME is handled specially on account of its syntax, | 159 | DEFUN ("find-file-name-handler", Ffind_file_name_handler, Sfind_file_name_handler, 1, 1, 0, |
| 159 | return its handler function. Otherwise, return nil. */ | 160 | "Return FILENAME's handler function, if its syntax is handled specially.\n\ |
| 160 | 161 | Otherwise, return nil.\n\ | |
| 161 | Lisp_Object | 162 | A file name is handled if one of the regular expressions in\n\ |
| 162 | find_file_handler (filename) | 163 | `file-name-handler-alist' matches it.") |
| 163 | Lisp_Object filename; | 164 | (filename) |
| 165 | Lisp_Object filename; | ||
| 164 | { | 166 | { |
| 167 | /* This function must not munge the match data. */ | ||
| 168 | |||
| 165 | Lisp_Object chain; | 169 | Lisp_Object chain; |
| 166 | for (chain = Vfile_name_handler_alist; XTYPE (chain) == Lisp_Cons; | 170 | for (chain = Vfile_name_handler_alist; XTYPE (chain) == Lisp_Cons; |
| 167 | chain = XCONS (chain)->cdr) | 171 | chain = XCONS (chain)->cdr) |
| @@ -176,6 +180,8 @@ find_file_handler (filename) | |||
| 176 | && fast_string_match (string, filename) >= 0) | 180 | && fast_string_match (string, filename) >= 0) |
| 177 | return XCONS (elt)->cdr; | 181 | return XCONS (elt)->cdr; |
| 178 | } | 182 | } |
| 183 | |||
| 184 | QUIT; | ||
| 179 | } | 185 | } |
| 180 | return Qnil; | 186 | return Qnil; |
| 181 | } | 187 | } |
| @@ -198,7 +204,7 @@ on VMS, perhaps instead a string ending in `:', `]' or `>'.") | |||
| 198 | 204 | ||
| 199 | /* If the file name has special constructs in it, | 205 | /* If the file name has special constructs in it, |
| 200 | call the corresponding file handler. */ | 206 | call the corresponding file handler. */ |
| 201 | handler = find_file_handler (file); | 207 | handler = Ffind_file_name_handler (file); |
| 202 | if (!NILP (handler)) | 208 | if (!NILP (handler)) |
| 203 | return call2 (handler, Qfile_name_directory, file); | 209 | return call2 (handler, Qfile_name_directory, file); |
| 204 | 210 | ||
| @@ -232,7 +238,7 @@ or the entire name if it contains no slash.") | |||
| 232 | 238 | ||
| 233 | /* If the file name has special constructs in it, | 239 | /* If the file name has special constructs in it, |
| 234 | call the corresponding file handler. */ | 240 | call the corresponding file handler. */ |
| 235 | handler = find_file_handler (file); | 241 | handler = Ffind_file_name_handler (file); |
| 236 | if (!NILP (handler)) | 242 | if (!NILP (handler)) |
| 237 | return call2 (handler, Qfile_name_nondirectory, file); | 243 | return call2 (handler, Qfile_name_nondirectory, file); |
| 238 | 244 | ||
| @@ -247,6 +253,29 @@ or the entire name if it contains no slash.") | |||
| 247 | 253 | ||
| 248 | return make_string (p, end - p); | 254 | return make_string (p, end - p); |
| 249 | } | 255 | } |
| 256 | |||
| 257 | DEFUN ("unhandled-file-name-directory", Funhandled_file_name_directory, Sunhandled_file_name_directory, 1, 1, 0, | ||
| 258 | "Return a directly usable directory name somehow associated with FILENAME.\n\ | ||
| 259 | A `directly usable' directory name is one that may be used without the\n\ | ||
| 260 | intervention of any file handler.\n\ | ||
| 261 | If FILENAME is a directly usable file itself, return\n\ | ||
| 262 | (file-name-directory FILENAME).\n\ | ||
| 263 | The `call-process' and `start-process' functions use this function to\n\ | ||
| 264 | get a current directory to run processes in.") | ||
| 265 | (filename) | ||
| 266 | Lisp_Object filename; | ||
| 267 | { | ||
| 268 | Lisp_Object handler; | ||
| 269 | |||
| 270 | /* If the file name has special constructs in it, | ||
| 271 | call the corresponding file handler. */ | ||
| 272 | handler = Ffind_file_name_handler (filename); | ||
| 273 | if (!NILP (handler)) | ||
| 274 | return call2 (handler, Qunhandled_file_name_directory, filename); | ||
| 275 | |||
| 276 | return Ffile_name_directory (filename); | ||
| 277 | } | ||
| 278 | |||
| 250 | 279 | ||
| 251 | char * | 280 | char * |
| 252 | file_name_as_directory (out, in) | 281 | file_name_as_directory (out, in) |
| @@ -342,7 +371,7 @@ On VMS, converts \"[X]FOO.DIR\" to \"[X.FOO]\", etc.") | |||
| 342 | 371 | ||
| 343 | /* If the file name has special constructs in it, | 372 | /* If the file name has special constructs in it, |
| 344 | call the corresponding file handler. */ | 373 | call the corresponding file handler. */ |
| 345 | handler = find_file_handler (file); | 374 | handler = Ffind_file_name_handler (file); |
| 346 | if (!NILP (handler)) | 375 | if (!NILP (handler)) |
| 347 | return call2 (handler, Qfile_name_as_directory, file); | 376 | return call2 (handler, Qfile_name_as_directory, file); |
| 348 | 377 | ||
| @@ -518,7 +547,7 @@ it returns a file name such as \"[X]Y.DIR.1\".") | |||
| 518 | 547 | ||
| 519 | /* If the file name has special constructs in it, | 548 | /* If the file name has special constructs in it, |
| 520 | call the corresponding file handler. */ | 549 | call the corresponding file handler. */ |
| 521 | handler = find_file_handler (directory); | 550 | handler = Ffind_file_name_handler (directory); |
| 522 | if (!NILP (handler)) | 551 | if (!NILP (handler)) |
| 523 | return call2 (handler, Qdirectory_file_name, directory); | 552 | return call2 (handler, Qdirectory_file_name, directory); |
| 524 | 553 | ||
| @@ -583,7 +612,7 @@ See also the function `substitute-in-file-name'.") | |||
| 583 | 612 | ||
| 584 | /* If the file name has special constructs in it, | 613 | /* If the file name has special constructs in it, |
| 585 | call the corresponding file handler. */ | 614 | call the corresponding file handler. */ |
| 586 | handler = find_file_handler (name); | 615 | handler = Ffind_file_name_handler (name); |
| 587 | if (!NILP (handler)) | 616 | if (!NILP (handler)) |
| 588 | return call3 (handler, Qexpand_file_name, name, defalt); | 617 | return call3 (handler, Qexpand_file_name, name, defalt); |
| 589 | 618 | ||
| @@ -1519,11 +1548,11 @@ A prefix arg makes KEEP-TIME non-nil.") | |||
| 1519 | 1548 | ||
| 1520 | /* If the input file name has special constructs in it, | 1549 | /* If the input file name has special constructs in it, |
| 1521 | call the corresponding file handler. */ | 1550 | call the corresponding file handler. */ |
| 1522 | handler = find_file_handler (filename); | 1551 | handler = Ffind_file_name_handler (filename); |
| 1523 | if (!NILP (handler)) | 1552 | if (!NILP (handler)) |
| 1524 | return call3 (handler, Qcopy_file, filename, newname); | 1553 | return call3 (handler, Qcopy_file, filename, newname); |
| 1525 | /* Likewise for output file name. */ | 1554 | /* Likewise for output file name. */ |
| 1526 | handler = find_file_handler (newname); | 1555 | handler = Ffind_file_name_handler (newname); |
| 1527 | if (!NILP (handler)) | 1556 | if (!NILP (handler)) |
| 1528 | return call3 (handler, Qcopy_file, filename, newname); | 1557 | return call3 (handler, Qcopy_file, filename, newname); |
| 1529 | 1558 | ||
| @@ -1594,7 +1623,7 @@ DEFUN ("make-directory-internal", Fmake_directory_internal, | |||
| 1594 | CHECK_STRING (dirname, 0); | 1623 | CHECK_STRING (dirname, 0); |
| 1595 | dirname = Fexpand_file_name (dirname, Qnil); | 1624 | dirname = Fexpand_file_name (dirname, Qnil); |
| 1596 | 1625 | ||
| 1597 | handler = find_file_handler (dirname); | 1626 | handler = Ffind_file_name_handler (dirname); |
| 1598 | if (!NILP (handler)) | 1627 | if (!NILP (handler)) |
| 1599 | return call3 (handler, Qmake_directory, dirname, Qnil); | 1628 | return call3 (handler, Qmake_directory, dirname, Qnil); |
| 1600 | 1629 | ||
| @@ -1618,7 +1647,7 @@ DEFUN ("delete-directory", Fdelete_directory, Sdelete_directory, 1, 1, "FDelete | |||
| 1618 | dirname = Fexpand_file_name (dirname, Qnil); | 1647 | dirname = Fexpand_file_name (dirname, Qnil); |
| 1619 | dir = XSTRING (dirname)->data; | 1648 | dir = XSTRING (dirname)->data; |
| 1620 | 1649 | ||
| 1621 | handler = find_file_handler (dirname); | 1650 | handler = Ffind_file_name_handler (dirname); |
| 1622 | if (!NILP (handler)) | 1651 | if (!NILP (handler)) |
| 1623 | return call2 (handler, Qdelete_directory, dirname); | 1652 | return call2 (handler, Qdelete_directory, dirname); |
| 1624 | 1653 | ||
| @@ -1638,7 +1667,7 @@ If file has multiple names, it continues to exist with the other names.") | |||
| 1638 | CHECK_STRING (filename, 0); | 1667 | CHECK_STRING (filename, 0); |
| 1639 | filename = Fexpand_file_name (filename, Qnil); | 1668 | filename = Fexpand_file_name (filename, Qnil); |
| 1640 | 1669 | ||
| 1641 | handler = find_file_handler (filename); | 1670 | handler = Ffind_file_name_handler (filename); |
| 1642 | if (!NILP (handler)) | 1671 | if (!NILP (handler)) |
| 1643 | return call2 (handler, Qdelete_file, filename); | 1672 | return call2 (handler, Qdelete_file, filename); |
| 1644 | 1673 | ||
| @@ -1672,7 +1701,7 @@ This is what happens in interactive use with M-x.") | |||
| 1672 | 1701 | ||
| 1673 | /* If the file name has special constructs in it, | 1702 | /* If the file name has special constructs in it, |
| 1674 | call the corresponding file handler. */ | 1703 | call the corresponding file handler. */ |
| 1675 | handler = find_file_handler (filename); | 1704 | handler = Ffind_file_name_handler (filename); |
| 1676 | if (!NILP (handler)) | 1705 | if (!NILP (handler)) |
| 1677 | return call3 (handler, Qrename_file, filename, newname); | 1706 | return call3 (handler, Qrename_file, filename, newname); |
| 1678 | 1707 | ||
| @@ -1731,7 +1760,7 @@ This is what happens in interactive use with M-x.") | |||
| 1731 | 1760 | ||
| 1732 | /* If the file name has special constructs in it, | 1761 | /* If the file name has special constructs in it, |
| 1733 | call the corresponding file handler. */ | 1762 | call the corresponding file handler. */ |
| 1734 | handler = find_file_handler (filename); | 1763 | handler = Ffind_file_name_handler (filename); |
| 1735 | if (!NILP (handler)) | 1764 | if (!NILP (handler)) |
| 1736 | return call3 (handler, Qadd_name_to_file, filename, newname); | 1765 | return call3 (handler, Qadd_name_to_file, filename, newname); |
| 1737 | 1766 | ||
| @@ -1782,7 +1811,7 @@ This happens for interactive use with M-x.") | |||
| 1782 | 1811 | ||
| 1783 | /* If the file name has special constructs in it, | 1812 | /* If the file name has special constructs in it, |
| 1784 | call the corresponding file handler. */ | 1813 | call the corresponding file handler. */ |
| 1785 | handler = find_file_handler (filename); | 1814 | handler = Ffind_file_name_handler (filename); |
| 1786 | if (!NILP (handler)) | 1815 | if (!NILP (handler)) |
| 1787 | return call3 (handler, Qmake_symbolic_link, filename, linkname); | 1816 | return call3 (handler, Qmake_symbolic_link, filename, linkname); |
| 1788 | 1817 | ||
| @@ -1899,7 +1928,7 @@ See also `file-readable-p' and `file-attributes'.") | |||
| 1899 | 1928 | ||
| 1900 | /* If the file name has special constructs in it, | 1929 | /* If the file name has special constructs in it, |
| 1901 | call the corresponding file handler. */ | 1930 | call the corresponding file handler. */ |
| 1902 | handler = find_file_handler (abspath); | 1931 | handler = Ffind_file_name_handler (abspath); |
| 1903 | if (!NILP (handler)) | 1932 | if (!NILP (handler)) |
| 1904 | return call2 (handler, Qfile_exists_p, abspath); | 1933 | return call2 (handler, Qfile_exists_p, abspath); |
| 1905 | 1934 | ||
| @@ -1921,7 +1950,7 @@ For directories this means you can change to that directory.") | |||
| 1921 | 1950 | ||
| 1922 | /* If the file name has special constructs in it, | 1951 | /* If the file name has special constructs in it, |
| 1923 | call the corresponding file handler. */ | 1952 | call the corresponding file handler. */ |
| 1924 | handler = find_file_handler (abspath); | 1953 | handler = Ffind_file_name_handler (abspath); |
| 1925 | if (!NILP (handler)) | 1954 | if (!NILP (handler)) |
| 1926 | return call2 (handler, Qfile_executable_p, abspath); | 1955 | return call2 (handler, Qfile_executable_p, abspath); |
| 1927 | 1956 | ||
| @@ -1942,7 +1971,7 @@ See also `file-exists-p' and `file-attributes'.") | |||
| 1942 | 1971 | ||
| 1943 | /* If the file name has special constructs in it, | 1972 | /* If the file name has special constructs in it, |
| 1944 | call the corresponding file handler. */ | 1973 | call the corresponding file handler. */ |
| 1945 | handler = find_file_handler (abspath); | 1974 | handler = Ffind_file_name_handler (abspath); |
| 1946 | if (!NILP (handler)) | 1975 | if (!NILP (handler)) |
| 1947 | return call2 (handler, Qfile_readable_p, abspath); | 1976 | return call2 (handler, Qfile_readable_p, abspath); |
| 1948 | 1977 | ||
| @@ -1968,7 +1997,7 @@ Otherwise returns NIL.") | |||
| 1968 | 1997 | ||
| 1969 | /* If the file name has special constructs in it, | 1998 | /* If the file name has special constructs in it, |
| 1970 | call the corresponding file handler. */ | 1999 | call the corresponding file handler. */ |
| 1971 | handler = find_file_handler (filename); | 2000 | handler = Ffind_file_name_handler (filename); |
| 1972 | if (!NILP (handler)) | 2001 | if (!NILP (handler)) |
| 1973 | return call2 (handler, Qfile_symlink_p, filename); | 2002 | return call2 (handler, Qfile_symlink_p, filename); |
| 1974 | 2003 | ||
| @@ -2011,7 +2040,7 @@ DEFUN ("file-writable-p", Ffile_writable_p, Sfile_writable_p, 1, 1, 0, | |||
| 2011 | 2040 | ||
| 2012 | /* If the file name has special constructs in it, | 2041 | /* If the file name has special constructs in it, |
| 2013 | call the corresponding file handler. */ | 2042 | call the corresponding file handler. */ |
| 2014 | handler = find_file_handler (abspath); | 2043 | handler = Ffind_file_name_handler (abspath); |
| 2015 | if (!NILP (handler)) | 2044 | if (!NILP (handler)) |
| 2016 | return call2 (handler, Qfile_writable_p, abspath); | 2045 | return call2 (handler, Qfile_writable_p, abspath); |
| 2017 | 2046 | ||
| @@ -2041,7 +2070,7 @@ if the directory so specified exists and really is a directory.") | |||
| 2041 | 2070 | ||
| 2042 | /* If the file name has special constructs in it, | 2071 | /* If the file name has special constructs in it, |
| 2043 | call the corresponding file handler. */ | 2072 | call the corresponding file handler. */ |
| 2044 | handler = find_file_handler (abspath); | 2073 | handler = Ffind_file_name_handler (abspath); |
| 2045 | if (!NILP (handler)) | 2074 | if (!NILP (handler)) |
| 2046 | return call2 (handler, Qfile_directory_p, abspath); | 2075 | return call2 (handler, Qfile_directory_p, abspath); |
| 2047 | 2076 | ||
| @@ -2064,7 +2093,7 @@ searchable directory.") | |||
| 2064 | 2093 | ||
| 2065 | /* If the file name has special constructs in it, | 2094 | /* If the file name has special constructs in it, |
| 2066 | call the corresponding file handler. */ | 2095 | call the corresponding file handler. */ |
| 2067 | handler = find_file_handler (filename); | 2096 | handler = Ffind_file_name_handler (filename); |
| 2068 | if (!NILP (handler)) | 2097 | if (!NILP (handler)) |
| 2069 | return call2 (handler, Qfile_accessible_directory_p, filename); | 2098 | return call2 (handler, Qfile_accessible_directory_p, filename); |
| 2070 | 2099 | ||
| @@ -2088,7 +2117,7 @@ DEFUN ("file-modes", Ffile_modes, Sfile_modes, 1, 1, 0, | |||
| 2088 | 2117 | ||
| 2089 | /* If the file name has special constructs in it, | 2118 | /* If the file name has special constructs in it, |
| 2090 | call the corresponding file handler. */ | 2119 | call the corresponding file handler. */ |
| 2091 | handler = find_file_handler (abspath); | 2120 | handler = Ffind_file_name_handler (abspath); |
| 2092 | if (!NILP (handler)) | 2121 | if (!NILP (handler)) |
| 2093 | return call2 (handler, Qfile_modes, abspath); | 2122 | return call2 (handler, Qfile_modes, abspath); |
| 2094 | 2123 | ||
| @@ -2111,7 +2140,7 @@ Only the 12 low bits of MODE are used.") | |||
| 2111 | 2140 | ||
| 2112 | /* If the file name has special constructs in it, | 2141 | /* If the file name has special constructs in it, |
| 2113 | call the corresponding file handler. */ | 2142 | call the corresponding file handler. */ |
| 2114 | handler = find_file_handler (abspath); | 2143 | handler = Ffind_file_name_handler (abspath); |
| 2115 | if (!NILP (handler)) | 2144 | if (!NILP (handler)) |
| 2116 | return call3 (handler, Qset_file_modes, abspath, mode); | 2145 | return call3 (handler, Qset_file_modes, abspath, mode); |
| 2117 | 2146 | ||
| @@ -2216,7 +2245,7 @@ otherwise, if FILE2 does not exist, the answer is t.") | |||
| 2216 | 2245 | ||
| 2217 | /* If the file name has special constructs in it, | 2246 | /* If the file name has special constructs in it, |
| 2218 | call the corresponding file handler. */ | 2247 | call the corresponding file handler. */ |
| 2219 | handler = find_file_handler (abspath1); | 2248 | handler = Ffind_file_name_handler (abspath1); |
| 2220 | if (!NILP (handler)) | 2249 | if (!NILP (handler)) |
| 2221 | return call3 (handler, Qfile_newer_than_file_p, abspath1, abspath2); | 2250 | return call3 (handler, Qfile_newer_than_file_p, abspath1, abspath2); |
| 2222 | 2251 | ||
| @@ -2261,7 +2290,7 @@ before the error is signaled.") | |||
| 2261 | 2290 | ||
| 2262 | /* If the file name has special constructs in it, | 2291 | /* If the file name has special constructs in it, |
| 2263 | call the corresponding file handler. */ | 2292 | call the corresponding file handler. */ |
| 2264 | handler = find_file_handler (filename); | 2293 | handler = Ffind_file_name_handler (filename); |
| 2265 | if (!NILP (handler)) | 2294 | if (!NILP (handler)) |
| 2266 | { | 2295 | { |
| 2267 | val = call3 (handler, Qinsert_file_contents, filename, visit); | 2296 | val = call3 (handler, Qinsert_file_contents, filename, visit); |
| @@ -2445,7 +2474,7 @@ to the file, instead of any buffer contents, and END is ignored.") | |||
| 2445 | 2474 | ||
| 2446 | /* If the file name has special constructs in it, | 2475 | /* If the file name has special constructs in it, |
| 2447 | call the corresponding file handler. */ | 2476 | call the corresponding file handler. */ |
| 2448 | handler = find_file_handler (filename); | 2477 | handler = Ffind_file_name_handler (filename); |
| 2449 | 2478 | ||
| 2450 | if (!NILP (handler)) | 2479 | if (!NILP (handler)) |
| 2451 | { | 2480 | { |
| @@ -2740,7 +2769,7 @@ This means that the file has not been changed since it was visited or saved.") | |||
| 2740 | 2769 | ||
| 2741 | /* If the file name has special constructs in it, | 2770 | /* If the file name has special constructs in it, |
| 2742 | call the corresponding file handler. */ | 2771 | call the corresponding file handler. */ |
| 2743 | handler = find_file_handler (b->filename); | 2772 | handler = Ffind_file_name_handler (b->filename); |
| 2744 | if (!NILP (handler)) | 2773 | if (!NILP (handler)) |
| 2745 | return call2 (handler, Qverify_visited_file_modtime, buf); | 2774 | return call2 (handler, Qverify_visited_file_modtime, buf); |
| 2746 | 2775 | ||
| @@ -2787,7 +2816,7 @@ or if the file itself has been changed for some known benign reason.") | |||
| 2787 | 2816 | ||
| 2788 | /* If the file name has special constructs in it, | 2817 | /* If the file name has special constructs in it, |
| 2789 | call the corresponding file handler. */ | 2818 | call the corresponding file handler. */ |
| 2790 | handler = find_file_handler (filename); | 2819 | handler = Ffind_file_name_handler (filename); |
| 2791 | if (!NILP (handler)) | 2820 | if (!NILP (handler)) |
| 2792 | current_buffer->modtime = 0; | 2821 | current_buffer->modtime = 0; |
| 2793 | 2822 | ||
| @@ -3178,6 +3207,7 @@ syms_of_fileio () | |||
| 3178 | Qdirectory_file_name = intern ("directory-file-name"); | 3207 | Qdirectory_file_name = intern ("directory-file-name"); |
| 3179 | Qfile_name_directory = intern ("file-name-directory"); | 3208 | Qfile_name_directory = intern ("file-name-directory"); |
| 3180 | Qfile_name_nondirectory = intern ("file-name-nondirectory"); | 3209 | Qfile_name_nondirectory = intern ("file-name-nondirectory"); |
| 3210 | Qunhandled_file_name_directory = intern ("unhandled-file-name-directory"); | ||
| 3181 | Qfile_name_as_directory = intern ("file-name-as-directory"); | 3211 | Qfile_name_as_directory = intern ("file-name-as-directory"); |
| 3182 | Qcopy_file = intern ("copy-file"); | 3212 | Qcopy_file = intern ("copy-file"); |
| 3183 | Qmake_directory = intern ("make-directory"); | 3213 | Qmake_directory = intern ("make-directory"); |
| @@ -3200,9 +3230,12 @@ syms_of_fileio () | |||
| 3200 | Qwrite_region = intern ("write-region"); | 3230 | Qwrite_region = intern ("write-region"); |
| 3201 | Qverify_visited_file_modtime = intern ("verify-visited-file-modtime"); | 3231 | Qverify_visited_file_modtime = intern ("verify-visited-file-modtime"); |
| 3202 | 3232 | ||
| 3203 | Qfile_name_history = intern ("file-name-history"); | 3233 | staticpro (&Qexpand_file_name); |
| 3204 | Fset (Qfile_name_history, Qnil); | 3234 | staticpro (&Qdirectory_file_name); |
| 3205 | 3235 | staticpro (&Qfile_name_directory); | |
| 3236 | staticpro (&Qfile_name_nondirectory); | ||
| 3237 | staticpro (&Qunhandled_file_name_directory); | ||
| 3238 | staticpro (&Qfile_name_as_directory); | ||
| 3206 | staticpro (&Qcopy_file); | 3239 | staticpro (&Qcopy_file); |
| 3207 | staticpro (&Qmake_directory); | 3240 | staticpro (&Qmake_directory); |
| 3208 | staticpro (&Qdelete_directory); | 3241 | staticpro (&Qdelete_directory); |
| @@ -3223,6 +3256,9 @@ syms_of_fileio () | |||
| 3223 | staticpro (&Qinsert_file_contents); | 3256 | staticpro (&Qinsert_file_contents); |
| 3224 | staticpro (&Qwrite_region); | 3257 | staticpro (&Qwrite_region); |
| 3225 | staticpro (&Qverify_visited_file_modtime); | 3258 | staticpro (&Qverify_visited_file_modtime); |
| 3259 | |||
| 3260 | Qfile_name_history = intern ("file-name-history"); | ||
| 3261 | Fset (Qfile_name_history, Qnil); | ||
| 3226 | staticpro (&Qfile_name_history); | 3262 | staticpro (&Qfile_name_history); |
| 3227 | 3263 | ||
| 3228 | Qfile_error = intern ("file-error"); | 3264 | Qfile_error = intern ("file-error"); |
| @@ -3260,11 +3296,15 @@ to be handled; the remaining arguments are the arguments that were\n\ | |||
| 3260 | passed to that primitive. For example, if you do\n\ | 3296 | passed to that primitive. For example, if you do\n\ |
| 3261 | (file-exists-p FILENAME)\n\ | 3297 | (file-exists-p FILENAME)\n\ |
| 3262 | and FILENAME is handled by HANDLER, then HANDLER is called like this:\n\ | 3298 | and FILENAME is handled by HANDLER, then HANDLER is called like this:\n\ |
| 3263 | (funcall HANDLER 'file-exists-p FILENAME)"); | 3299 | (funcall HANDLER 'file-exists-p FILENAME)\n\ |
| 3300 | The function `find-file-name-handler' checks this list for a handler\n\ | ||
| 3301 | for its argument."); | ||
| 3264 | Vfile_name_handler_alist = Qnil; | 3302 | Vfile_name_handler_alist = Qnil; |
| 3265 | 3303 | ||
| 3304 | defsubr (&Sfind_file_name_handler); | ||
| 3266 | defsubr (&Sfile_name_directory); | 3305 | defsubr (&Sfile_name_directory); |
| 3267 | defsubr (&Sfile_name_nondirectory); | 3306 | defsubr (&Sfile_name_nondirectory); |
| 3307 | defsubr (&Sunhandled_file_name_directory); | ||
| 3268 | defsubr (&Sfile_name_as_directory); | 3308 | defsubr (&Sfile_name_as_directory); |
| 3269 | defsubr (&Sdirectory_file_name); | 3309 | defsubr (&Sdirectory_file_name); |
| 3270 | defsubr (&Smake_temp_name); | 3310 | defsubr (&Smake_temp_name); |