Mercurial > hg > xemacs-beta
comparison man/efs.texi @ 42:8b8b7f3559a2 r19-15b104
Import from CVS: tag r19-15b104
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:54:51 +0200 |
parents | |
children | 8d2a9b52c682 |
comparison
equal
deleted
inserted
replaced
41:5d6df4963a99 | 42:8b8b7f3559a2 |
---|---|
1 \input texinfo @c -*-texinfo-*- | |
2 @comment %**start of header (This is for running Texinfo on a region.) | |
3 @setfilename efs.info | |
4 @settitle EFS | |
5 @comment %**end of header (This is for running Texinfo on a region.) | |
6 | |
7 @synindex fn vr | |
8 | |
9 @node Top, What is EFS?, (dir), (dir) | |
10 @comment node-name, next, previous, up | |
11 @ifinfo | |
12 @unnumbered EFS | |
13 | |
14 This file documents EFS, a system for transparent file-transfer | |
15 between remote hosts using the FTP protocol within Emacs. | |
16 | |
17 This info is for version 1.15 of EFS. | |
18 | |
19 Documentation version: 1.0 | |
20 | |
21 Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc. | |
22 | |
23 Permission is granted to make and distribute verbatim copies of | |
24 this manual provided the copyright notice and this permission notice | |
25 are preserved on all copies. | |
26 | |
27 @ignore | |
28 Permission is granted to process this file through TeX and print the | |
29 results, provided the printed document carries a copying permission | |
30 notice identical to this one except for the removal of this paragraph | |
31 (this paragraph not being relevant to the printed manual). | |
32 | |
33 @end ignore | |
34 Permission is granted to copy and distribute modified versions of this | |
35 manual under the conditions for verbatim copying, provided that the | |
36 entire resulting derived work is distributed under the terms of a | |
37 permission notice identical to this one. | |
38 @end ifinfo | |
39 | |
40 @titlepage | |
41 @sp5 | |
42 @center @titlefont{EFS} | |
43 @center version 1.15 | |
44 @sp2 | |
45 @center A transparent remote file system, by Sandy Rutherford and Andy Norman | |
46 @sp7 | |
47 @center This documentation based on ange-ftp documentation by David Smith | |
48 @center and on documentation in the EFS source code | |
49 @center It was put together by Mike Sperber. | |
50 | |
51 This documentation is definitely incomplete and parts of it may be | |
52 outright incorrect or out-of-date. | |
53 | |
54 @center info-version 1.0 | |
55 @page | |
56 @vskip 0pt plus 1filll | |
57 Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc. | |
58 | |
59 Permission is granted to make and distribute verbatim copies of | |
60 this manual provided the copyright notice and this permission notice | |
61 are preserved on all copies. | |
62 | |
63 Permission is granted to copy and distribute modified versions of this | |
64 manual under the conditions for verbatim copying, provided that the | |
65 entire resulting derived work is distributed under the terms of a | |
66 permission notice identical to this one. | |
67 @end titlepage | |
68 | |
69 @menu | |
70 * What is EFS?:: | |
71 * Installing EFS:: Where to find it, and how to use it. | |
72 * Using EFS:: EFS -- a users' guide. | |
73 * Getting help:: Mailing lists and newsgroups. | |
74 * Bugs:: Known bugs, and a wish list. | |
75 | |
76 Indices: | |
77 * Concept Index:: | |
78 * Variable and command index:: | |
79 @end menu | |
80 | |
81 | |
82 @node What is EFS?, Installing EFS, Top, Top | |
83 @comment node-name, next, previous, up | |
84 @chapter Introducing EFS | |
85 | |
86 EFS is a system for transparent file-transfer between remote UNIX, | |
87 Guardian, DOS, Macintosh, KA9Q, Netware, NOS/VE, Plan 9, TI Explorer, | |
88 Twenex, TOPS 20, VOS, MPE, MVS, VMS, CMS or MTS hosts using FTP. This | |
89 means that you can edit, copy and otherwise manipulate files on any | |
90 machine you have access to from within Emacs as if it were a local | |
91 file. EFS works by introducing an extended filename syntax, and | |
92 overloading functions such as @code{insert-file-contents} so that | |
93 accessing a remote file causes appropriate commands to be sent to an FTP | |
94 process. EFS includes and enhanced version of Dired to facilitate | |
95 directory browsing and multiple file transfer from remote hosts. | |
96 | |
97 The authors of EFS are Sandy Rutherford (@code{sandy@@math.ubc.ca}) and | |
98 Andy (Ange) Norman (@code{ange@@hplb.hpl.hp.com}). EFS is partly based | |
99 on an earlier package called ange-ftp. The integration of EFS 1.15 into | |
100 XEmacs and numerous bug fixes were done by Mike Sperber | |
101 (@code{sperber@@informatik.uni-tuebingen.de}). | |
102 | |
103 @ifinfo | |
104 Many people have sent in enhancements for ange-ftp and EFS. | |
105 Members of the ange-ftp and EFS Hall of Fame include: | |
106 | |
107 @itemize @bullet | |
108 @item | |
109 Many thanks to Roland McGrath for improving the filename syntax handling, | |
110 for suggesting many enhancements and for numerous cleanups to the code. | |
111 | |
112 @item | |
113 Thanks to Jamie Zawinski for bugfixes and for ideas such as gateways. | |
114 | |
115 @item | |
116 Thanks to Ken Laprade for improved @file{.netrc} parsing and password | |
117 reading, and Dired/shell autoloading. | |
118 | |
119 @item | |
120 Thanks to Sebastian Kremer for tree dired support and for many ideas and | |
121 bugfixes. | |
122 | |
123 @item | |
124 Thanks to Joe Wells for bugfixes, non-UNIX system support, VOS support, | |
125 and hostname completion. | |
126 | |
127 @item | |
128 Thanks to Nakagawa Takayuki for many good ideas, filename-completion, help | |
129 with file-name expansion, efficiency worries, stylistic concerns and many | |
130 bugfixes. | |
131 | |
132 @item | |
133 Also, thanks to Rob Austein, Doug Bagley, Andy Caiger, Jim Franklin, | |
134 Noah Friedman, Aksnes Knut-Havard, Elmar Heeb, John Interrante, Roland | |
135 McGrath, Jeff Morgenthaler, Mike Northam, Jens Petersen, Jack Repenning, | |
136 Joerg-Martin Schwarz, Michael Sperber, Svein Tjemsland, Andy Whitcroft, | |
137 Raymond A. Wiker and many others whose names have been forgotten who | |
138 have helped to debug and fix problems. | |
139 @end itemize | |
140 @end ifinfo | |
141 | |
142 Finally, this info file was put together by Mike Sperber | |
143 (@code{sperber@@informatik.uni-tuebingen.de}) from an ange-ftp info file | |
144 written by Dave Smith (@code{dsmith@@stats.adelaide.edu.au}) and the EFS | |
145 source code. | |
146 | |
147 @node Installing EFS, Using EFS, What is EFS?, Top | |
148 @comment node-name, next, previous, up | |
149 @chapter Installing EFS | |
150 | |
151 At the time of writing of this documentation, the version of EFS | |
152 distributed with XEmacs (this means the EFS running on XEmacs | |
153 19.15/20.1) is the latest version available. It includes many bugfixes | |
154 and some enhancements over the last separately released version of EFS, | |
155 1.15. This situation will change once a new version of EFS is | |
156 available. | |
157 | |
158 Generally, EFS is pretty easy to get hold of. FTP is the probably the | |
159 simplest method, but other options such as mail are available. | |
160 | |
161 Once you have the Emacs-Lisp source, there are a few customisations you | |
162 might need to make. The ideal configuration is to have the FTP process running | |
163 on the same machine as you are running Emacs on, but this is not always | |
164 possible since some machines cannot access hosts outside the local | |
165 network. In this case, the FTP process needs to be run on a machine | |
166 which @emph{does} have access to the local world --- this is called the | |
167 @strong{gateway host}. EFS has facilities to make use of a | |
168 gateway host when accessing remote hosts. | |
169 | |
170 @menu | |
171 * Obtaining source code:: Where to find the EFS source. | |
172 * Installing source:: Where to put it, how to load it. | |
173 * Using a gateway:: If your local machine has limited access. | |
174 * Setting up a gateway:: | |
175 * Gateway types:: | |
176 * Gateway problems:: | |
177 * Other options:: More user variables to twiddle. | |
178 @end menu | |
179 | |
180 @node Obtaining source code, Installing source, Installing EFS, Installing EFS | |
181 @section How to get the EFS source code | |
182 @comment node-name, next, previous, up | |
183 | |
184 The latest separately distributed version of EFS should always be | |
185 available from Andy Norman's home page at | |
186 @example | |
187 http://www-uk.hpl.hp.com/people/ange/efs | |
188 @end example | |
189 | |
190 There are also some ftp locations: | |
191 | |
192 @table @b | |
193 @item Switzerland | |
194 @example | |
195 /anonymous@@itp.ethz.ch:/sandy/efs/ | |
196 @end example | |
197 | |
198 @item Massachusetts, USA | |
199 @example | |
200 /anonymous@@alpha.gnu.ai.mit.edu:/efs/ | |
201 @end example | |
202 | |
203 @item California, USA | |
204 @example | |
205 /anonymous@@ftp.hmc.edu:/pub/emacs/packages/efs/ | |
206 @end example | |
207 @end table | |
208 | |
209 Failing these, someone on the EFS mailing list (@xref{Getting help}) may | |
210 be able to help you find the latest version. | |
211 | |
212 @node Installing source, Using a gateway, Obtaining source code, Installing EFS | |
213 @comment node-name, next, previous, up | |
214 @section Installing the source | |
215 | |
216 For byte compiling the EFS package, a @file{Makefile} is provided. You | |
217 should follow the instructions at the top of the @file{Makefile}. If | |
218 you have any problems, please let us know so that we can fix them for | |
219 other users. Don't even consider using eFS without byte compiling it. It | |
220 will be far too slow. | |
221 | |
222 If you decide to byte compile efs by hand, it is important that the file | |
223 @file{efs-defun.el} be byte compiled first, followed by @file{efs.el}. | |
224 The other files may be byte compiled in any order. | |
225 | |
226 To use EFS, simply put the byte compiled files in your load path | |
227 and add | |
228 | |
229 @example | |
230 (require 'efs) | |
231 @end example | |
232 | |
233 in your @file{.emacs} file. Note this takes awhile, and some users have | |
234 found this to be unbearably slow. Therefore ... | |
235 | |
236 If you would like efs to be autoloaded when you attempt to access | |
237 a remote file, put | |
238 | |
239 @example | |
240 (require 'efs-auto) | |
241 @end example | |
242 | |
243 in your @file{.emacs} file. Note that there are some limitations associated | |
244 with autoloading EFS. A discussion of them is given at the top of | |
245 @file{efs-auto.el}. | |
246 | |
247 Note that, in XEmacs, EFS automatically loads @file{efs-auto} when the | |
248 user accesses a remote file. Therefore, no additional @code{require} | |
249 statements should be necessary to use EFS. Just fire away ... | |
250 | |
251 The above instructions should allow you to access all hosts that your | |
252 local machine can access. If your local host has limited access, | |
253 however, you may wish to have EFS working through a gateway | |
254 machine. If so, read on. Otherwise, @xref{Using EFS} to get started | |
255 using EFS. | |
256 | |
257 @node Using a gateway, Setting up a gateway, Installing source, Installing EFS | |
258 @comment node-name, next, previous, up | |
259 @section Using a gateway | |
260 | |
261 Sometimes it is necessary for the FTP process to be run on a different | |
262 machine than the machine running Emacs. This can happen when the | |
263 local machine has restrictions on what hosts it can access. | |
264 | |
265 Suppose you are running Emacs (and EFS, of course) on a machine X | |
266 (let's call it the `local host') and you want to access a file on a | |
267 machine Z (which we will call the `remote host'). Unfortunately, X does | |
268 not have FTP access to Z: when you try a manual FTP something like | |
269 the following happens: | |
270 @example | |
271 X$ ftp Z.foo.bar.com | |
272 ftp: connect: Host is unreachable | |
273 @end example | |
274 @noindent | |
275 However, X @emph{does} have access to a machine Y (the `gateway | |
276 machine') which @emph{can} access Z. Fortunately, you have an account on | |
277 the gateway machine, and so the solution is to login to Y, ftp to Z, | |
278 download the file you want from Z to Y, and then copy it from Y to the | |
279 local host, X. This can get a bit tedious, to say the least, but | |
280 fortunately EFS can do all the hard work for you. | |
281 | |
282 @node Setting up a gateway, Gateway types, Using a gateway, Installing EFS | |
283 @comment node-name, next, previous, up | |
284 @section Setting up a gateway | |
285 | |
286 @enumerate | |
287 | |
288 @item | |
289 Set the variable @code{efs-gateway-host} to the name of a machine | |
290 @vindex efs-gateway-host | |
291 that doesn't have the access restrictions. If you need to use a | |
292 nonstandard port to access this host for gateway use, then specify | |
293 @code{efs-gateway-host} as @code{<hostname>#<port>}. | |
294 | |
295 @item | |
296 Set the variable @code{efs-ftp-local-host-regexp} to a regular | |
297 expression | |
298 @vindex efs-ftp-local-host-regexp | |
299 that matches hosts that can be contacted from running a local ftp | |
300 process, but fails to match hosts that can't be accessed locally. | |
301 | |
302 For example: | |
303 | |
304 @example | |
305 "\\.hp\\.com$\\|^[^.]*$" | |
306 @end example | |
307 | |
308 will match all hosts that are in the @t{.hp.com} domain, or don't have | |
309 an explicit domain in their name, but will fail to match hosts with | |
310 explicit domains or that are specified by their ip address. | |
311 | |
312 @item | |
313 Set the variable @code{efs-local-host-regexp} to machines that you have | |
314 @vindex efs-local-host-regexp | |
315 direct TCP/IP access. In other words, you must be able to ping these | |
316 hosts. Usually, @code{efs-ftp-local-host-regexp} and | |
317 @code{efs-local-host-regexp} will be the same. However, they will | |
318 differ for so-called transparent gateways. See below for more | |
319 details. | |
320 | |
321 @item | |
322 Set the variable @code{efs-gateway-tmp-name-template} to the name of | |
323 @vindex efs-gateway-tmp-name-template | |
324 a directory plus an identifying filename prefix for making temporary | |
325 files on the gateway. For example: @code{"/tmp/hplose/ange/efs"} | |
326 | |
327 @item | |
328 If the gateway and the local host share cross-mounted directories, | |
329 set the value of @code{efs-gateway-mounted-dirs-alist} accordingly. It | |
330 @vindex efs-gateway-mounted-dirs-alist | |
331 is particularly useful, but not mandatory, that the directory | |
332 of @code{efs-gateway-tmp-name-template} be cross-mounted. | |
333 @vindex efs-gateway-tmp-name-template | |
334 | |
335 @item | |
336 Set the variable @code{efs-gateway-type} to the type gateway that you have. | |
337 This variable is a list, the first element of which is a symbol | |
338 denoting the type of gateway. | |
339 @end enumerate | |
340 | |
341 @node Gateway types, Gateway problems, Setting up a gateway, Installing EFS | |
342 @comment node-name, next, previous, up | |
343 @section Supported gateway types | |
344 | |
345 @vindex efs-gateway-type | |
346 | |
347 @table @samp | |
348 | |
349 @item local | |
350 This means that your local host is itself the gateway. However, | |
351 it is necessary to use a different FTP client to gain access to | |
352 the outside world. If the name of the FTP client were @t{xftp}, you might | |
353 set @code{efs-gateway-type} to | |
354 | |
355 @example | |
356 (list 'local "xftp" efs-ftp-program-args) | |
357 @end example | |
358 | |
359 If @t{xftp} required special arguments, then give them in place of | |
360 @t{efs-ftp-program-args}. | |
361 @vindex efs-ftp-program-args | |
362 | |
363 @item proxy | |
364 | |
365 This indicates that your gateway works by first FTP'ing to it, and | |
366 then issuing a @code{USER} command of the form | |
367 | |
368 @example | |
369 USER <username>@@<host> | |
370 @end example | |
371 | |
372 In this case, you might set @code{efs-gateway-type} to | |
373 | |
374 @example | |
375 (list 'proxy "ftp" efs-ftp-program-args) | |
376 @end example | |
377 | |
378 If you need to use a nonstandard client, such as @t{iftp}, give this | |
379 @pindex iftp | |
380 instead of @t{ftp}. If this client needs to take special arguments, | |
381 give them instead of @t{efs-ftp-program-args}. | |
382 | |
383 @item remsh | |
384 | |
385 For this type of gateway, you need to start a remote shell on | |
386 your gateway, using either @t{remsh} or @t{rsh}. You should set | |
387 @pindex remsh | |
388 @pindex rsh | |
389 @sc{efs-gateway-type} to something like | |
390 | |
391 @example | |
392 (list 'remsh "remsh" nil "ftp" efs-ftp-program-args) | |
393 @end example | |
394 | |
395 If you use @t{rsh} instead of @r{remsh}, change the second element from | |
396 @code{"remsh"} to @code{"rsh"}. Note that the symbol indicating the gateway | |
397 type should still be @code{'remsh}. If you want to pass arguments | |
398 to the remsh program, give them as the third element. For example, | |
399 if you need to specify a user, make this @code{(list "-l" "sandy")}. | |
400 If you need to use a nonstandard FTP client, specify that as the fourth | |
401 element. If your FTP client needs to be given special arguments, | |
402 give them instead of @code{efs-ftp-program-args}. | |
403 | |
404 @item interactive | |
405 | |
406 This indicates that you need to establish a login on the gateway, | |
407 using either @t{telnet} or @t{rlogin}. | |
408 @pindex telnet | |
409 @pindex rlogin | |
410 You should set @code{efs-gateway-type} to something like | |
411 | |
412 @example | |
413 (list 'interactive "rlogin" nil "exec ftp" efs-ftp-program-args) | |
414 @end example | |
415 | |
416 If you need to use @t{telnet}, then give @code{"telnet"} in place of the second | |
417 element @code{"rlogin"}. If your login program needs to be given arguments, | |
418 then they should be given in the third slot. The fourth element | |
419 is for the name of the FTP client program. Giving this as @code{"exec ftp"}, | |
420 instead of @code{"ftp"}, ensures that you are logged out if the FTP client | |
421 dies. If the FTP client takes special arguments, give these instead | |
422 of @code{efs-ftp-program-args}. Furthermore, you should see the documentation | |
423 at the top of @file{efs-gwp.el}. You may need to set the variables | |
424 @code{efs-gwp-setup-term-command}, and @code{efs-gwp-prompt-pattern}. | |
425 @vindex efs-gwp-setup-term-command | |
426 @vindex efs-gwp-prompt-pattern | |
427 | |
428 @item raptor | |
429 This is a type of gateway where efs is expected to specify a gateway | |
430 user, and send a password for this user using the @code{ACCOUNT} command. | |
431 For example, to log in to @samp{foobar.edu} as sandy, while using the account | |
432 ange on the gateway, the following commands would be sent: | |
433 | |
434 @example | |
435 open raptorgate.com | |
436 quote USER sandy@@foobar.edu ange | |
437 quote pass <sandy's password on foobar> | |
438 quote account <ange's password on raptorgate> | |
439 @end example | |
440 | |
441 For such a gateway, you would set @code{efs-gateway-type} to | |
442 | |
443 @example | |
444 (list 'raptor efs-ftp-program efs-ftp-program-args <GATEWAY USER>) | |
445 @end example | |
446 | |
447 where @code{<GATEWAY USER>} is the name of your account on the gateway. In | |
448 the above example, this would be @code{"ange"}. You can set your gateway | |
449 password by simply setting an account password for the gateway host. | |
450 This can be done with either efs-set-account, or within your .netrc | |
451 file. If no password is set, you will be prompted for one. | |
452 | |
453 @item interlock | |
454 This is a type of gateway where you are expected to send a PASS | |
455 command after opening the connection to the gateway. | |
456 The precise login sequence is | |
457 | |
458 @example | |
459 open interlockgate | |
460 quote PASS <sandy's password on interlockgate> | |
461 quote USER sandy@@foobar.edu | |
462 quote PASS <sandy's password on foobar.edu> | |
463 @end example | |
464 | |
465 For such a gateway, you should set @code{efs-gateway-type} to | |
466 | |
467 @example | |
468 (list 'interlock efs-ftp-program efs-ftp-program-args) | |
469 @end example | |
470 | |
471 If you need to use a nonstandard name for your FTP client, | |
472 then replace @code{efs-ftp-program} with this name. If your FTP client | |
473 needs to take nonstandard arguments, then replace @code{efs-ftp-program-args} | |
474 with these arguments. | |
475 | |
476 If your gateway returns both a 220 code and a 331 code to the | |
477 @code{"open interlockgate"} command, then you should add a regular | |
478 expression to @code{efs-skip-msgs} that matches the 220 response. | |
479 Returning two response codes to a single FTP command is not permitted | |
480 in RFC 959. It is not possible for efs to ignore the 220 by default, | |
481 because than it would hang for interlock installations which do not | |
482 require a password. | |
483 | |
484 @item kerberos | |
485 With this gateway, you need to authenticate yourself by getting a | |
486 kerberos "ticket" first. Usually, this is done with the kinit program. | |
487 Once authenticated, you connect to @samp{foobar.com} as user sandy with the | |
488 sequence: (Note that the @code{"-n"} argument inhibits automatic login. | |
489 Although, in manual use you probably don't use it, EFS always uses it.) | |
490 | |
491 @example | |
492 iftp -n | |
493 open foobar.com | |
494 user sandy@@foobar.com | |
495 @end example | |
496 @pindex iftp | |
497 | |
498 You should set @code{efs-gateway-type} to something like | |
499 | |
500 @example | |
501 (list 'kerberos "iftp" efs-ftp-program-args "kinit" <KINIT-ARGS>) | |
502 @end example | |
503 | |
504 If you use an FTP client other than @t{iftp}, insert its name instead of | |
505 @code{"iftp"} above. If your FTP client needs special arguments, give | |
506 them as a list of strings in place of @code{efs-ftp-program-args}. If | |
507 the program that you use to collect a ticket in not called | |
508 @code{"kinit"}, then give its name in place of @code{"kinit"} above. | |
509 @code{<KINIT-ARGS>} should be any arguments that you need to pass to | |
510 your kinit program, given as a list of strings. Most likely, you will | |
511 give this as nil. | |
512 | |
513 See the file @file{efs-kerberos.el} for more configuration variables. If you | |
514 need to adjust any of these variables, please report this to us so that | |
515 we can fix them for other users. | |
516 | |
517 If EFS detects that you are not authenticated to use the gateway, it | |
518 will run the kinit program automatically, prompting you for a password. | |
519 If you give a password in your @file{.netrc} file for login the value of | |
520 @code{efs-gateway-host} and user @t{kerberos}, then EFS will use this to | |
521 obtain gateway authentication. | |
522 | |
523 @item Transparent gateways | |
524 | |
525 If your gateway is completely transparent (for example it uses socks), | |
526 then you should set @code{efs-gateway-type} to @code{nil}. Also, set | |
527 @code{efs-ftp-local-host-regexp} to @code{".*"}. However, | |
528 @code{efs-local-host-regexp}, must still be set to a regular expression | |
529 matching hosts in your local domain. EFS uses this to determine which | |
530 machines that it can open-network-stream to. Furthermore, you should | |
531 still set @code{efs-gateway-host} to the name of your gateway machine. | |
532 That way EFS will know that this is a special machine having direct | |
533 TCP/IP access to both hosts in the outside world, and hosts in your | |
534 local domain. | |
535 | |
536 @end table | |
537 | |
538 | |
539 | |
540 @node Gateway problems, Other options, Gateway types, Installing EFS | |
541 @comment node-name, next, previous, up | |
542 @section Common Problems with Gateways | |
543 | |
544 @subsection Spurious 220 responses | |
545 | |
546 Some proxy-style gateways (eg gateway type @code{'proxy} or @code{'raptor}), | |
547 return two 3-digit FTP reply codes to the @code{USER} command. | |
548 For example: | |
549 | |
550 @example | |
551 open gateway.weird | |
552 220 Connected to gateway.weird | |
553 quote USER sandy@@foobar | |
554 220 Connected to foobar | |
555 331 Password required for sandy | |
556 @end example | |
557 | |
558 This is wrong, according to the FTP Protocol. Each command must return | |
559 exactly one 3-digit reply code. It may be preceded by continuation | |
560 lines. What should really be returned is: | |
561 | |
562 @example | |
563 quote USER sandy@@foobar | |
564 331-Connected to foobar. | |
565 331 Password required for sandy. | |
566 @end example | |
567 | |
568 or even | |
569 | |
570 @example | |
571 quote USER sandy@@foobar | |
572 331-220 Connected to foobar. | |
573 331 Password required for sandy. | |
574 @end example | |
575 | |
576 Even though the @samp{"331-220"} looks strange, it is correct protocol, | |
577 and EFS will parse it properly. | |
578 | |
579 If your gateway is returning a spurious 220 to @code{USER}, a work-around | |
580 is to add a regular expression to @code{efs-skip-msgs} that matches | |
581 @vindex efs-skip-msgs | |
582 this line. It must not match the 220 line returned to the open | |
583 command. This work-around may not work, as some system FTP clients | |
584 also get confused by the spurious 220. In this case, the only | |
585 solution is to patch the gateway server. In either case, please | |
586 send a bug report to the author of your gateway software. | |
587 | |
588 @subsection Case-sensitive parsing of FTP commands | |
589 | |
590 Some gateway servers seem to treat FTP commands case-sensitively. | |
591 This is incorrect, as RFC 959 clearly states that FTP commands | |
592 are always to be case-insensitive. If this is a problem with your | |
593 gateway server, you should send a bug report to its author. | |
594 If efs is using a case for FTP commands that does not suit your server, | |
595 a possible work-around is to edit the efs source so that the required | |
596 case is used. However, we will not be making any changes to the | |
597 standard EFS distribution to support this type of server behaviour. | |
598 If you need help changing the efs source, you should enquire with the | |
599 efs-help mailing list. | |
600 | |
601 @node Other options, , Gateway problems, Installing EFS | |
602 @comment node-name, next, previous, up | |
603 @section Other user options | |
604 | |
605 Here are other user options available in EFS: | |
606 | |
607 @code{efs-netrc-filename}: The name of a file in @code{netrc(5)} | |
608 format that EFS will use to match hostnames, users and their | |
609 respective passwords. Hostnames specified here are also used for hostname | |
610 completion. | |
611 The default is @code{"~/.netrc"}. | |
612 @vindex efs-netrc-filename | |
613 | |
614 @code{efs-default-user}: If this is a string, it is the username to | |
615 use when none is specified in a filename. If @code{nil}, then the | |
616 name under which the user is logged in is used. If non-@code{nil} but | |
617 not a string, the user is prompted for the name. The default is @code{nil}. | |
618 @vindex efs-default-user | |
619 | |
620 @code{efs-default-password}: The password to use when the user is the | |
621 same as @code{efs-default-user}. The default is @code{nil}. | |
622 @vindex efs-default-password | |
623 | |
624 @code{efs-default-account}: Account password to use when the user | |
625 is the same as @code{efs-default-user}. The default is @code{nil}. | |
626 @vindex efs-default-account | |
627 | |
628 @code{efs-dumb-unix-host-regexp}: The FTP servers on some machines have | |
629 problems if the @code{ls} command is used. The usual indication that | |
630 something is wrong is when EFS erroneously thinks that a directory | |
631 is just a plain file. The routine @code{efs-add-host} can | |
632 be called to tell EFS to limit itself to the @code{DIR} command and | |
633 not @code{ls} for a given host (but this change will take effect for the | |
634 current Emacs session only) when called like this: | |
635 | |
636 @example | |
637 (efs-add-host 'dumb-unix "hostname") | |
638 @end example | |
639 | |
640 If a large number of machines with similar hostnames have this problem | |
641 then it is easier to change the value of this variable to a regexp which | |
642 matches hostnames which have this problem, particularly since EFS cannot | |
643 automatically detect such hosts. The default is @code{nil}. | |
644 @vindex efs-dumb-unix-host-regexp | |
645 @findex efs-add-host | |
646 | |
647 @code{efs-binary-file-name-regexp}: By default EFS will | |
648 transfer files in ASCII mode. If a file being transferred matches the | |
649 value of this regexp then the FTP process will be toggled into BINARY | |
650 mode before the transfer and back to ASCII mode after the transfer. The | |
651 default is: | |
652 @example | |
653 (concat "\\." ; the dot | |
654 ;; extensions | |
655 "\\([zZ]\\|t?gz\\|lzh\\|arc\\|zip\\|zoo\\|ta[rz]\\|dvi\\|sit\\|" | |
656 "ps\\|elc\\|gif\\|Z-part-..\\|tpz\\|exe\\|[jm]pg\\|TZ[a-z]?\\|lib\\)" | |
657 "\\(~\\|~[0-9]+~\\)?$" ; backups | |
658 "\\|" | |
659 ;; UPPER CASE LAND | |
660 "\\." | |
661 "\\(ARC\\|ELC\\|TAGS\\|EXE\\|ZIP\\|DVI\|ZOO\\|GIF\\|T?GZ\\|" | |
662 "[JM]PG\\)" | |
663 "\\([.#;][0-9]+\\)?$" ; versions | |
664 ) | |
665 @end example | |
666 @vindex efs-binary-file-name-regexp | |
667 | |
668 @code{efs-hash-mark-size}: EFS by default requests that the | |
669 FTP process sends hash marks (just @code{#} characters) during transfers | |
670 to keep track of how much data has been sent or received. This variable, | |
671 if non-@code{nil}, should be the number of kilobytes represented by the | |
672 FTP client's hash mark. The default value of 1 doesn't work for me --- I | |
673 use 2 instead. | |
674 @vindex efs-hash-mark-size | |
675 | |
676 @code{efs-verbose}: If this is @code{t} then EFS will be chatty about | |
677 interaction with the FTP process. The default is @code{t}. | |
678 @vindex efs-process-verbose | |
679 | |
680 @code{efs-ftp-program-name}: This should be the name of the FTP | |
681 program to run on the local host. The default value of @code{"ftp"} | |
682 should be fine for most systems. | |
683 @vindex efs-ftp-program-name | |
684 | |
685 @code{efs-make-backup-files}: A list of operating systems for which | |
686 EFS will make Emacs backup files on the remote host. For example, | |
687 @code{'(unix)} makes sense, but @code{'(unix vms)} or @code{'(vms)} | |
688 would be silly, since VMS makes its own backups. The host type is | |
689 determined by the function @code{efs-host-type}. Possible host | |
690 types are: @code{dumb-unix}; @code{vos}; @code{vms}; @code{mts}; and | |
691 @code{unix}. The default of @code{nil} means make no backups on remote | |
692 hosts. | |
693 @vindex efs-make-backup-files | |
694 @cindex backup files | |
695 | |
696 @code{efs-skip-msgs}: A regular expression matching messages from | |
697 the ftp process that can be ignored. The default is | |
698 @example | |
699 (concat | |
700 "^110 \\|" ; Restart marker reply. | |
701 "^125 \\|" ; Data connection already open; transfer starting. | |
702 "^150 ") ; File status OK; about to open connection. | |
703 @end example | |
704 @noindent | |
705 but you might need to tweak it if EFS is giving up when it | |
706 shouldn't. | |
707 @vindex efs-skip-msgs | |
708 | |
709 @code{efs-fatal-msgs}: A regular expression matching messages from | |
710 the FTP process that indicate something has gone drastically wrong | |
711 attempting the action that was initiated and that the FTP process should | |
712 (or already has) been killed. The default is | |
713 @example | |
714 (concat | |
715 ;; RFC959 codes | |
716 "^221 \\|" ; Service closing control connection. | |
717 "^421 \\|" ; Service not available. | |
718 "^425 \\|" ; Can't open data connection. | |
719 "^426 \\|" ; Connection closed, transfer aborted. | |
720 "^451 \\|" ; Requested action aborted, local error in processing. | |
721 ;; RFC959 non-compliant codes | |
722 "^552 Maximum Idle Time Exceded\\.$\\|" ; Hellsoft server uses this to | |
723 ; indicate a timeout. 552 is | |
724 ; supposed to be used for exceeded | |
725 ; storage allocation. Note that | |
726 ; they also misspelled the error | |
727 ; message. | |
728 ;; client problems | |
729 "^ftp: \\|^Not connected\\|^rcmd: \\|^No control connection\\|" | |
730 "^unknown host\\|: unknown host$\\|^lost connection\\|" | |
731 "^[Ss]egmentation fault\\|" | |
732 ;; Make sure that the "local: " isn't just a message about a file. | |
733 "^local: [^/]\\|" | |
734 ;; Gateways | |
735 "^iftp: cannot authenticate to server\\b" | |
736 ) | |
737 @end example | |
738 @vindex efs-fatal-msgs | |
739 | |
740 @code{efs-gateway-fatal-msgs}: Regular expression matching messages | |
741 from the rlogin / telnet process that indicates that logging in to the | |
742 gateway machine has gone wrong. The default is | |
743 @example | |
744 "No route to host\\|Connection closed\\|No such host\\|Login incorrect" | |
745 @end example | |
746 @vindex efs-gateway-fatal-msgs | |
747 | |
748 @code{efs-tmp-name-template}: This should be a directory and a | |
749 filename prefix indicating where EFS should make temporary files. | |
750 The default of @code{"/tmp/efs"} should be fine for most systems. | |
751 @vindex efs-tmp-name-template | |
752 @cindex temporary files | |
753 | |
754 @code{efs-retry-time}: Number of seconds to wait before retrying if | |
755 a file or listing doesn't arrive. For slow connections, you might get a | |
756 ``listing unreadable'' error messages | |
757 @cindex listing unreadable error | |
758 or an empty buffer for a file that you know has something in it. The | |
759 solution is to increase the value of @code{efs-retry-time}. Its default | |
760 value is 5 which is plenty for reasonable connections. However, for | |
761 some transatlantic connections 20 might be a better value. | |
762 @vindex efs-retry-time | |
763 | |
764 @node Using EFS, Getting help, Installing EFS, Top | |
765 @comment node-name, next, previous, up | |
766 @chapter Using EFS | |
767 | |
768 Once installed, efs operates largely transparently. All files normally | |
769 accessible to you on the internet, become part of a large virtual file | |
770 system. These files are accessed using an extended file name syntax. To | |
771 access file @code{<path>} on remote host @code{<host>} by logging in as | |
772 user @code{<user>}, you simply specify the full path of the file as | |
773 @code{/<user>@@<host>:<path>}. Nearly all Emacs file handling functions | |
774 work for remote files. It is not possible to access remote files using | |
775 shell commands in an emacs *shell* buffer, as such commands are passed | |
776 directly to the shell, and not handled by emacs. | |
777 | |
778 FTP is the underlying utility that efs uses to operate on remote files. | |
779 | |
780 For example, if @code{find-file} is given a filename of: | |
781 | |
782 @example | |
783 /ange@@anorman:/tmp/notes | |
784 @end example | |
785 | |
786 then EFS will spawn an FTP process, connect to the host 'anorman' as | |
787 user 'ange', get the file @file{/tmp/notes} and pop up a buffer containing the | |
788 contents of that file as if it were on the local file system. If efs | |
789 needed a password to connect then it would prompt the user in the | |
790 minibuffer. For further discussion of the EFS path syntax, see the | |
791 paragraph on extended file name syntax @ref{Remote filenames}. | |
792 | |
793 Full file-name completion is supported on every type of remote host. To | |
794 do filename completion, EFS needs a listing from the remote host. | |
795 Therefore, for very slow connections, it might not save any | |
796 time. However, the listing is cached, so subsequent uses of file-name | |
797 completion will be just as fast as for local file names. | |
798 | |
799 @menu | |
800 * Ports:: Using nonstandard ports. | |
801 * Remote filenames:: The EFS extended filename syntax. | |
802 * Passwords:: | |
803 * Using Dired:: Browsing directories. | |
804 * Using a .netrc:: Preventing password pestering. | |
805 * EFS commands:: Interactive commands supplied by EFS. | |
806 * FTP processes:: How EFS does its work | |
807 * Tips:: Some stuff to help you use EFS | |
808 * DL support:: Descriptive directory listings | |
809 * Non-Unix Hosts:: Some of what you want to know | |
810 * Completion:: Works but has its price | |
811 * Accessing the FTP process:: ... manually | |
812 @end menu | |
813 | |
814 @node Ports, Remote filenames, Using EFS, Using EFS | |
815 @comment node-name, next, previous, up | |
816 @section Using nonstandard ports | |
817 | |
818 EFS supports the use of nonstandard ports on remote hosts. To specify | |
819 that port @code{<port>} should be used, give the host name as | |
820 @code{host#<port>}. Host names may be given in this form anywhere that | |
821 efs normally expects a host name. This includes in the @file{.netrc} file. | |
822 Logically, EFS treats different ports to correspond to different remote | |
823 hosts. | |
824 | |
825 @node Remote filenames, Passwords, Ports, Using EFS | |
826 @comment node-name, next, previous, up | |
827 @section Extended filename syntax | |
828 | |
829 The default full EFS path syntax is | |
830 | |
831 @example | |
832 /<user>@@<host>#<port>:<path> | |
833 @end example | |
834 | |
835 Both the @code{#<port>'}and @code{<user>@@} may be omitted. | |
836 | |
837 If the @code{#<port>} is omitted, then the default port is taken to be 21, | |
838 the usual FTP port. For most users, the port syntax will only | |
839 very rarely be necessary. | |
840 | |
841 If the @code{<user>@@} is omitted, then EFS will use a default user. If | |
842 a login token is specified in your @file{.netrc} file, then this will be | |
843 used as the default user for @code{<host>}. Otherwise, it is determined | |
844 based on the value of the variable @code{efs-default-user}. | |
845 @vindex{efs-default-user} | |
846 | |
847 This EFS path syntax can be customised to a certain extent by changing a | |
848 number of variables. To | |
849 undertake such a customization requires some knowledge about the | |
850 internal workings of EFS. | |
851 | |
852 @node Passwords, Using Dired, Remote filenames, Using EFS | |
853 @comment node-name, next, previous, up | |
854 @section Passwords | |
855 | |
856 A password is required for each host / user pair. This will be prompted | |
857 for when needed, unless already set by calling @code{efs-set-passwd}, | |
858 @findex{efs-set-passwd} or specified in a @emph{valid} @file{~/.netrc} | |
859 file. | |
860 | |
861 When EFS prompts for a password, it provides defaults from its cache of | |
862 currently known passwords. The defaults are ordered such that passwords | |
863 for accounts which have the same user name as the login which is | |
864 currently underway have priority. You can cycle through your list of | |
865 defaults with @kbd{C-n} to cycle forwards and @kbd{C-p} to cycle | |
866 backwards. The list is circular. | |
867 | |
868 @subsection Passwords for user @t{anonymous} | |
869 | |
870 Passwords for the user @t{anonymous} (or @t{ftp}) are handled specially. | |
871 The variable @code{efs-generate-anonymous-password} controls what | |
872 \vindex efs-generate-anonymous-password happens. If the value of this | |
873 variable is a string, then this is used as the password; if | |
874 non-@code{nil}, then a password is created from the name of the user and | |
875 the hostname of the machine on which Emacs is running; if @code{nil} | |
876 (the default) then the user is prompted for a password as normal. | |
877 | |
878 @subsection Account passwords | |
879 | |
880 Some FTP servers require an additional password which is sent by the | |
881 @code{ACCOUNT} command. EFS will detect this and prompt the user for an | |
882 account password if the server expects one. Also, an account password | |
883 can be set by calling @code{efs-set-account}, or by specifying an | |
884 @findex efs-set-account | |
885 account token in the @file{.netrc} file. | |
886 | |
887 Some operating systems, such as CMS, require that @code{ACCOUNT} be used | |
888 to give a write access password for minidisks. @code{efs-set-account} can be | |
889 used to set a write password for a specific minidisk. Also, tokens of | |
890 the form | |
891 | |
892 @example | |
893 minidisk <minidisk name> <password> | |
894 @end example | |
895 | |
896 may be added to host lines in your @file{.netrc} file. Minidisk tokens | |
897 must be at the end of the host line, however there may be an arbitrary | |
898 number of them for any given host. | |
899 | |
900 @node Using Dired, Using a .netrc, Passwords, Using EFS | |
901 @comment node-name, next, previous, up | |
902 @section Using Dired | |
903 | |
904 This feature of EFS is particularly useful when file transfers, as | |
905 opposed to file editing, are the order of the day. Simply run | |
906 @code{find-file} on a directory to | |
907 get a listing of the files in that directory. For example, you might | |
908 run @code{find-file} on | |
909 @example | |
910 /anonymous@@archive.site.com:pub | |
911 @end example | |
912 @noindent | |
913 to see what's in the @file{pub} directory of your favourite archive | |
914 @cindex archive sites | |
915 site. This brings up a Dired buffer of all the files in that directory. | |
916 The @kbd{f} command is useful for looking at @file{README} files --- if | |
917 you then decide to save it @kbd{C-x C-w} is useful. You can also use | |
918 this method to copy files, but the @kbd{c} command is easier. The | |
919 @kbd{f} command can also be used to descend the directory tree by | |
920 applying it to directories. | |
921 | |
922 You can also use Dired to refresh EFS's internal cache. If you | |
923 (or anybody else) has changed a remote directory since you first accessed it | |
924 with EFS, completion is not provided on any new files that EFS | |
925 does not know about. If you have | |
926 (or create) a Dired buffer which contains the modified directory, | |
927 executing @code{revert-buffer} | |
928 @findex revert-buffer | |
929 with a prefix argument (@kbd{C-u g} in the Dired buffer) | |
930 will force a refresh of both the the buffer @emph{and also EFS's | |
931 internal cache}. If you find that filename completion isn't working on a | |
932 @cindex filename completion | |
933 file that you @emph{know} is there, this is how to fix the problem. | |
934 | |
935 Dired provides facilities for maintaining an | |
936 entire directory tree in a Dired buffer, for marking files which match a | |
937 certain regexp (or you can select files interactively) and then copying | |
938 all those files to your local host (or even a different remote host). | |
939 Another useful feature is Virtual Dired, which allows you to save Dired | |
940 @cindex virtual dired | |
941 buffers of remote hosts, allowing you to browse them at a later date | |
942 without actually needing to connect to the host. | |
943 | |
944 @node Using a .netrc, EFS commands, Using Dired, Using EFS | |
945 @comment node-name, next, previous, up | |
946 @section Using a .netrc file | |
947 | |
948 Being prompted for passwords all the time can get rather annoying, but | |
949 there is a way to fix the problem --- a @file{.netrc} (but @xref{Other | |
950 options} and @code{efs-netrc-filename} | |
951 @vindex efs-netrc-filename | |
952 if you want another | |
953 filename) file in your home directory. Basically, this is a file (in the | |
954 format of Unix @code{netrc(5)}) which | |
955 contains the names of all the machines you regularly login to, as well | |
956 as the username and password you use for that machine. You can also | |
957 supply an account password, if required. | |
958 | |
959 Your @file{.netrc} file consists of lines of the form | |
960 @example | |
961 machine <machine-name> login <user-name> password <password> | |
962 @end example | |
963 @noindent | |
964 It doesn't all have to be on the one line, though: any @code{login} or | |
965 @code{password} commands in the file refer to the previous | |
966 @code{machine} command. You can also have @code{account | |
967 <account-passwd>} commands if you need special account passwords. | |
968 | |
969 For example, you might have the following line in your @file{.netrc}: | |
970 @example | |
971 machine Y.local.lan.edu login myname password secret | |
972 @end example | |
973 @noindent | |
974 Then if you run @code{find-file} on the file @file{/Y.local.lan.edu:somefile} | |
975 you will automatically be logged in as user @code{myname} with password | |
976 @code{secret}. You can still login under another name and password, if | |
977 you so desire: just include the @code{user@@} part of the filename. | |
978 | |
979 You may also include a default option, as follows: | |
980 @example | |
981 default login <user-name> password <password> | |
982 @end example | |
983 @noindent | |
984 which applies to any other machines not mentioned elsewhere in your | |
985 @file{.netrc}. A particularly useful application of this is with | |
986 anonymous logins: | |
987 @cindex anonymous FTP | |
988 @example | |
989 default login myname password myname@@myhost.edu | |
990 @end example | |
991 @noindent | |
992 so that accessing @file{/anyhost:anyfile} will automatically log you in | |
993 anonymously, provided the host is not mentioned in the @file{.netrc}. | |
994 Note also that if the value of @code{efs-default-user} is | |
995 @vindex efs-default-user | |
996 non-@code{nil}, its value will have precedence over the username | |
997 supplied in the default option of the @file{.netrc}. | |
998 | |
999 The @file{.netrc} file is also useful in another regard: machines | |
1000 included in it are provided with hostname completion. That is, for any | |
1001 @cindex hostname completion | |
1002 machine in the @file{.netrc}, you need only type a slash and the first | |
1003 few characters of its name and then press @key{TAB} to be logged in | |
1004 automatically with a username and password from the @file{.netrc} file. | |
1005 So it's a good idea to put hosts you use regularly in your @file{.netrc} | |
1006 as well: | |
1007 @example | |
1008 machine archive.site.com login anonymous password myname@@X.local.lan.edu | |
1009 @end example | |
1010 | |
1011 @node EFS commands, FTP processes, Using a .netrc, Using EFS | |
1012 @comment node-name, next, previous, up | |
1013 @section EFS commands | |
1014 | |
1015 EFS supplies a few interactive commands to make connecting with | |
1016 hosts a little easier. | |
1017 | |
1018 @noindent | |
1019 Command @code{efs-set-user}: Prompts for a hostname and a username. | |
1020 Next time access to the host is attempted, EFS will attempt to log | |
1021 in again with the new username. | |
1022 @findex efs-set-user | |
1023 | |
1024 @noindent | |
1025 Command @code{efs-set-passwd}: Prompts for a hostname, user and | |
1026 password. Future logins to that host as that user will use the given | |
1027 password. | |
1028 @findex efs-set-passwd | |
1029 | |
1030 @noindent | |
1031 Command @code{efs-set-account}: Prompts for a hostname, user and | |
1032 account. Future logins to that host as that user will use the given | |
1033 account. | |
1034 @findex efs-set-account | |
1035 | |
1036 Note that the effects of the above three commands only last the duration | |
1037 of the current Emacs session. To make their effects permanent, you may | |
1038 include them as lisp code in your @file{.emacs}: | |
1039 @example | |
1040 (efs-set-user HOST USER) | |
1041 (efs-set-password HOST USER PASSWORD) | |
1042 (efs-set-account HOST USER ACCOUNT) | |
1043 @end example | |
1044 @noindent | |
1045 This is an alternative to using a @file{.netrc}; @xref{Using a .netrc}. | |
1046 | |
1047 @noindent | |
1048 Command @code{efs-kill-ftp-process}: kill the FTP process | |
1049 associated with a given buffer's filename (by default the current | |
1050 buffer). This is an easy way to achieve a resynch: any future accesses | |
1051 to the remote host will cause the FTP process to be recreated. | |
1052 @findex efs-kill-ftp-process | |
1053 | |
1054 @node FTP processes, Tips, EFS commands, Using EFS | |
1055 @comment node-name, next, previous, up | |
1056 @section FTP processes | |
1057 | |
1058 When EFS starts up an FTP process, it leaves it running for speed | |
1059 purposes. Some FTP servers will close the connection after a period of | |
1060 time, but EFS should be able to quietly reconnect the next time that | |
1061 the process is needed. | |
1062 | |
1063 The FTP process will be killed should the associated @samp{*ftp user@@host*} | |
1064 buffer be deleted. This should not cause efs any grief. | |
1065 | |
1066 @subsection Showing background FTP activity on the mode-line | |
1067 | |
1068 After EFS is loaded, the command @code{efs-display-ftp-activity} will cause | |
1069 @findex efs-display-ftp-activity | |
1070 background FTP activity to be displayed on the mode line. The variable | |
1071 @code{efs-mode-line-format} is used to determine how this data is displayed. | |
1072 @vindex efs-mode-line-format | |
1073 efs does not continuously track the number of active sessions, as this | |
1074 would cause the display to change too rapidly. Rather, it uses a heuristic | |
1075 algorithm to determine when there is a significant change in FTP activity. | |
1076 | |
1077 @subsection File types | |
1078 | |
1079 By default EFS will assume that all files are ASCII. If a file | |
1080 being transferred matches the value of @code{efs-binary-file-name-regexp} | |
1081 @vindex efs-binary-file-name-regexp | |
1082 then the file will be assumed to be a binary file, and EFS will | |
1083 transfer it using "type image". ASCII files will be transferred | |
1084 using a transfer type which efs computes to be correct according | |
1085 to its knowledge of the file system of the remote host. The | |
1086 command @code{efs-prompt-for-transfer-type} toggles the variable | |
1087 @findex efs-prompt-for-transfer-type | |
1088 @code{efs-prompt-for-transfer-type}. When this variable is | |
1089 @vindex efs-prompt-for-transfer-type | |
1090 non-@code{nil}, EFS will prompt the user for the transfer type to use | |
1091 for every FTP transfer. Having this set all the time is annoying, but | |
1092 it is useful to give special treatment to a small set of files. There | |
1093 is also a variable @code{efs-text-file-name-regexp}. This is tested | |
1094 @vindex {efs-text-file-name-regexp} | |
1095 before @code{efs-binary-file-name-regexp}, so if you set | |
1096 @code{efs-text-file-name-regexp} to a non-trivial regular expression, | |
1097 and @code{efs-binary-file-name-regexp} to @samp{".*"}, the result will | |
1098 to make image the default tranfer type. | |
1099 | |
1100 Also, if you set @code{efs-treat-crlf-as-nl}, | |
1101 @vindex efs-treat-crlf-as-nl | |
1102 then EFS will use type image | |
1103 to transfer files between hosts whose file system differ only in that | |
1104 one specifies end of line as CR-LF, and the other as NL. This is useful | |
1105 if you are transferring files between UNIX and DOS machines, and have a | |
1106 package such as @file{dos-mode.el}, that handles the extra @key{^M}'s. | |
1107 | |
1108 @subsection Status reports | |
1109 | |
1110 Most EFS commands that talk to the FTP process output a status | |
1111 message on what they are doing. In addition, efs can take advantage | |
1112 of the FTP client's @code{HASH} command to display the status of transferring | |
1113 files and listing directories. See the documentation for the variables | |
1114 @code{efs-hash-mark-size}, | |
1115 @vindex efs-hash-mark-size | |
1116 @code{efs-send-hash} | |
1117 @vindex efs-send-hash | |
1118 and @code{efs-verbose} | |
1119 @vindex efs-verbose | |
1120 for more details. | |
1121 | |
1122 @subsection Caching of directory information | |
1123 | |
1124 EFS keeps an internal cache of file listings from remote hosts. | |
1125 If this cache gets out of synch, it can be renewed by reverting a | |
1126 dired buffer for the appropriate directory (@code{dired-revert} is usually | |
1127 bound to @kbd{g}). | |
1128 | |
1129 Alternatively, you can add the following two lines to your @file{.emacs} file | |
1130 if you want @kbd{C-r} to refresh EFS's cache whilst doing filename | |
1131 completion. | |
1132 | |
1133 @example | |
1134 (define-key minibuffer-local-completion-map "\C-r" 'efs-re-read-dir) | |
1135 (define-key minibuffer-local-must-match-map "\C-r" 'efs-re-read-dir) | |
1136 @end example | |
1137 | |
1138 @node Tips, DL support, FTP processes, Using EFS | |
1139 @comment node-name, next, previous, up | |
1140 | |
1141 @section Tips for using EFS | |
1142 | |
1143 @enumerate | |
1144 @item | |
1145 Beware of compressing files on non-UNIX hosts. EFS will do it by | |
1146 copying the file to the local machine, compressing it there, and then | |
1147 sending it back. Binary file transfers between machines of different | |
1148 architectures can be a risky business. Test things out first on some | |
1149 test files. @xref{Bugs} Also, note that EFS sometimes | |
1150 copies files by moving them through the local machine. Again, | |
1151 be careful when doing this with binary files on non-Unix | |
1152 machines. | |
1153 | |
1154 @item | |
1155 Beware that dired over ftp will use your setting of | |
1156 @code{dired-no-confirm} | |
1157 @vindex dired-no-confirm | |
1158 (list of dired commands for which confirmation is not asked). | |
1159 You might want to reconsider your setting of this variable, | |
1160 because you might want confirmation for more commands on remote | |
1161 direds than on local direds. For example, I strongly recommend | |
1162 that you not include compress in this list. If there is enough | |
1163 demand it might be a good idea to have an alist | |
1164 @code{efs-dired-no-confirm} of pairs @code{( TYPE . LIST )}, where @code{TYPE} is an | |
1165 operating system type and @code{LIST} is a list of commands for which | |
1166 confirmation would be suppressed. Then remote dired listings | |
1167 would take their (buffer-local) value of @code{dired-no-confirm} from | |
1168 this alist. Who votes for this? | |
1169 | |
1170 @item | |
1171 Some combinations of FTP clients and servers break and get out of sync | |
1172 when asked to list a non-existent directory. Some of the @t{ai.mit.edu} | |
1173 machines cause this problem for some FTP clients. Using | |
1174 @code{efs-kill-ftp-process} | |
1175 @findex efs-kill-ftp-process | |
1176 can be used to restart the ftp process, which | |
1177 should get things back in synch. | |
1178 | |
1179 @item | |
1180 Some ftp servers impose a length limit on the password that can | |
1181 be sent. If this limit is exceeded they may bomb in an | |
1182 incomprehensible way. This sort of behaviour is common with | |
1183 MVS servers. Therefore, you should beware of this possibility | |
1184 if you are generating a long password (like an email address) | |
1185 with @code{efs-generate-anonymous-password}. | |
1186 @vindex efs-generate-anonymous-password | |
1187 | |
1188 @item | |
1189 Some antiquated FTP servers hang when asked for an @code{RNFR} command. | |
1190 EFS sometimes uses this to test whether its local cache is stale. | |
1191 If your server for @code{HOST} hangs when asked for this command, put | |
1192 | |
1193 @example | |
1194 (efs-set-host-property HOST 'rnfr-failed t) | |
1195 @end example | |
1196 | |
1197 in your @code{efs-ftp-startup-function-alist} | |
1198 @vindex efs-ftp-startup-function-alist | |
1199 entry for @code{HOST}. | |
1200 | |
1201 @item | |
1202 The FTP servers on some Unix machines have problems if the @code{ls} | |
1203 command is used. EFS will try to correct for this automatically, | |
1204 and send the @code{dir} command instead. If it fails, you can call the | |
1205 function @code{efs-add-host}, | |
1206 @findex efs-add-host | |
1207 and give the host type as @code{dumb-unix}. Note that this change will | |
1208 take effect for the current Emacs session only. To make this | |
1209 specification for future emacs sessions, put | |
1210 | |
1211 @example | |
1212 (efs-add-host 'dumb-unix "hostname") | |
1213 @end example | |
1214 | |
1215 in your @file{.emacs} file. Also, please report any failure to | |
1216 automatically recognize dumb unix to the "bugs" address given below, so | |
1217 that we can fix the auto recognition code. | |
1218 | |
1219 @end enumerate | |
1220 | |
1221 @node DL support, Non-Unix Hosts, Tips, Using EFS | |
1222 @comment node-name, next, previous, up | |
1223 @section Descriptive directory listings | |
1224 | |
1225 Some hosts (such as @code{cs.uwp.edu}) now use descriptive directory | |
1226 listings | |
1227 @cindex descriptive directory listings | |
1228 @cindex extended directory listings | |
1229 (which in fact contain @emph{less} information than the | |
1230 standard listing!) when issued the @code{ls} command, and EFS has | |
1231 been modified to cope with this. EFS can detect such listings, but | |
1232 if you regularly use a remote host which uses this extended listing | |
1233 format you should set the variable @code{efs-dl-dir-regexp} to a | |
1234 @vindex efs-dl-dir-regexp | |
1235 regular expression which matches directories using the extended listing | |
1236 format. You shouldn't anchor the regexp with @samp{$} -- that way the | |
1237 regexp will match subdirectories as well. Alternatively, you can use | |
1238 the interactive command @code{efs-add-dl-dir} to temporarily add a | |
1239 @findex efs-add-dl-dir | |
1240 remote directory for this Emacs session only. | |
1241 | |
1242 Dired has been modified to work with such descriptive listings. | |
1243 | |
1244 @node Non-Unix Hosts, Completion, DL support, Using EFS | |
1245 @comment node-name, next, previous, up | |
1246 @section Using EFS with non-Unix hosts | |
1247 | |
1248 EFS also works with some non-Unix hosts, although not necessarily | |
1249 with all the features available with Unix hosts. VMS, CMS, and MTS | |
1250 systems will all now work with EFS and Dired. It also works with a whole | |
1251 bunch of others, but documentation for that has not been written yet. | |
1252 This section was taken straight from the ange-ftp manual, and is | |
1253 therefore in all likelihood out-of-date. | |
1254 | |
1255 EFS should be able to automatically detect which type of host you | |
1256 are using (VMS, CMS or MTS), but if it is unable to do so you can fix | |
1257 the problem by setting the appropriate | |
1258 @code{efs-TYPE-host-regexp} variable (where @code{TYPE} is one of | |
1259 @samp{vms}, @samp{cms} or @samp{mts}) -- see below. If EFS is unable | |
1260 to automatically detect any VMS, CMS or MTS host, please report this as | |
1261 a bug: @xref{Bugs}. | |
1262 | |
1263 In all cases the file-name conventions of the remote host are converted | |
1264 to a UNIX-ish format, and this is the format you should use to find | |
1265 files on such hosts. | |
1266 | |
1267 @menu | |
1268 * VMS support:: Using EFS with VMS systems | |
1269 * CMS support:: Using EFS with CMS systems | |
1270 * MTS support:: Using EFS with MTS systems | |
1271 @end menu | |
1272 | |
1273 @node VMS support, CMS support, Non-Unix Hosts, Non-Unix Hosts | |
1274 @comment node-name, next, previous, up | |
1275 @subsection VMS support | |
1276 @cindex VMS filenames | |
1277 VMS filenames are of the form @code{FILE.TYPE;##}, where both | |
1278 @code{FILE} and @code{TYPE} can be up to 39 characters long, and | |
1279 @code{##} is an integer version number between 1 and 32,767. Valid | |
1280 characters in filenames are @samp{A}-@samp{Z}, @samp{0}-@samp{9}, | |
1281 @samp{_}, @samp{-} and @samp{$}, however @samp{$} cannot begin a | |
1282 filename and @samp{-} cannot be used as the first or last character. | |
1283 | |
1284 Directories in VMS are converted to the standard UNIX @samp{/} notation. | |
1285 For example, the VMS filename | |
1286 @example | |
1287 PUB$:[ANONYMOUS.SDSCPUB.NEXT]README.TXT;1 | |
1288 @end example | |
1289 would be entered as | |
1290 @noindent | |
1291 @example | |
1292 /PUB$$:/ANONYMOUS/SDSCPUB/NEXT/README.TXT;1 | |
1293 @end example | |
1294 @noindent | |
1295 (The double @samp{$} is required to prevent Emacs from attempting to | |
1296 expand an environment variable.) Similarly, to anonymously FTP the file | |
1297 @file{[.CSV.POLICY]RULES.MEM;1} from @code{ymir.claremont.edu} you would | |
1298 type @kbd{C-x C-f | |
1299 /anonymous@@ymir.claremont.edu:CSV/POLICY/RULES.MEM;1}. You can always | |
1300 drop off the @samp{;##} part at the end of the filename to get the | |
1301 latest version. | |
1302 | |
1303 Sandy Rutherford provides some tips for using VMS hosts: | |
1304 @itemize @bullet | |
1305 @item | |
1306 Although VMS is not case sensitive, EMACS running under UNIX is. | |
1307 Therefore, to access a VMS file, you must enter the filename with upper | |
1308 case letters. | |
1309 | |
1310 @item | |
1311 To access the latest version of file under VMS, you use the filename | |
1312 without the @samp{;} and version number. You should always edit the | |
1313 latest version of a file. If you want to edit an earlier version, copy | |
1314 it to a new file first. This has nothing to do with EFS, but is | |
1315 simply good VMS operating practice. Therefore, to edit @file{FILE.TXT;3} | |
1316 (say 3 is latest version), do @kbd{C-x C-f | |
1317 /ymir.claremont.edu:FILE.TXT}. If you inadvertently do | |
1318 @example | |
1319 @kbd{C-x C-f /ymir.claremont.edu:FILE.TXT;3} | |
1320 @end example | |
1321 @noindent | |
1322 you will find that VMS will not allow | |
1323 you to save the file because it will refuse to overwrite | |
1324 @file{FILE.TXT;3}, but instead will want to create @file{FILE.TXT;4}, | |
1325 and attach the buffer to this file. To get out of this situation, | |
1326 @kbd{M-x write-file /ymir.claremont.edu:FILE.TXT} will attach the buffer | |
1327 to latest version of the file. For this reason, in Dired @kbd{f} | |
1328 (@code{dired-find-file}), | |
1329 @findex dired-find-file | |
1330 always loads the file sans version, whereas @kbd{v}, | |
1331 (@code{dired-view-file}), | |
1332 @findex dired-view-file | |
1333 always loads the explicit version number. The | |
1334 reasoning being that it reasonable to view old versions of a file, but | |
1335 not to edit them. | |
1336 | |
1337 @item | |
1338 VMS filenames often contain @samp{$} characters: make sure you always | |
1339 quote these as @samp{$$} and watch out for the Emacs bug which fails to | |
1340 quote @samp{$}'s when defaults are presented in the minibuffer: see | |
1341 @xref{Bugs}. | |
1342 @end itemize | |
1343 | |
1344 EFS should automatically detect that you are using a VMS host. If | |
1345 it fails to do so (which should be reported as a bug) you can use the | |
1346 command @code{efs-add-vms-host} | |
1347 @findex efs-add-vms-host | |
1348 to inform EFS manually. For a more permanent effect, or | |
1349 if you use a VMS host regularly, it's a good idea to set | |
1350 @code{efs-vms-host-regexp} to a regular expression matching that | |
1351 @vindex efs-vms-host-regexp | |
1352 host's name. For instance, if use use @code{ymir.claremont.edu} a lot, | |
1353 place the following in your .emacs: | |
1354 @example | |
1355 (setq efs-vms-host-regexp "^ymir.claremont.edu$") | |
1356 @end example | |
1357 | |
1358 @node CMS support, MTS support, VMS support, Non-Unix Hosts | |
1359 @comment node-name, next, previous, up | |
1360 @subsection CMS support | |
1361 EFS has full support, including Dired support, for hosts | |
1362 running CMS. | |
1363 | |
1364 @cindex CMS filenames | |
1365 CMS filenames are entered in a UNIX-y way. Minidisks are | |
1366 treated as UNIX directories; for example to access the file @file{READ.ME} in | |
1367 minidisk @file{*.311} on @file{cuvmb.cc.columbia.edu}, you would enter | |
1368 @example | |
1369 /anonymous@@cuvmb.cc.columbia.edu:/*.311/READ.ME | |
1370 @end example | |
1371 If @file{*.301} is the default minidisk for this account, you could access | |
1372 @file{FOO.BAR} on this minidisk as | |
1373 @example | |
1374 /anonymous@@cuvmb.cc.columbia.edu:FOO.BAR | |
1375 @end example | |
1376 CMS filenames are of the form @file{FILE.TYPE}, where both @file{FILE} | |
1377 and @file{TYPE} can be up to 8 characters. Again, beware that CMS | |
1378 filenames are always upper case, and hence must be entered as such. | |
1379 | |
1380 Sandy Rutherford provides some tips on using CMS hosts: | |
1381 @itemize @bullet | |
1382 @item | |
1383 CMS machines, with the exception of anonymous accounts, nearly always | |
1384 need an account password. To have EFS send an account password, | |
1385 you can either include it in your @file{.netrc} (@xref{Using a .netrc}), or use | |
1386 @code{efs-set-account}. | |
1387 @findex efs-set-account | |
1388 | |
1389 @item | |
1390 EFS cannot send ``write passwords'' for a minidisk. Hopefully, we | |
1391 can fix this. | |
1392 @end itemize | |
1393 | |
1394 EFS should automatically detect that you are using a CMS host. If | |
1395 it fails to do so (which should be reported as a bug) you can use the | |
1396 command @code{efs-add-cms-host} | |
1397 @findex efs-add-cms-host | |
1398 to inform EFS manually. For a more permanent effect, or | |
1399 if you use a CMS host regularly, it's a good idea to set | |
1400 @code{efs-cms-host-regexp} to a regular expression matching that | |
1401 @vindex efs-cms-host-regexp | |
1402 host's name. | |
1403 | |
1404 @node MTS support, , CMS support, Non-Unix Hosts | |
1405 @comment node-name, next, previous, up | |
1406 @subsection MTS support | |
1407 EFS has full support, including Dired support, for hosts | |
1408 running the Michigan terminal system, and should be able to | |
1409 automatically recognise any MTS machine. | |
1410 | |
1411 @cindex MTS filenames | |
1412 MTS filenames are entered in a UNIX-y way. For example, if your account | |
1413 was @file{YYYY}, the file @file{FILE} in the account @file{XXXX:} on | |
1414 @file{mtsg.ubc.ca} would be entered as | |
1415 @example | |
1416 /YYYY@@mtsg.ubc.ca:/XXXX:/FILE | |
1417 @end example | |
1418 In other words, MTS accounts are treated as UNIX directories. Of course, | |
1419 to access a file in another account, you must have access permission for | |
1420 it. If @file{FILE} were in your own account, then you could enter it in a | |
1421 relative path fashion as | |
1422 @example | |
1423 /YYYY@@mtsg.ubc.ca:FILE | |
1424 @end example | |
1425 MTS filenames can be up to 12 characters. Like UNIX, the structure of the | |
1426 filename does not contain a type (i.e. it can have as many @samp{.}'s as you | |
1427 like.) MTS filenames are always in upper case, and hence be sure to enter | |
1428 them as such! MTS is not case sensitive, but an EMACS running under UNIX | |
1429 is. | |
1430 | |
1431 EFS should automatically detect that you are using an MTS host. If | |
1432 it fails to do so (which should be reported as a bug) you can use the | |
1433 command @code{efs-add-mts-host} | |
1434 @findex efs-add-mts-host | |
1435 to inform EFS manually. For a more permanent effect, or | |
1436 if you use an MTS host regularly, it's a good idea to set | |
1437 @code{efs-mts-host-regexp} to a regular expression matching that | |
1438 @vindex efs-mts-host-regexp | |
1439 host's name. | |
1440 | |
1441 @node Completion, Accessing the FTP process, Non-Unix Hosts, Using EFS | |
1442 @comment node-name, next, previous, up | |
1443 @section File- and host-name completion | |
1444 | |
1445 Full filename completion is supported on all remote UNIX hosts and some | |
1446 non-Unix hosts. Hostnames also have completion if they are mentioned in | |
1447 the @file{.netrc} and no username is specified. However using the | |
1448 filename completion feature can be a bit of a two edged sword. | |
1449 | |
1450 To understand why, we need to discuss how EFS works. Whenever | |
1451 EFS is asked to find a remote file (or directory) an @code{ls} | |
1452 command is sent to the FTP process to list all the files in the | |
1453 directory. This list is maintained in an internal cache, to provide | |
1454 filename completion for later requests on that directory. EFS keeps | |
1455 this cache up-to-date by monitoring Emacs commands which affect files | |
1456 and directories, but if a process outside Emacs (such as another user) | |
1457 changes a directory (e.g. a new file is added) | |
1458 completion won't work on | |
1459 that file since EFS doesn't know about it yet. The solution if to | |
1460 force EFS to reread the directory and update it's cache, and the | |
1461 easiest way to do that is with Dired --- @xref{Using Dired} to see how. | |
1462 | |
1463 Another problem is that the @code{ls} command can take a long time, | |
1464 especially when dealing with distant hosts over slow links. So if you're | |
1465 after a file in the @file{pub/images} directory but nothing else, it's a | |
1466 better idea to type @kbd{pub/images/file @key{TAB}} than @kbd{pub/im @key{TAB}} | |
1467 which will force a read of the @file{pub} directory (since | |
1468 EFS needs to know how to complete @code{im}). A little extra typing | |
1469 can often save a lot of waiting. Don't be afraid to use the @key{TAB} | |
1470 key once the directory is cached, though. | |
1471 | |
1472 @node Accessing the FTP process, , Completion, Using EFS | |
1473 @comment node-name, next, previous, up | |
1474 @section Accessing the FTP process buffer | |
1475 | |
1476 The FTP process used to access the remote files is available for access | |
1477 if you wish. It will be in a buffer | |
1478 @cindex process buffers | |
1479 @cindex buffers | |
1480 called @samp{"*ftp @var{remote-file-name}*"}, | |
1481 i.e. if you found the file | |
1482 @example | |
1483 /anonymous@@archive.site.com:pub/README | |
1484 @end example | |
1485 @noindent | |
1486 there will be a buffer | |
1487 @example | |
1488 *ftp anonymous@@archive.site.com* | |
1489 @end example | |
1490 @noindent | |
1491 where all the transfers are taking place. You can have a look at the | |
1492 buffer using @kbd{C-x b} as usual, and even type in commands to the FTP | |
1493 process under an interface very much like @samp{shell-mode}. There are | |
1494 two instances when doing this can be very useful: one is accessing | |
1495 non-UNIX hosts, where Dired and filename completion may not work (if EFS | |
1496 even works at all). If you are going to use @code{mget} or @code{mput}, | |
1497 make sure you type @code{glob} first: EFS turns globbing off by | |
1498 default. Don't be afraid of changing directories, either --- EFS always | |
1499 uses absolute pathnames when communicating with the FTP process. | |
1500 | |
1501 You can kill the FTP process at any time simply by killing this buffer. | |
1502 @cindex FTP processes | |
1503 @cindex processes | |
1504 You can also call @code{efs-kill-ftp-process}. | |
1505 @findex efs-kill-ftp-process | |
1506 This won't cause EFS any grief whatsoever --- if you later make | |
1507 another request to that host, EFS will simply fire up another | |
1508 process and create a new buffer to hold it. | |
1509 | |
1510 @node Getting help, Bugs, Using EFS, Top | |
1511 @comment node-name, next, previous, up | |
1512 @chapter Getting help | |
1513 | |
1514 EFS has its own mailing list called @t{efs-help}. All users of EFS | |
1515 are welcome to subscribe (see below) and to discuss aspects of | |
1516 EFS. | |
1517 | |
1518 To [un]subscribe to @t{efs-help}, or to report mailer problems with the | |
1519 list, please mail one of the following addresses: | |
1520 | |
1521 @example | |
1522 efs-help-request@@cuckoo.hpl.hp.com | |
1523 @end example | |
1524 or | |
1525 @example | |
1526 efs-help-request%cuckoo.hpl.hp.com@@hplb.hpl.hp.com | |
1527 @end example | |
1528 | |
1529 Please don't forget the @t{-request} part. | |
1530 | |
1531 For mail to be posted directly to @t{efs-help}, send to one of the | |
1532 following addresses: | |
1533 | |
1534 @example | |
1535 efs-help@@cuckoo.hpl.hp.com | |
1536 @end example | |
1537 or | |
1538 @example | |
1539 efs-help%cuckoo.hpl.hp.com@@hplb.hpl.hp.com | |
1540 @end example | |
1541 | |
1542 Alternatively, there is a mailing list that only gets | |
1543 announcements of new EFS releases. This is called @t{efs-announce}, | |
1544 and can be subscribed to by e-mailing to the @t{-request} address as | |
1545 above. Please make it clear in the request which mailing list you | |
1546 wish to join. | |
1547 | |
1548 Mailing list archives are also accessible from this web page: | |
1549 | |
1550 @example | |
1551 http://www-uk.hpl.hp.com/people/ange/efs | |
1552 @end example | |
1553 | |
1554 | |
1555 @node Bugs, Concept Index, Getting help, Top | |
1556 @comment node-name, next, previous, up | |
1557 @chapter Bugs and Wish List | |
1558 | |
1559 | |
1560 If you find any bugs or problems with this package, @strong{please} | |
1561 e-mail the authors. Ideas and constructive comments are especially | |
1562 welcome. So are any enhancements to EFS, preferably debugged and | |
1563 documented. Also welcome are any typo fixes, corrections or additions to | |
1564 this manual. | |
1565 | |
1566 Here is a list of known bugs: | |
1567 | |
1568 If you hit a bug in this list, please report it anyway. Most of | |
1569 the bugs here remain unfixed because they are considered too | |
1570 esoteric to be a high priority. If one of them gets reported | |
1571 enough, we will likely change our view on that. | |
1572 | |
1573 @enumerate | |
1574 @item | |
1575 EFS does not check to make sure that when creating a new file, | |
1576 you provide a valid filename for the remote operating system. | |
1577 If you do not, then the remote FTP server will most likely | |
1578 translate your filename in some way. This may cause EFS to | |
1579 get confused about what exactly is the name of the file. | |
1580 | |
1581 @item | |
1582 For CMS support, we send too many @code{cd}'s. Since @code{cd}'s are | |
1583 cheap, I haven't worried about this too much. Eventually, we should have | |
1584 some caching of the current minidisk. This is complicated by the fact | |
1585 that some CMS servers lie about the current minidisk, so sending | |
1586 redundant cd's helps us recover in this case. | |
1587 | |
1588 @item | |
1589 The code to do compression of files over ftp is not as careful as it | |
1590 should be. It deletes the old remote version of the file, before | |
1591 actually checking if the local to remote transfer of the compressed file | |
1592 succeeds. Of course to delete the original version of the file after | |
1593 transferring the compressed version back is also dangerous, because some | |
1594 OS's have severe restrictions on the length of filenames, and when the | |
1595 compressed version is copied back the @code{"-Z"} or @code{".Z"} may be | |
1596 truncated. Then, EFS would delete the only remaining version of the | |
1597 file. Maybe EFS should make backups when it compresses files (of | |
1598 course, the backup @code{"~"} could also be truncated off, sigh...). | |
1599 Suggestions? | |
1600 | |
1601 @item | |
1602 If a dir listing is attempted for an empty directory on (at least | |
1603 some) VMS hosts, an ftp error is given. This is really an ftp bug, and | |
1604 I don't know how to get EFS work to around it. | |
1605 | |
1606 @item | |
1607 EFS gets confused by directories containing file names with embedded | |
1608 newlines. A temporary solution is to add @code{"q"} to your dired | |
1609 listing switches. As long as your dired listing switches also contain | |
1610 @code{"l"} and either @code{"a"} or @code{"A"}, EFS will use these | |
1611 switches to get listings for its internal cache. The "q" switch should | |
1612 force listings to be exactly one file per line. You still will not be | |
1613 able to access a file with embedded newlines, but at least it won't mess | |
1614 up the parsing of the rest of the files. | |
1615 | |
1616 @item | |
1617 EFS cannot parse symlinks which have an embedded @code{" -> "} in their | |
1618 name. It's alright to have an embedded @code{" -> "} in the name of any | |
1619 other type of file. A fix is possible, but probably not worth the | |
1620 trouble. If you disagree, send us a bug report. | |
1621 | |
1622 @item | |
1623 EFS doesn't handle context-dep. files in H-switch listings on | |
1624 HP's. It wouldn't be such a big roaring deal to fix this. I'm | |
1625 waiting until I get an actual bug report though. | |
1626 | |
1627 @item | |
1628 If a hard link is added or deleted, EFS will not update its | |
1629 internal cache of the link count for other names of the file. | |
1630 This may cause file-nlinks to return incorrectly. Reverting | |
1631 any dired buffer containing other names for the file will | |
1632 cause the file data to be updated, including the link counts. | |
1633 A fix for this problem is known and will be eventually | |
1634 implemented. How it is implemented will depend on how we decide | |
1635 to handle inodes. See below. | |
1636 | |
1637 @item | |
1638 EFS is unable to parse R-switch listings from remote Unix hosts. | |
1639 This is inefficient, because EFS will insist on doing individual | |
1640 listings of the subdirectories to get its file information. | |
1641 This may be fixed if there is enough demand. | |
1642 | |
1643 @item | |
1644 In file-attributes, EFS returns a fake inode number. Of course | |
1645 this is necessary, but this inode number is not even necessarily | |
1646 unique. It is simply the sum of the characters (treated as | |
1647 integers) in the host name, user name, and file name. Possible | |
1648 ways to get a unique inode number are: | |
1649 | |
1650 @enumerate | |
1651 @item | |
1652 Simply keep a count of all remote file in the cache, and | |
1653 return the file's position in this count as a negative number. | |
1654 @item | |
1655 For unix systems, we could actually get at the real inode number on the | |
1656 remote host, by adding an @code{"i"} to the ls switches. The inode | |
1657 numbers would then be removed from the listing returned by @code{efs-ls}, if | |
1658 the caller hadn't requested the @code{"i"} switch. We could then make a | |
1659 unique number out of the host name and the real inode number. | |
1660 @end enumerate | |
1661 | |
1662 @item | |
1663 EFS tries to determine if a file is readable or writable by comparing | |
1664 the file modes, file owner, and user name under which it is logged | |
1665 into the remote host. This does not take into account groups. | |
1666 We simply assume that the user belongs to all groups. As a result | |
1667 we may assume that a file is writable, when in fact it is not. | |
1668 Groups are tough to handle correctly over FTP. Suggestions? | |
1669 (For new FTP servers, can do a @code{"QUOTE SITE EXEC groups"} to | |
1670 handle this.) | |
1671 @end enumerate | |
1672 | |
1673 | |
1674 @node Concept Index, Variable and command index, Bugs, Top | |
1675 @comment node-name, next, previous, up | |
1676 @unnumbered Concept Index | |
1677 | |
1678 @printindex cp | |
1679 | |
1680 @node Variable and function index, , Concept Index, Top | |
1681 @unnumbered Variable and function index | |
1682 | |
1683 @printindex vr | |
1684 | |
1685 @contents | |
1686 | |
1687 @bye | |
1688 |