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