Mercurial > hg > xemacs-beta
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/efs.texi Mon Aug 13 08:54:51 2007 +0200 @@ -0,0 +1,1688 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename efs.info +@settitle EFS +@comment %**end of header (This is for running Texinfo on a region.) + +@synindex fn vr + +@node Top, What is EFS?, (dir), (dir) +@comment node-name, next, previous, up +@ifinfo +@unnumbered EFS + +This file documents EFS, a system for transparent file-transfer +between remote hosts using the FTP protocol within Emacs. + +This info is for version 1.15 of EFS. + +Documentation version: 1.0 + +Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries a copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +@end ifinfo + +@titlepage +@sp5 +@center @titlefont{EFS} +@center version 1.15 +@sp2 +@center A transparent remote file system, by Sandy Rutherford and Andy Norman +@sp7 +@center This documentation based on ange-ftp documentation by David Smith +@center and on documentation in the EFS source code +@center It was put together by Mike Sperber. + +This documentation is definitely incomplete and parts of it may be +outright incorrect or out-of-date. + +@center info-version 1.0 +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +@end titlepage + +@menu +* What is EFS?:: +* Installing EFS:: Where to find it, and how to use it. +* Using EFS:: EFS -- a users' guide. +* Getting help:: Mailing lists and newsgroups. +* Bugs:: Known bugs, and a wish list. + +Indices: +* Concept Index:: +* Variable and command index:: +@end menu + + +@node What is EFS?, Installing EFS, Top, Top +@comment node-name, next, previous, up +@chapter Introducing EFS + +EFS is a system for transparent file-transfer between remote UNIX, +Guardian, DOS, Macintosh, KA9Q, Netware, NOS/VE, Plan 9, TI Explorer, +Twenex, TOPS 20, VOS, MPE, MVS, VMS, CMS or MTS hosts using FTP. This +means that you can edit, copy and otherwise manipulate files on any +machine you have access to from within Emacs as if it were a local +file. EFS works by introducing an extended filename syntax, and +overloading functions such as @code{insert-file-contents} so that +accessing a remote file causes appropriate commands to be sent to an FTP +process. EFS includes and enhanced version of Dired to facilitate +directory browsing and multiple file transfer from remote hosts. + +The authors of EFS are Sandy Rutherford (@code{sandy@@math.ubc.ca}) and +Andy (Ange) Norman (@code{ange@@hplb.hpl.hp.com}). EFS is partly based +on an earlier package called ange-ftp. The integration of EFS 1.15 into +XEmacs and numerous bug fixes were done by Mike Sperber +(@code{sperber@@informatik.uni-tuebingen.de}). + +@ifinfo +Many people have sent in enhancements for ange-ftp and EFS. +Members of the ange-ftp and EFS Hall of Fame include: + +@itemize @bullet +@item +Many thanks to Roland McGrath for improving the filename syntax handling, +for suggesting many enhancements and for numerous cleanups to the code. + +@item +Thanks to Jamie Zawinski for bugfixes and for ideas such as gateways. + +@item +Thanks to Ken Laprade for improved @file{.netrc} parsing and password +reading, and Dired/shell autoloading. + +@item +Thanks to Sebastian Kremer for tree dired support and for many ideas and +bugfixes. + +@item +Thanks to Joe Wells for bugfixes, non-UNIX system support, VOS support, +and hostname completion. + +@item +Thanks to Nakagawa Takayuki for many good ideas, filename-completion, help +with file-name expansion, efficiency worries, stylistic concerns and many +bugfixes. + +@item +Also, thanks to Rob Austein, Doug Bagley, Andy Caiger, Jim Franklin, +Noah Friedman, Aksnes Knut-Havard, Elmar Heeb, John Interrante, Roland +McGrath, Jeff Morgenthaler, Mike Northam, Jens Petersen, Jack Repenning, +Joerg-Martin Schwarz, Michael Sperber, Svein Tjemsland, Andy Whitcroft, +Raymond A. Wiker and many others whose names have been forgotten who +have helped to debug and fix problems. +@end itemize +@end ifinfo + +Finally, this info file was put together by Mike Sperber +(@code{sperber@@informatik.uni-tuebingen.de}) from an ange-ftp info file +written by Dave Smith (@code{dsmith@@stats.adelaide.edu.au}) and the EFS +source code. + +@node Installing EFS, Using EFS, What is EFS?, Top +@comment node-name, next, previous, up +@chapter Installing EFS + +At the time of writing of this documentation, the version of EFS +distributed with XEmacs (this means the EFS running on XEmacs +19.15/20.1) is the latest version available. It includes many bugfixes +and some enhancements over the last separately released version of EFS, +1.15. This situation will change once a new version of EFS is +available. + +Generally, EFS is pretty easy to get hold of. FTP is the probably the +simplest method, but other options such as mail are available. + +Once you have the Emacs-Lisp source, there are a few customisations you +might need to make. The ideal configuration is to have the FTP process running +on the same machine as you are running Emacs on, but this is not always +possible since some machines cannot access hosts outside the local +network. In this case, the FTP process needs to be run on a machine +which @emph{does} have access to the local world --- this is called the +@strong{gateway host}. EFS has facilities to make use of a +gateway host when accessing remote hosts. + +@menu +* Obtaining source code:: Where to find the EFS source. +* Installing source:: Where to put it, how to load it. +* Using a gateway:: If your local machine has limited access. +* Setting up a gateway:: +* Gateway types:: +* Gateway problems:: +* Other options:: More user variables to twiddle. +@end menu + +@node Obtaining source code, Installing source, Installing EFS, Installing EFS +@section How to get the EFS source code +@comment node-name, next, previous, up + +The latest separately distributed version of EFS should always be +available from Andy Norman's home page at +@example +http://www-uk.hpl.hp.com/people/ange/efs +@end example + +There are also some ftp locations: + +@table @b +@item Switzerland +@example +/anonymous@@itp.ethz.ch:/sandy/efs/ +@end example + +@item Massachusetts, USA +@example +/anonymous@@alpha.gnu.ai.mit.edu:/efs/ +@end example + +@item California, USA +@example +/anonymous@@ftp.hmc.edu:/pub/emacs/packages/efs/ +@end example +@end table + +Failing these, someone on the EFS mailing list (@xref{Getting help}) may +be able to help you find the latest version. + +@node Installing source, Using a gateway, Obtaining source code, Installing EFS +@comment node-name, next, previous, up +@section Installing the source + +For byte compiling the EFS package, a @file{Makefile} is provided. You +should follow the instructions at the top of the @file{Makefile}. If +you have any problems, please let us know so that we can fix them for +other users. Don't even consider using eFS without byte compiling it. It +will be far too slow. + +If you decide to byte compile efs by hand, it is important that the file +@file{efs-defun.el} be byte compiled first, followed by @file{efs.el}. +The other files may be byte compiled in any order. + +To use EFS, simply put the byte compiled files in your load path +and add + +@example +(require 'efs) +@end example + +in your @file{.emacs} file. Note this takes awhile, and some users have +found this to be unbearably slow. Therefore ... + +If you would like efs to be autoloaded when you attempt to access +a remote file, put + +@example +(require 'efs-auto) +@end example + +in your @file{.emacs} file. Note that there are some limitations associated +with autoloading EFS. A discussion of them is given at the top of +@file{efs-auto.el}. + +Note that, in XEmacs, EFS automatically loads @file{efs-auto} when the +user accesses a remote file. Therefore, no additional @code{require} +statements should be necessary to use EFS. Just fire away ... + +The above instructions should allow you to access all hosts that your +local machine can access. If your local host has limited access, +however, you may wish to have EFS working through a gateway +machine. If so, read on. Otherwise, @xref{Using EFS} to get started +using EFS. + +@node Using a gateway, Setting up a gateway, Installing source, Installing EFS +@comment node-name, next, previous, up +@section Using a gateway + +Sometimes it is necessary for the FTP process to be run on a different +machine than the machine running Emacs. This can happen when the +local machine has restrictions on what hosts it can access. + +Suppose you are running Emacs (and EFS, of course) on a machine X +(let's call it the `local host') and you want to access a file on a +machine Z (which we will call the `remote host'). Unfortunately, X does +not have FTP access to Z: when you try a manual FTP something like +the following happens: +@example +X$ ftp Z.foo.bar.com +ftp: connect: Host is unreachable +@end example +@noindent +However, X @emph{does} have access to a machine Y (the `gateway +machine') which @emph{can} access Z. Fortunately, you have an account on +the gateway machine, and so the solution is to login to Y, ftp to Z, +download the file you want from Z to Y, and then copy it from Y to the +local host, X. This can get a bit tedious, to say the least, but +fortunately EFS can do all the hard work for you. + +@node Setting up a gateway, Gateway types, Using a gateway, Installing EFS +@comment node-name, next, previous, up +@section Setting up a gateway + +@enumerate + +@item +Set the variable @code{efs-gateway-host} to the name of a machine +@vindex efs-gateway-host +that doesn't have the access restrictions. If you need to use a +nonstandard port to access this host for gateway use, then specify +@code{efs-gateway-host} as @code{<hostname>#<port>}. + +@item +Set the variable @code{efs-ftp-local-host-regexp} to a regular +expression +@vindex efs-ftp-local-host-regexp +that matches hosts that can be contacted from running a local ftp +process, but fails to match hosts that can't be accessed locally. + +For example: + +@example + "\\.hp\\.com$\\|^[^.]*$" +@end example + +will match all hosts that are in the @t{.hp.com} domain, or don't have +an explicit domain in their name, but will fail to match hosts with +explicit domains or that are specified by their ip address. + +@item +Set the variable @code{efs-local-host-regexp} to machines that you have +@vindex efs-local-host-regexp +direct TCP/IP access. In other words, you must be able to ping these +hosts. Usually, @code{efs-ftp-local-host-regexp} and +@code{efs-local-host-regexp} will be the same. However, they will +differ for so-called transparent gateways. See below for more +details. + +@item +Set the variable @code{efs-gateway-tmp-name-template} to the name of +@vindex efs-gateway-tmp-name-template +a directory plus an identifying filename prefix for making temporary +files on the gateway. For example: @code{"/tmp/hplose/ange/efs"} + +@item +If the gateway and the local host share cross-mounted directories, +set the value of @code{efs-gateway-mounted-dirs-alist} accordingly. It +@vindex efs-gateway-mounted-dirs-alist +is particularly useful, but not mandatory, that the directory +of @code{efs-gateway-tmp-name-template} be cross-mounted. +@vindex efs-gateway-tmp-name-template + +@item +Set the variable @code{efs-gateway-type} to the type gateway that you have. +This variable is a list, the first element of which is a symbol +denoting the type of gateway. +@end enumerate + +@node Gateway types, Gateway problems, Setting up a gateway, Installing EFS +@comment node-name, next, previous, up +@section Supported gateway types + +@vindex efs-gateway-type + +@table @samp + +@item local +This means that your local host is itself the gateway. However, +it is necessary to use a different FTP client to gain access to +the outside world. If the name of the FTP client were @t{xftp}, you might +set @code{efs-gateway-type} to + +@example +(list 'local "xftp" efs-ftp-program-args) +@end example + +If @t{xftp} required special arguments, then give them in place of +@t{efs-ftp-program-args}. +@vindex efs-ftp-program-args + +@item proxy + +This indicates that your gateway works by first FTP'ing to it, and +then issuing a @code{USER} command of the form + +@example +USER <username>@@<host> +@end example + +In this case, you might set @code{efs-gateway-type} to + +@example +(list 'proxy "ftp" efs-ftp-program-args) +@end example + +If you need to use a nonstandard client, such as @t{iftp}, give this +@pindex iftp +instead of @t{ftp}. If this client needs to take special arguments, +give them instead of @t{efs-ftp-program-args}. + +@item remsh + +For this type of gateway, you need to start a remote shell on +your gateway, using either @t{remsh} or @t{rsh}. You should set +@pindex remsh +@pindex rsh +@sc{efs-gateway-type} to something like + +@example +(list 'remsh "remsh" nil "ftp" efs-ftp-program-args) +@end example + +If you use @t{rsh} instead of @r{remsh}, change the second element from +@code{"remsh"} to @code{"rsh"}. Note that the symbol indicating the gateway +type should still be @code{'remsh}. If you want to pass arguments +to the remsh program, give them as the third element. For example, +if you need to specify a user, make this @code{(list "-l" "sandy")}. +If you need to use a nonstandard FTP client, specify that as the fourth +element. If your FTP client needs to be given special arguments, +give them instead of @code{efs-ftp-program-args}. + +@item interactive + +This indicates that you need to establish a login on the gateway, +using either @t{telnet} or @t{rlogin}. +@pindex telnet +@pindex rlogin +You should set @code{efs-gateway-type} to something like + +@example +(list 'interactive "rlogin" nil "exec ftp" efs-ftp-program-args) +@end example + +If you need to use @t{telnet}, then give @code{"telnet"} in place of the second +element @code{"rlogin"}. If your login program needs to be given arguments, +then they should be given in the third slot. The fourth element +is for the name of the FTP client program. Giving this as @code{"exec ftp"}, +instead of @code{"ftp"}, ensures that you are logged out if the FTP client +dies. If the FTP client takes special arguments, give these instead +of @code{efs-ftp-program-args}. Furthermore, you should see the documentation +at the top of @file{efs-gwp.el}. You may need to set the variables +@code{efs-gwp-setup-term-command}, and @code{efs-gwp-prompt-pattern}. +@vindex efs-gwp-setup-term-command +@vindex efs-gwp-prompt-pattern + +@item raptor +This is a type of gateway where efs is expected to specify a gateway +user, and send a password for this user using the @code{ACCOUNT} command. +For example, to log in to @samp{foobar.edu} as sandy, while using the account +ange on the gateway, the following commands would be sent: + +@example +open raptorgate.com +quote USER sandy@@foobar.edu ange +quote pass <sandy's password on foobar> +quote account <ange's password on raptorgate> +@end example + +For such a gateway, you would set @code{efs-gateway-type} to + +@example +(list 'raptor efs-ftp-program efs-ftp-program-args <GATEWAY USER>) +@end example + +where @code{<GATEWAY USER>} is the name of your account on the gateway. In +the above example, this would be @code{"ange"}. You can set your gateway +password by simply setting an account password for the gateway host. +This can be done with either efs-set-account, or within your .netrc +file. If no password is set, you will be prompted for one. + +@item interlock +This is a type of gateway where you are expected to send a PASS +command after opening the connection to the gateway. +The precise login sequence is + +@example +open interlockgate +quote PASS <sandy's password on interlockgate> +quote USER sandy@@foobar.edu +quote PASS <sandy's password on foobar.edu> +@end example + +For such a gateway, you should set @code{efs-gateway-type} to + +@example +(list 'interlock efs-ftp-program efs-ftp-program-args) +@end example + +If you need to use a nonstandard name for your FTP client, +then replace @code{efs-ftp-program} with this name. If your FTP client +needs to take nonstandard arguments, then replace @code{efs-ftp-program-args} +with these arguments. + +If your gateway returns both a 220 code and a 331 code to the +@code{"open interlockgate"} command, then you should add a regular +expression to @code{efs-skip-msgs} that matches the 220 response. +Returning two response codes to a single FTP command is not permitted +in RFC 959. It is not possible for efs to ignore the 220 by default, +because than it would hang for interlock installations which do not +require a password. + +@item kerberos +With this gateway, you need to authenticate yourself by getting a +kerberos "ticket" first. Usually, this is done with the kinit program. +Once authenticated, you connect to @samp{foobar.com} as user sandy with the +sequence: (Note that the @code{"-n"} argument inhibits automatic login. +Although, in manual use you probably don't use it, EFS always uses it.) + +@example +iftp -n +open foobar.com +user sandy@@foobar.com +@end example +@pindex iftp + +You should set @code{efs-gateway-type} to something like + +@example +(list 'kerberos "iftp" efs-ftp-program-args "kinit" <KINIT-ARGS>) +@end example + +If you use an FTP client other than @t{iftp}, insert its name instead of +@code{"iftp"} above. If your FTP client needs special arguments, give +them as a list of strings in place of @code{efs-ftp-program-args}. If +the program that you use to collect a ticket in not called +@code{"kinit"}, then give its name in place of @code{"kinit"} above. +@code{<KINIT-ARGS>} should be any arguments that you need to pass to +your kinit program, given as a list of strings. Most likely, you will +give this as nil. + +See the file @file{efs-kerberos.el} for more configuration variables. If you +need to adjust any of these variables, please report this to us so that +we can fix them for other users. + +If EFS detects that you are not authenticated to use the gateway, it +will run the kinit program automatically, prompting you for a password. +If you give a password in your @file{.netrc} file for login the value of +@code{efs-gateway-host} and user @t{kerberos}, then EFS will use this to +obtain gateway authentication. + +@item Transparent gateways + +If your gateway is completely transparent (for example it uses socks), +then you should set @code{efs-gateway-type} to @code{nil}. Also, set +@code{efs-ftp-local-host-regexp} to @code{".*"}. However, +@code{efs-local-host-regexp}, must still be set to a regular expression +matching hosts in your local domain. EFS uses this to determine which +machines that it can open-network-stream to. Furthermore, you should +still set @code{efs-gateway-host} to the name of your gateway machine. +That way EFS will know that this is a special machine having direct +TCP/IP access to both hosts in the outside world, and hosts in your +local domain. + +@end table + + + +@node Gateway problems, Other options, Gateway types, Installing EFS +@comment node-name, next, previous, up +@section Common Problems with Gateways + +@subsection Spurious 220 responses + +Some proxy-style gateways (eg gateway type @code{'proxy} or @code{'raptor}), +return two 3-digit FTP reply codes to the @code{USER} command. +For example: + +@example +open gateway.weird +220 Connected to gateway.weird +quote USER sandy@@foobar +220 Connected to foobar +331 Password required for sandy +@end example + +This is wrong, according to the FTP Protocol. Each command must return +exactly one 3-digit reply code. It may be preceded by continuation +lines. What should really be returned is: + +@example +quote USER sandy@@foobar +331-Connected to foobar. +331 Password required for sandy. +@end example + +or even + +@example +quote USER sandy@@foobar +331-220 Connected to foobar. +331 Password required for sandy. +@end example + +Even though the @samp{"331-220"} looks strange, it is correct protocol, +and EFS will parse it properly. + +If your gateway is returning a spurious 220 to @code{USER}, a work-around +is to add a regular expression to @code{efs-skip-msgs} that matches +@vindex efs-skip-msgs +this line. It must not match the 220 line returned to the open +command. This work-around may not work, as some system FTP clients +also get confused by the spurious 220. In this case, the only +solution is to patch the gateway server. In either case, please +send a bug report to the author of your gateway software. + +@subsection Case-sensitive parsing of FTP commands + +Some gateway servers seem to treat FTP commands case-sensitively. +This is incorrect, as RFC 959 clearly states that FTP commands +are always to be case-insensitive. If this is a problem with your +gateway server, you should send a bug report to its author. +If efs is using a case for FTP commands that does not suit your server, +a possible work-around is to edit the efs source so that the required +case is used. However, we will not be making any changes to the +standard EFS distribution to support this type of server behaviour. +If you need help changing the efs source, you should enquire with the +efs-help mailing list. + +@node Other options, , Gateway problems, Installing EFS +@comment node-name, next, previous, up +@section Other user options + +Here are other user options available in EFS: + +@code{efs-netrc-filename}: The name of a file in @code{netrc(5)} +format that EFS will use to match hostnames, users and their +respective passwords. Hostnames specified here are also used for hostname +completion. +The default is @code{"~/.netrc"}. +@vindex efs-netrc-filename + +@code{efs-default-user}: If this is a string, it is the username to +use when none is specified in a filename. If @code{nil}, then the +name under which the user is logged in is used. If non-@code{nil} but +not a string, the user is prompted for the name. The default is @code{nil}. +@vindex efs-default-user + +@code{efs-default-password}: The password to use when the user is the +same as @code{efs-default-user}. The default is @code{nil}. +@vindex efs-default-password + +@code{efs-default-account}: Account password to use when the user +is the same as @code{efs-default-user}. The default is @code{nil}. +@vindex efs-default-account + +@code{efs-dumb-unix-host-regexp}: The FTP servers on some machines have +problems if the @code{ls} command is used. The usual indication that +something is wrong is when EFS erroneously thinks that a directory +is just a plain file. The routine @code{efs-add-host} can +be called to tell EFS to limit itself to the @code{DIR} command and +not @code{ls} for a given host (but this change will take effect for the +current Emacs session only) when called like this: + +@example +(efs-add-host 'dumb-unix "hostname") +@end example + +If a large number of machines with similar hostnames have this problem +then it is easier to change the value of this variable to a regexp which +matches hostnames which have this problem, particularly since EFS cannot +automatically detect such hosts. The default is @code{nil}. +@vindex efs-dumb-unix-host-regexp +@findex efs-add-host + +@code{efs-binary-file-name-regexp}: By default EFS will +transfer files in ASCII mode. If a file being transferred matches the +value of this regexp then the FTP process will be toggled into BINARY +mode before the transfer and back to ASCII mode after the transfer. The +default is: +@example + (concat "\\." ; the dot + ;; extensions + "\\([zZ]\\|t?gz\\|lzh\\|arc\\|zip\\|zoo\\|ta[rz]\\|dvi\\|sit\\|" + "ps\\|elc\\|gif\\|Z-part-..\\|tpz\\|exe\\|[jm]pg\\|TZ[a-z]?\\|lib\\)" + "\\(~\\|~[0-9]+~\\)?$" ; backups + "\\|" + ;; UPPER CASE LAND + "\\." + "\\(ARC\\|ELC\\|TAGS\\|EXE\\|ZIP\\|DVI\|ZOO\\|GIF\\|T?GZ\\|" + "[JM]PG\\)" + "\\([.#;][0-9]+\\)?$" ; versions + ) +@end example +@vindex efs-binary-file-name-regexp + +@code{efs-hash-mark-size}: EFS by default requests that the +FTP process sends hash marks (just @code{#} characters) during transfers +to keep track of how much data has been sent or received. This variable, +if non-@code{nil}, should be the number of kilobytes represented by the +FTP client's hash mark. The default value of 1 doesn't work for me --- I +use 2 instead. +@vindex efs-hash-mark-size + +@code{efs-verbose}: If this is @code{t} then EFS will be chatty about +interaction with the FTP process. The default is @code{t}. +@vindex efs-process-verbose + +@code{efs-ftp-program-name}: This should be the name of the FTP +program to run on the local host. The default value of @code{"ftp"} +should be fine for most systems. +@vindex efs-ftp-program-name + +@code{efs-make-backup-files}: A list of operating systems for which +EFS will make Emacs backup files on the remote host. For example, +@code{'(unix)} makes sense, but @code{'(unix vms)} or @code{'(vms)} +would be silly, since VMS makes its own backups. The host type is +determined by the function @code{efs-host-type}. Possible host +types are: @code{dumb-unix}; @code{vos}; @code{vms}; @code{mts}; and +@code{unix}. The default of @code{nil} means make no backups on remote +hosts. +@vindex efs-make-backup-files +@cindex backup files + +@code{efs-skip-msgs}: A regular expression matching messages from +the ftp process that can be ignored. The default is +@example + (concat + "^110 \\|" ; Restart marker reply. + "^125 \\|" ; Data connection already open; transfer starting. + "^150 ") ; File status OK; about to open connection. +@end example +@noindent +but you might need to tweak it if EFS is giving up when it +shouldn't. +@vindex efs-skip-msgs + +@code{efs-fatal-msgs}: A regular expression matching messages from +the FTP process that indicate something has gone drastically wrong +attempting the action that was initiated and that the FTP process should +(or already has) been killed. The default is +@example +(concat + ;; RFC959 codes + "^221 \\|" ; Service closing control connection. + "^421 \\|" ; Service not available. + "^425 \\|" ; Can't open data connection. + "^426 \\|" ; Connection closed, transfer aborted. + "^451 \\|" ; Requested action aborted, local error in processing. + ;; RFC959 non-compliant codes + "^552 Maximum Idle Time Exceded\\.$\\|" ; Hellsoft server uses this to + ; indicate a timeout. 552 is + ; supposed to be used for exceeded + ; storage allocation. Note that + ; they also misspelled the error + ; message. + ;; client problems + "^ftp: \\|^Not connected\\|^rcmd: \\|^No control connection\\|" + "^unknown host\\|: unknown host$\\|^lost connection\\|" + "^[Ss]egmentation fault\\|" + ;; Make sure that the "local: " isn't just a message about a file. + "^local: [^/]\\|" + ;; Gateways + "^iftp: cannot authenticate to server\\b" + ) +@end example +@vindex efs-fatal-msgs + +@code{efs-gateway-fatal-msgs}: Regular expression matching messages +from the rlogin / telnet process that indicates that logging in to the +gateway machine has gone wrong. The default is +@example +"No route to host\\|Connection closed\\|No such host\\|Login incorrect" +@end example +@vindex efs-gateway-fatal-msgs + +@code{efs-tmp-name-template}: This should be a directory and a +filename prefix indicating where EFS should make temporary files. +The default of @code{"/tmp/efs"} should be fine for most systems. +@vindex efs-tmp-name-template +@cindex temporary files + +@code{efs-retry-time}: Number of seconds to wait before retrying if +a file or listing doesn't arrive. For slow connections, you might get a +``listing unreadable'' error messages +@cindex listing unreadable error +or an empty buffer for a file that you know has something in it. The +solution is to increase the value of @code{efs-retry-time}. Its default +value is 5 which is plenty for reasonable connections. However, for +some transatlantic connections 20 might be a better value. +@vindex efs-retry-time + +@node Using EFS, Getting help, Installing EFS, Top +@comment node-name, next, previous, up +@chapter Using EFS + +Once installed, efs operates largely transparently. All files normally +accessible to you on the internet, become part of a large virtual file +system. These files are accessed using an extended file name syntax. To +access file @code{<path>} on remote host @code{<host>} by logging in as +user @code{<user>}, you simply specify the full path of the file as +@code{/<user>@@<host>:<path>}. Nearly all Emacs file handling functions +work for remote files. It is not possible to access remote files using +shell commands in an emacs *shell* buffer, as such commands are passed +directly to the shell, and not handled by emacs. + +FTP is the underlying utility that efs uses to operate on remote files. + +For example, if @code{find-file} is given a filename of: + +@example +/ange@@anorman:/tmp/notes +@end example + +then EFS will spawn an FTP process, connect to the host 'anorman' as +user 'ange', get the file @file{/tmp/notes} and pop up a buffer containing the +contents of that file as if it were on the local file system. If efs +needed a password to connect then it would prompt the user in the +minibuffer. For further discussion of the EFS path syntax, see the +paragraph on extended file name syntax @ref{Remote filenames}. + +Full file-name completion is supported on every type of remote host. To +do filename completion, EFS needs a listing from the remote host. +Therefore, for very slow connections, it might not save any +time. However, the listing is cached, so subsequent uses of file-name +completion will be just as fast as for local file names. + +@menu +* Ports:: Using nonstandard ports. +* Remote filenames:: The EFS extended filename syntax. +* Passwords:: +* Using Dired:: Browsing directories. +* Using a .netrc:: Preventing password pestering. +* EFS commands:: Interactive commands supplied by EFS. +* FTP processes:: How EFS does its work +* Tips:: Some stuff to help you use EFS +* DL support:: Descriptive directory listings +* Non-Unix Hosts:: Some of what you want to know +* Completion:: Works but has its price +* Accessing the FTP process:: ... manually +@end menu + +@node Ports, Remote filenames, Using EFS, Using EFS +@comment node-name, next, previous, up +@section Using nonstandard ports + +EFS supports the use of nonstandard ports on remote hosts. To specify +that port @code{<port>} should be used, give the host name as +@code{host#<port>}. Host names may be given in this form anywhere that +efs normally expects a host name. This includes in the @file{.netrc} file. +Logically, EFS treats different ports to correspond to different remote +hosts. + +@node Remote filenames, Passwords, Ports, Using EFS +@comment node-name, next, previous, up +@section Extended filename syntax + +The default full EFS path syntax is + +@example +/<user>@@<host>#<port>:<path> +@end example + +Both the @code{#<port>'}and @code{<user>@@} may be omitted. + +If the @code{#<port>} is omitted, then the default port is taken to be 21, +the usual FTP port. For most users, the port syntax will only +very rarely be necessary. + +If the @code{<user>@@} is omitted, then EFS will use a default user. If +a login token is specified in your @file{.netrc} file, then this will be +used as the default user for @code{<host>}. Otherwise, it is determined +based on the value of the variable @code{efs-default-user}. +@vindex{efs-default-user} + +This EFS path syntax can be customised to a certain extent by changing a +number of variables. To +undertake such a customization requires some knowledge about the +internal workings of EFS. + +@node Passwords, Using Dired, Remote filenames, Using EFS +@comment node-name, next, previous, up +@section Passwords + +A password is required for each host / user pair. This will be prompted +for when needed, unless already set by calling @code{efs-set-passwd}, +@findex{efs-set-passwd} or specified in a @emph{valid} @file{~/.netrc} +file. + +When EFS prompts for a password, it provides defaults from its cache of +currently known passwords. The defaults are ordered such that passwords +for accounts which have the same user name as the login which is +currently underway have priority. You can cycle through your list of +defaults with @kbd{C-n} to cycle forwards and @kbd{C-p} to cycle +backwards. The list is circular. + +@subsection Passwords for user @t{anonymous} + +Passwords for the user @t{anonymous} (or @t{ftp}) are handled specially. +The variable @code{efs-generate-anonymous-password} controls what +\vindex efs-generate-anonymous-password happens. If the value of this +variable is a string, then this is used as the password; if +non-@code{nil}, then a password is created from the name of the user and +the hostname of the machine on which Emacs is running; if @code{nil} +(the default) then the user is prompted for a password as normal. + +@subsection Account passwords + +Some FTP servers require an additional password which is sent by the +@code{ACCOUNT} command. EFS will detect this and prompt the user for an +account password if the server expects one. Also, an account password +can be set by calling @code{efs-set-account}, or by specifying an +@findex efs-set-account +account token in the @file{.netrc} file. + +Some operating systems, such as CMS, require that @code{ACCOUNT} be used +to give a write access password for minidisks. @code{efs-set-account} can be +used to set a write password for a specific minidisk. Also, tokens of +the form + +@example +minidisk <minidisk name> <password> +@end example + +may be added to host lines in your @file{.netrc} file. Minidisk tokens +must be at the end of the host line, however there may be an arbitrary +number of them for any given host. + +@node Using Dired, Using a .netrc, Passwords, Using EFS +@comment node-name, next, previous, up +@section Using Dired + +This feature of EFS is particularly useful when file transfers, as +opposed to file editing, are the order of the day. Simply run +@code{find-file} on a directory to +get a listing of the files in that directory. For example, you might +run @code{find-file} on +@example +/anonymous@@archive.site.com:pub +@end example +@noindent +to see what's in the @file{pub} directory of your favourite archive +@cindex archive sites +site. This brings up a Dired buffer of all the files in that directory. +The @kbd{f} command is useful for looking at @file{README} files --- if +you then decide to save it @kbd{C-x C-w} is useful. You can also use +this method to copy files, but the @kbd{c} command is easier. The +@kbd{f} command can also be used to descend the directory tree by +applying it to directories. + +You can also use Dired to refresh EFS's internal cache. If you +(or anybody else) has changed a remote directory since you first accessed it +with EFS, completion is not provided on any new files that EFS +does not know about. If you have +(or create) a Dired buffer which contains the modified directory, +executing @code{revert-buffer} +@findex revert-buffer +with a prefix argument (@kbd{C-u g} in the Dired buffer) +will force a refresh of both the the buffer @emph{and also EFS's +internal cache}. If you find that filename completion isn't working on a +@cindex filename completion +file that you @emph{know} is there, this is how to fix the problem. + +Dired provides facilities for maintaining an +entire directory tree in a Dired buffer, for marking files which match a +certain regexp (or you can select files interactively) and then copying +all those files to your local host (or even a different remote host). +Another useful feature is Virtual Dired, which allows you to save Dired +@cindex virtual dired +buffers of remote hosts, allowing you to browse them at a later date +without actually needing to connect to the host. + +@node Using a .netrc, EFS commands, Using Dired, Using EFS +@comment node-name, next, previous, up +@section Using a .netrc file + +Being prompted for passwords all the time can get rather annoying, but +there is a way to fix the problem --- a @file{.netrc} (but @xref{Other +options} and @code{efs-netrc-filename} +@vindex efs-netrc-filename +if you want another +filename) file in your home directory. Basically, this is a file (in the +format of Unix @code{netrc(5)}) which +contains the names of all the machines you regularly login to, as well +as the username and password you use for that machine. You can also +supply an account password, if required. + +Your @file{.netrc} file consists of lines of the form +@example +machine <machine-name> login <user-name> password <password> +@end example +@noindent +It doesn't all have to be on the one line, though: any @code{login} or +@code{password} commands in the file refer to the previous +@code{machine} command. You can also have @code{account +<account-passwd>} commands if you need special account passwords. + +For example, you might have the following line in your @file{.netrc}: +@example +machine Y.local.lan.edu login myname password secret +@end example +@noindent +Then if you run @code{find-file} on the file @file{/Y.local.lan.edu:somefile} +you will automatically be logged in as user @code{myname} with password +@code{secret}. You can still login under another name and password, if +you so desire: just include the @code{user@@} part of the filename. + +You may also include a default option, as follows: +@example +default login <user-name> password <password> +@end example +@noindent +which applies to any other machines not mentioned elsewhere in your +@file{.netrc}. A particularly useful application of this is with +anonymous logins: +@cindex anonymous FTP +@example +default login myname password myname@@myhost.edu +@end example +@noindent +so that accessing @file{/anyhost:anyfile} will automatically log you in +anonymously, provided the host is not mentioned in the @file{.netrc}. +Note also that if the value of @code{efs-default-user} is +@vindex efs-default-user +non-@code{nil}, its value will have precedence over the username +supplied in the default option of the @file{.netrc}. + +The @file{.netrc} file is also useful in another regard: machines +included in it are provided with hostname completion. That is, for any +@cindex hostname completion +machine in the @file{.netrc}, you need only type a slash and the first +few characters of its name and then press @key{TAB} to be logged in +automatically with a username and password from the @file{.netrc} file. +So it's a good idea to put hosts you use regularly in your @file{.netrc} +as well: +@example +machine archive.site.com login anonymous password myname@@X.local.lan.edu +@end example + +@node EFS commands, FTP processes, Using a .netrc, Using EFS +@comment node-name, next, previous, up +@section EFS commands + +EFS supplies a few interactive commands to make connecting with +hosts a little easier. + +@noindent +Command @code{efs-set-user}: Prompts for a hostname and a username. +Next time access to the host is attempted, EFS will attempt to log +in again with the new username. +@findex efs-set-user + +@noindent +Command @code{efs-set-passwd}: Prompts for a hostname, user and +password. Future logins to that host as that user will use the given +password. +@findex efs-set-passwd + +@noindent +Command @code{efs-set-account}: Prompts for a hostname, user and +account. Future logins to that host as that user will use the given +account. +@findex efs-set-account + +Note that the effects of the above three commands only last the duration +of the current Emacs session. To make their effects permanent, you may +include them as lisp code in your @file{.emacs}: +@example +(efs-set-user HOST USER) +(efs-set-password HOST USER PASSWORD) +(efs-set-account HOST USER ACCOUNT) +@end example +@noindent +This is an alternative to using a @file{.netrc}; @xref{Using a .netrc}. + +@noindent +Command @code{efs-kill-ftp-process}: kill the FTP process +associated with a given buffer's filename (by default the current +buffer). This is an easy way to achieve a resynch: any future accesses +to the remote host will cause the FTP process to be recreated. +@findex efs-kill-ftp-process + +@node FTP processes, Tips, EFS commands, Using EFS +@comment node-name, next, previous, up +@section FTP processes + +When EFS starts up an FTP process, it leaves it running for speed +purposes. Some FTP servers will close the connection after a period of +time, but EFS should be able to quietly reconnect the next time that +the process is needed. + +The FTP process will be killed should the associated @samp{*ftp user@@host*} +buffer be deleted. This should not cause efs any grief. + +@subsection Showing background FTP activity on the mode-line + +After EFS is loaded, the command @code{efs-display-ftp-activity} will cause +@findex efs-display-ftp-activity +background FTP activity to be displayed on the mode line. The variable +@code{efs-mode-line-format} is used to determine how this data is displayed. +@vindex efs-mode-line-format +efs does not continuously track the number of active sessions, as this +would cause the display to change too rapidly. Rather, it uses a heuristic +algorithm to determine when there is a significant change in FTP activity. + +@subsection File types + +By default EFS will assume that all files are ASCII. If a file +being transferred matches the value of @code{efs-binary-file-name-regexp} +@vindex efs-binary-file-name-regexp +then the file will be assumed to be a binary file, and EFS will +transfer it using "type image". ASCII files will be transferred +using a transfer type which efs computes to be correct according +to its knowledge of the file system of the remote host. The +command @code{efs-prompt-for-transfer-type} toggles the variable +@findex efs-prompt-for-transfer-type +@code{efs-prompt-for-transfer-type}. When this variable is +@vindex efs-prompt-for-transfer-type +non-@code{nil}, EFS will prompt the user for the transfer type to use +for every FTP transfer. Having this set all the time is annoying, but +it is useful to give special treatment to a small set of files. There +is also a variable @code{efs-text-file-name-regexp}. This is tested +@vindex {efs-text-file-name-regexp} +before @code{efs-binary-file-name-regexp}, so if you set +@code{efs-text-file-name-regexp} to a non-trivial regular expression, +and @code{efs-binary-file-name-regexp} to @samp{".*"}, the result will +to make image the default tranfer type. + +Also, if you set @code{efs-treat-crlf-as-nl}, +@vindex efs-treat-crlf-as-nl +then EFS will use type image +to transfer files between hosts whose file system differ only in that +one specifies end of line as CR-LF, and the other as NL. This is useful +if you are transferring files between UNIX and DOS machines, and have a +package such as @file{dos-mode.el}, that handles the extra @key{^M}'s. + +@subsection Status reports + +Most EFS commands that talk to the FTP process output a status +message on what they are doing. In addition, efs can take advantage +of the FTP client's @code{HASH} command to display the status of transferring +files and listing directories. See the documentation for the variables +@code{efs-hash-mark-size}, +@vindex efs-hash-mark-size +@code{efs-send-hash} +@vindex efs-send-hash +and @code{efs-verbose} +@vindex efs-verbose +for more details. + +@subsection Caching of directory information + +EFS keeps an internal cache of file listings from remote hosts. +If this cache gets out of synch, it can be renewed by reverting a +dired buffer for the appropriate directory (@code{dired-revert} is usually +bound to @kbd{g}). + +Alternatively, you can add the following two lines to your @file{.emacs} file +if you want @kbd{C-r} to refresh EFS's cache whilst doing filename +completion. + +@example +(define-key minibuffer-local-completion-map "\C-r" 'efs-re-read-dir) +(define-key minibuffer-local-must-match-map "\C-r" 'efs-re-read-dir) +@end example + +@node Tips, DL support, FTP processes, Using EFS +@comment node-name, next, previous, up + +@section Tips for using EFS + +@enumerate +@item +Beware of compressing files on non-UNIX hosts. EFS will do it by +copying the file to the local machine, compressing it there, and then +sending it back. Binary file transfers between machines of different +architectures can be a risky business. Test things out first on some +test files. @xref{Bugs} Also, note that EFS sometimes +copies files by moving them through the local machine. Again, +be careful when doing this with binary files on non-Unix +machines. + +@item +Beware that dired over ftp will use your setting of +@code{dired-no-confirm} +@vindex dired-no-confirm +(list of dired commands for which confirmation is not asked). +You might want to reconsider your setting of this variable, +because you might want confirmation for more commands on remote +direds than on local direds. For example, I strongly recommend +that you not include compress in this list. If there is enough +demand it might be a good idea to have an alist +@code{efs-dired-no-confirm} of pairs @code{( TYPE . LIST )}, where @code{TYPE} is an +operating system type and @code{LIST} is a list of commands for which +confirmation would be suppressed. Then remote dired listings +would take their (buffer-local) value of @code{dired-no-confirm} from +this alist. Who votes for this? + +@item +Some combinations of FTP clients and servers break and get out of sync +when asked to list a non-existent directory. Some of the @t{ai.mit.edu} +machines cause this problem for some FTP clients. Using +@code{efs-kill-ftp-process} +@findex efs-kill-ftp-process +can be used to restart the ftp process, which +should get things back in synch. + +@item +Some ftp servers impose a length limit on the password that can +be sent. If this limit is exceeded they may bomb in an +incomprehensible way. This sort of behaviour is common with +MVS servers. Therefore, you should beware of this possibility +if you are generating a long password (like an email address) +with @code{efs-generate-anonymous-password}. +@vindex efs-generate-anonymous-password + +@item +Some antiquated FTP servers hang when asked for an @code{RNFR} command. +EFS sometimes uses this to test whether its local cache is stale. +If your server for @code{HOST} hangs when asked for this command, put + +@example +(efs-set-host-property HOST 'rnfr-failed t) +@end example + +in your @code{efs-ftp-startup-function-alist} +@vindex efs-ftp-startup-function-alist +entry for @code{HOST}. + +@item +The FTP servers on some Unix machines have problems if the @code{ls} +command is used. EFS will try to correct for this automatically, +and send the @code{dir} command instead. If it fails, you can call the +function @code{efs-add-host}, +@findex efs-add-host +and give the host type as @code{dumb-unix}. Note that this change will +take effect for the current Emacs session only. To make this +specification for future emacs sessions, put + +@example +(efs-add-host 'dumb-unix "hostname") +@end example + +in your @file{.emacs} file. Also, please report any failure to +automatically recognize dumb unix to the "bugs" address given below, so +that we can fix the auto recognition code. + +@end enumerate + +@node DL support, Non-Unix Hosts, Tips, Using EFS +@comment node-name, next, previous, up +@section Descriptive directory listings + +Some hosts (such as @code{cs.uwp.edu}) now use descriptive directory +listings +@cindex descriptive directory listings +@cindex extended directory listings +(which in fact contain @emph{less} information than the +standard listing!) when issued the @code{ls} command, and EFS has +been modified to cope with this. EFS can detect such listings, but +if you regularly use a remote host which uses this extended listing +format you should set the variable @code{efs-dl-dir-regexp} to a +@vindex efs-dl-dir-regexp +regular expression which matches directories using the extended listing +format. You shouldn't anchor the regexp with @samp{$} -- that way the +regexp will match subdirectories as well. Alternatively, you can use +the interactive command @code{efs-add-dl-dir} to temporarily add a +@findex efs-add-dl-dir +remote directory for this Emacs session only. + +Dired has been modified to work with such descriptive listings. + +@node Non-Unix Hosts, Completion, DL support, Using EFS +@comment node-name, next, previous, up +@section Using EFS with non-Unix hosts + +EFS also works with some non-Unix hosts, although not necessarily +with all the features available with Unix hosts. VMS, CMS, and MTS +systems will all now work with EFS and Dired. It also works with a whole +bunch of others, but documentation for that has not been written yet. +This section was taken straight from the ange-ftp manual, and is +therefore in all likelihood out-of-date. + +EFS should be able to automatically detect which type of host you +are using (VMS, CMS or MTS), but if it is unable to do so you can fix +the problem by setting the appropriate +@code{efs-TYPE-host-regexp} variable (where @code{TYPE} is one of +@samp{vms}, @samp{cms} or @samp{mts}) -- see below. If EFS is unable +to automatically detect any VMS, CMS or MTS host, please report this as +a bug: @xref{Bugs}. + +In all cases the file-name conventions of the remote host are converted +to a UNIX-ish format, and this is the format you should use to find +files on such hosts. + +@menu +* VMS support:: Using EFS with VMS systems +* CMS support:: Using EFS with CMS systems +* MTS support:: Using EFS with MTS systems +@end menu + +@node VMS support, CMS support, Non-Unix Hosts, Non-Unix Hosts +@comment node-name, next, previous, up +@subsection VMS support +@cindex VMS filenames +VMS filenames are of the form @code{FILE.TYPE;##}, where both +@code{FILE} and @code{TYPE} can be up to 39 characters long, and +@code{##} is an integer version number between 1 and 32,767. Valid +characters in filenames are @samp{A}-@samp{Z}, @samp{0}-@samp{9}, +@samp{_}, @samp{-} and @samp{$}, however @samp{$} cannot begin a +filename and @samp{-} cannot be used as the first or last character. + +Directories in VMS are converted to the standard UNIX @samp{/} notation. +For example, the VMS filename +@example +PUB$:[ANONYMOUS.SDSCPUB.NEXT]README.TXT;1 +@end example +would be entered as +@noindent +@example +/PUB$$:/ANONYMOUS/SDSCPUB/NEXT/README.TXT;1 +@end example +@noindent +(The double @samp{$} is required to prevent Emacs from attempting to +expand an environment variable.) Similarly, to anonymously FTP the file +@file{[.CSV.POLICY]RULES.MEM;1} from @code{ymir.claremont.edu} you would +type @kbd{C-x C-f +/anonymous@@ymir.claremont.edu:CSV/POLICY/RULES.MEM;1}. You can always +drop off the @samp{;##} part at the end of the filename to get the +latest version. + +Sandy Rutherford provides some tips for using VMS hosts: +@itemize @bullet +@item +Although VMS is not case sensitive, EMACS running under UNIX is. +Therefore, to access a VMS file, you must enter the filename with upper +case letters. + +@item +To access the latest version of file under VMS, you use the filename +without the @samp{;} and version number. You should always edit the +latest version of a file. If you want to edit an earlier version, copy +it to a new file first. This has nothing to do with EFS, but is +simply good VMS operating practice. Therefore, to edit @file{FILE.TXT;3} +(say 3 is latest version), do @kbd{C-x C-f +/ymir.claremont.edu:FILE.TXT}. If you inadvertently do +@example +@kbd{C-x C-f /ymir.claremont.edu:FILE.TXT;3} +@end example +@noindent +you will find that VMS will not allow +you to save the file because it will refuse to overwrite +@file{FILE.TXT;3}, but instead will want to create @file{FILE.TXT;4}, +and attach the buffer to this file. To get out of this situation, +@kbd{M-x write-file /ymir.claremont.edu:FILE.TXT} will attach the buffer +to latest version of the file. For this reason, in Dired @kbd{f} +(@code{dired-find-file}), +@findex dired-find-file +always loads the file sans version, whereas @kbd{v}, +(@code{dired-view-file}), +@findex dired-view-file +always loads the explicit version number. The +reasoning being that it reasonable to view old versions of a file, but +not to edit them. + +@item +VMS filenames often contain @samp{$} characters: make sure you always +quote these as @samp{$$} and watch out for the Emacs bug which fails to +quote @samp{$}'s when defaults are presented in the minibuffer: see +@xref{Bugs}. +@end itemize + +EFS should automatically detect that you are using a VMS host. If +it fails to do so (which should be reported as a bug) you can use the +command @code{efs-add-vms-host} +@findex efs-add-vms-host +to inform EFS manually. For a more permanent effect, or +if you use a VMS host regularly, it's a good idea to set +@code{efs-vms-host-regexp} to a regular expression matching that +@vindex efs-vms-host-regexp +host's name. For instance, if use use @code{ymir.claremont.edu} a lot, +place the following in your .emacs: +@example +(setq efs-vms-host-regexp "^ymir.claremont.edu$") +@end example + +@node CMS support, MTS support, VMS support, Non-Unix Hosts +@comment node-name, next, previous, up +@subsection CMS support +EFS has full support, including Dired support, for hosts +running CMS. + +@cindex CMS filenames +CMS filenames are entered in a UNIX-y way. Minidisks are +treated as UNIX directories; for example to access the file @file{READ.ME} in +minidisk @file{*.311} on @file{cuvmb.cc.columbia.edu}, you would enter +@example +/anonymous@@cuvmb.cc.columbia.edu:/*.311/READ.ME +@end example +If @file{*.301} is the default minidisk for this account, you could access +@file{FOO.BAR} on this minidisk as +@example +/anonymous@@cuvmb.cc.columbia.edu:FOO.BAR +@end example +CMS filenames are of the form @file{FILE.TYPE}, where both @file{FILE} +and @file{TYPE} can be up to 8 characters. Again, beware that CMS +filenames are always upper case, and hence must be entered as such. + +Sandy Rutherford provides some tips on using CMS hosts: +@itemize @bullet +@item +CMS machines, with the exception of anonymous accounts, nearly always +need an account password. To have EFS send an account password, +you can either include it in your @file{.netrc} (@xref{Using a .netrc}), or use +@code{efs-set-account}. +@findex efs-set-account + +@item +EFS cannot send ``write passwords'' for a minidisk. Hopefully, we +can fix this. +@end itemize + +EFS should automatically detect that you are using a CMS host. If +it fails to do so (which should be reported as a bug) you can use the +command @code{efs-add-cms-host} +@findex efs-add-cms-host +to inform EFS manually. For a more permanent effect, or +if you use a CMS host regularly, it's a good idea to set +@code{efs-cms-host-regexp} to a regular expression matching that +@vindex efs-cms-host-regexp +host's name. + +@node MTS support, , CMS support, Non-Unix Hosts +@comment node-name, next, previous, up +@subsection MTS support +EFS has full support, including Dired support, for hosts +running the Michigan terminal system, and should be able to +automatically recognise any MTS machine. + +@cindex MTS filenames +MTS filenames are entered in a UNIX-y way. For example, if your account +was @file{YYYY}, the file @file{FILE} in the account @file{XXXX:} on +@file{mtsg.ubc.ca} would be entered as +@example +/YYYY@@mtsg.ubc.ca:/XXXX:/FILE +@end example +In other words, MTS accounts are treated as UNIX directories. Of course, +to access a file in another account, you must have access permission for +it. If @file{FILE} were in your own account, then you could enter it in a +relative path fashion as +@example +/YYYY@@mtsg.ubc.ca:FILE +@end example +MTS filenames can be up to 12 characters. Like UNIX, the structure of the +filename does not contain a type (i.e. it can have as many @samp{.}'s as you +like.) MTS filenames are always in upper case, and hence be sure to enter +them as such! MTS is not case sensitive, but an EMACS running under UNIX +is. + +EFS should automatically detect that you are using an MTS host. If +it fails to do so (which should be reported as a bug) you can use the +command @code{efs-add-mts-host} +@findex efs-add-mts-host +to inform EFS manually. For a more permanent effect, or +if you use an MTS host regularly, it's a good idea to set +@code{efs-mts-host-regexp} to a regular expression matching that +@vindex efs-mts-host-regexp +host's name. + +@node Completion, Accessing the FTP process, Non-Unix Hosts, Using EFS +@comment node-name, next, previous, up +@section File- and host-name completion + +Full filename completion is supported on all remote UNIX hosts and some +non-Unix hosts. Hostnames also have completion if they are mentioned in +the @file{.netrc} and no username is specified. However using the +filename completion feature can be a bit of a two edged sword. + +To understand why, we need to discuss how EFS works. Whenever +EFS is asked to find a remote file (or directory) an @code{ls} +command is sent to the FTP process to list all the files in the +directory. This list is maintained in an internal cache, to provide +filename completion for later requests on that directory. EFS keeps +this cache up-to-date by monitoring Emacs commands which affect files +and directories, but if a process outside Emacs (such as another user) +changes a directory (e.g. a new file is added) +completion won't work on +that file since EFS doesn't know about it yet. The solution if to +force EFS to reread the directory and update it's cache, and the +easiest way to do that is with Dired --- @xref{Using Dired} to see how. + +Another problem is that the @code{ls} command can take a long time, +especially when dealing with distant hosts over slow links. So if you're +after a file in the @file{pub/images} directory but nothing else, it's a +better idea to type @kbd{pub/images/file @key{TAB}} than @kbd{pub/im @key{TAB}} +which will force a read of the @file{pub} directory (since +EFS needs to know how to complete @code{im}). A little extra typing +can often save a lot of waiting. Don't be afraid to use the @key{TAB} +key once the directory is cached, though. + +@node Accessing the FTP process, , Completion, Using EFS +@comment node-name, next, previous, up +@section Accessing the FTP process buffer + +The FTP process used to access the remote files is available for access +if you wish. It will be in a buffer +@cindex process buffers +@cindex buffers +called @samp{"*ftp @var{remote-file-name}*"}, +i.e. if you found the file +@example +/anonymous@@archive.site.com:pub/README +@end example +@noindent +there will be a buffer +@example +*ftp anonymous@@archive.site.com* +@end example +@noindent +where all the transfers are taking place. You can have a look at the +buffer using @kbd{C-x b} as usual, and even type in commands to the FTP +process under an interface very much like @samp{shell-mode}. There are +two instances when doing this can be very useful: one is accessing +non-UNIX hosts, where Dired and filename completion may not work (if EFS +even works at all). If you are going to use @code{mget} or @code{mput}, +make sure you type @code{glob} first: EFS turns globbing off by +default. Don't be afraid of changing directories, either --- EFS always +uses absolute pathnames when communicating with the FTP process. + +You can kill the FTP process at any time simply by killing this buffer. +@cindex FTP processes +@cindex processes +You can also call @code{efs-kill-ftp-process}. +@findex efs-kill-ftp-process +This won't cause EFS any grief whatsoever --- if you later make +another request to that host, EFS will simply fire up another +process and create a new buffer to hold it. + +@node Getting help, Bugs, Using EFS, Top +@comment node-name, next, previous, up +@chapter Getting help + +EFS has its own mailing list called @t{efs-help}. All users of EFS +are welcome to subscribe (see below) and to discuss aspects of +EFS. + +To [un]subscribe to @t{efs-help}, or to report mailer problems with the +list, please mail one of the following addresses: + +@example +efs-help-request@@cuckoo.hpl.hp.com +@end example +or +@example +efs-help-request%cuckoo.hpl.hp.com@@hplb.hpl.hp.com +@end example + +Please don't forget the @t{-request} part. + +For mail to be posted directly to @t{efs-help}, send to one of the +following addresses: + +@example +efs-help@@cuckoo.hpl.hp.com +@end example +or +@example +efs-help%cuckoo.hpl.hp.com@@hplb.hpl.hp.com +@end example + +Alternatively, there is a mailing list that only gets +announcements of new EFS releases. This is called @t{efs-announce}, +and can be subscribed to by e-mailing to the @t{-request} address as +above. Please make it clear in the request which mailing list you +wish to join. + +Mailing list archives are also accessible from this web page: + +@example +http://www-uk.hpl.hp.com/people/ange/efs +@end example + + +@node Bugs, Concept Index, Getting help, Top +@comment node-name, next, previous, up +@chapter Bugs and Wish List + + +If you find any bugs or problems with this package, @strong{please} +e-mail the authors. Ideas and constructive comments are especially +welcome. So are any enhancements to EFS, preferably debugged and +documented. Also welcome are any typo fixes, corrections or additions to +this manual. + +Here is a list of known bugs: + +If you hit a bug in this list, please report it anyway. Most of +the bugs here remain unfixed because they are considered too +esoteric to be a high priority. If one of them gets reported +enough, we will likely change our view on that. + +@enumerate +@item +EFS does not check to make sure that when creating a new file, +you provide a valid filename for the remote operating system. +If you do not, then the remote FTP server will most likely +translate your filename in some way. This may cause EFS to +get confused about what exactly is the name of the file. + +@item +For CMS support, we send too many @code{cd}'s. Since @code{cd}'s are +cheap, I haven't worried about this too much. Eventually, we should have +some caching of the current minidisk. This is complicated by the fact +that some CMS servers lie about the current minidisk, so sending +redundant cd's helps us recover in this case. + +@item +The code to do compression of files over ftp is not as careful as it +should be. It deletes the old remote version of the file, before +actually checking if the local to remote transfer of the compressed file +succeeds. Of course to delete the original version of the file after +transferring the compressed version back is also dangerous, because some +OS's have severe restrictions on the length of filenames, and when the +compressed version is copied back the @code{"-Z"} or @code{".Z"} may be +truncated. Then, EFS would delete the only remaining version of the +file. Maybe EFS should make backups when it compresses files (of +course, the backup @code{"~"} could also be truncated off, sigh...). +Suggestions? + +@item +If a dir listing is attempted for an empty directory on (at least +some) VMS hosts, an ftp error is given. This is really an ftp bug, and +I don't know how to get EFS work to around it. + +@item +EFS gets confused by directories containing file names with embedded +newlines. A temporary solution is to add @code{"q"} to your dired +listing switches. As long as your dired listing switches also contain +@code{"l"} and either @code{"a"} or @code{"A"}, EFS will use these +switches to get listings for its internal cache. The "q" switch should +force listings to be exactly one file per line. You still will not be +able to access a file with embedded newlines, but at least it won't mess +up the parsing of the rest of the files. + +@item +EFS cannot parse symlinks which have an embedded @code{" -> "} in their +name. It's alright to have an embedded @code{" -> "} in the name of any +other type of file. A fix is possible, but probably not worth the +trouble. If you disagree, send us a bug report. + +@item +EFS doesn't handle context-dep. files in H-switch listings on +HP's. It wouldn't be such a big roaring deal to fix this. I'm +waiting until I get an actual bug report though. + +@item +If a hard link is added or deleted, EFS will not update its +internal cache of the link count for other names of the file. +This may cause file-nlinks to return incorrectly. Reverting +any dired buffer containing other names for the file will +cause the file data to be updated, including the link counts. +A fix for this problem is known and will be eventually +implemented. How it is implemented will depend on how we decide +to handle inodes. See below. + +@item +EFS is unable to parse R-switch listings from remote Unix hosts. +This is inefficient, because EFS will insist on doing individual +listings of the subdirectories to get its file information. +This may be fixed if there is enough demand. + +@item +In file-attributes, EFS returns a fake inode number. Of course +this is necessary, but this inode number is not even necessarily +unique. It is simply the sum of the characters (treated as +integers) in the host name, user name, and file name. Possible +ways to get a unique inode number are: + +@enumerate +@item +Simply keep a count of all remote file in the cache, and +return the file's position in this count as a negative number. +@item +For unix systems, we could actually get at the real inode number on the +remote host, by adding an @code{"i"} to the ls switches. The inode +numbers would then be removed from the listing returned by @code{efs-ls}, if +the caller hadn't requested the @code{"i"} switch. We could then make a +unique number out of the host name and the real inode number. +@end enumerate + +@item +EFS tries to determine if a file is readable or writable by comparing +the file modes, file owner, and user name under which it is logged +into the remote host. This does not take into account groups. +We simply assume that the user belongs to all groups. As a result +we may assume that a file is writable, when in fact it is not. +Groups are tough to handle correctly over FTP. Suggestions? +(For new FTP servers, can do a @code{"QUOTE SITE EXEC groups"} to +handle this.) +@end enumerate + + +@node Concept Index, Variable and command index, Bugs, Top +@comment node-name, next, previous, up +@unnumbered Concept Index + +@printindex cp + +@node Variable and function index, , Concept Index, Top +@unnumbered Variable and function index + +@printindex vr + +@contents + +@bye +