diff man/ange-ftp.texi @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/ange-ftp.texi	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,1397 @@
+\input texinfo   @c -*-texinfo-*-
+@comment %**start of header (This is for running Texinfo on a region.)
+@setfilename ../info/ange-ftp.info
+@settitle ange-ftp
+@comment %**end of header (This is for running Texinfo on a region.)
+
+@synindex pg vr
+
+@node Top, What is ange-ftp?, (dir), (dir)
+@comment  node-name,  next,  previous,  up
+@ifinfo
+@unnumbered Ange-ftp
+
+This file documents ange-ftp, a system for transparent file-transfer
+between remote hosts using the FTP protocol within GNU Emacs.
+
+This info is current to Version 4.2 of Ange-ftp.
+
+Documentation version: 1.32
+
+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{ange-ftp}
+@center version 4.2
+@sp2
+@center A transparent remote file system, by Andy Norman
+@sp7
+@center This documentation by David Smith.
+@center info-version 1.32
+@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 ange-ftp?::	A brief introduction to ange-ftp. Credits.
+* Installing ange-ftp:: Where to find it, and how to use it.
+* Using ange-ftp::	Ange-ftp -- 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 ange-ftp?, Installing ange-ftp, Top, Top
+@comment  node-name,  next,  previous,  up
+@chapter Introducing ange-ftp.
+
+Ange-ftp is a system for transparent file-transfer between remote UNIX,
+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 GNU Emacs
+as if it were a local file. Ange-ftp 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. Ange-ftp works with
+Dired (and in particular Sebastian Kremer's Tree Dired) to facilitate
+directory browsing and multiple file transfer from remote hosts.
+
+The author of ange-ftp is Andy (Ange) Norman (@code{ange@@hplb.hpl.hp.com}).
+@ifinfo
+Many people have sent in enhancements, and Ange has been kept quite
+busy testing them and incorporating them into ange-ftp. Current members
+of the Ange-Ftp 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
+Thanks to Sandy Rutherford who re-wrote most of ange-ftp to support VMS,
+MTS, CMS and UNIX-dls.  Sandy also added dired-support for non-UNIX OS and
+auto-recognition of the host type.
+
+@item
+Also, thanks to Keith Waclena, Mark D. Baushke, Terence Kelleher,
+Ping Zhou, Edward Vielmetti, Jack Repenning, Mike Balenger, Todd
+Kaufmann, Kjetil Svarstad, Tom Wurgler, Linus Tolke, Niko Makila, Carl
+Edman, Bill Trost, Dave Brennan, Dan Jacobson, Andy Scott, Steve
+Anderson, Sanjay Mathur, the folks on the ange-ftp-lovers mailing list
+and many others whose names have been forgotten who have helped to debug
+and fix problems with @file{ange-ftp.el}.
+@end itemize
+@end ifinfo
+
+Finally, this info file was written by Dave Smith
+(@code{dsmith@@stats.adelaide.edu.au}), although large chunks of it
+@ifinfo
+@noindent
+(such as most of this node :-)
+@end ifinfo
+@noindent
+are plagiarised straight out of the extensive
+comments section of @file{ange-ftp.el}.
+
+@node Installing ange-ftp, Using ange-ftp, What is ange-ftp?, Top
+@comment  node-name,  next,  previous,  up
+@chapter Installing ange-ftp
+
+If you don't already have a copy of ange-ftp, or you want a later
+version, ange-ftp 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}. Ange-ftp has facilities to make use of a
+gateway host when accessing remote hosts.
+
+@menu
+* Obtaining source code::	Where to find the ange-ftp source.
+* Installing source::		Where to put it, how to load it.
+* Using a gateway::		For when your local machine has limited access.
+* Other options::		More user variables to twiddle.
+@end menu
+
+@node Obtaining source code, Installing source, ,Installing ange-ftp    
+@section How to get the ange-ftp source code
+@comment  node-name,  next,  previous,  up
+
+The latest version of ange-ftp should always be available for anonymous
+FTP from 
+@example
+alpha.gnu.ai.mit.edu
+@end example
+@noindent
+in the file 
+@example
+ange-ftp/ange-ftp.tar.Z
+@end example
+@noindent
+(which includes both @file{ange-ftp.el} and this texinfo file.) In ange-ftp
+notation, that's
+@example
+/anonymous@@alpha.gnu.ai.mit.edu:ange-ftp/ange-ftp.tar.Z
+@end example
+
+Alternatively, ange-ftp is also part of the Emacs-Lisp Archive
+@cindex Emacs-Lisp Archive
+on
+@code{archive.cis.ohio-state.edu}. The latest version should always be
+available on this site, but the Lisp-Code Directory entry is not always
+up to date; it currently reads:
+@example
+ange-ftp (3.112)  91-08-12
+ Andy Norman, <ange@@hplb.hpl.hp.com>
+ archive.cis.ohio-state.edu:
+   /pub/gnu/emacs/elisp-archive/as-is/ange-ftp.el.Z
+transparent FTP Support for GNU Emacs
+@end example
+
+Ange-ftp can also be found at:
+@example
+ugle.unit.no:/pub/gnu/emacs-lisp/ange-ftp.el.Z
+@end example
+
+Failing these, someone on the ange-ftp mailing list (@xref{Getting
+help}) or the author himself (@xref{What is ange-ftp?}) may be able to
+help you find the latest version.
+
+If you intend to do a lot of browsing though archive sites it is
+definitely worth your while installing Sebastian Kremer's Tree Dired
+@cindex Tree Dired, source
+along with ange-ftp (if you haven't done it already). Tree Dired will
+work with ange-ftp without any modifications: all you need to do is
+follow the installation instructions that come with the package. The
+Tree Dired package comes complete with the latest version of ange-ftp,
+and is available for anonymous FTP from the following sites:
+@example
+ftp.thp.Uni-Koeln.DE:/pub/gnu/emacs/diredall.tar.Z  (134.95.64.1)
+ftp.cs.buffalo.edu:pub/Emacs/diredall.tar.Z
+@end example
+@noindent
+Alternatively, you can get in touch with Sebastian himself
+using his e-mail address: @code{sk@@thp.Uni-Koeln.DE}.
+
+@node Installing source, Using a gateway, Obtaining source code, Installing ange-ftp
+@comment  node-name,  next,  previous,  up
+@section Installing the source
+
+Installation is simply a matter of copying the file @file{ange-ftp.el} 
+to a directory in your load-path. If you don't already have a load-path,
+this is probably a good time to make one. Just create a directory (say,
+@file{~/elisp}) in which you plan to keep your Emacs-Lisp files. Then
+place the following line in your @file{.emacs}:
+@example
+(setq load-path (cons (expand-file-name "~/elisp") load-path))
+@end example
+@cindex load path
+@noindent
+The @code{expand-file-name} is @emph{important} --- omitting it is a
+common reason why load-paths do not work.
+
+Once you've copied @file{ange-ftp.el} to the appropriate directory, it is
+recommended to byte-compile it, with @kbd{M-x byte-compile-file}. Then
+place the line
+@example
+(require 'ange-ftp)
+@end example
+@noindent
+in your @file{.emacs} (@emph{after} the line which modifies your
+load-path, of course!) It's that simple.
+
+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 ange-ftp working through a gateway
+machine. If so, read on. Otherwise, @xref{Using ange-ftp} to get started
+using ange-ftp.
+
+@node Using a gateway, Other options, Installing source, Installing ange-ftp
+@comment  node-name,  next,  previous,  up
+@section Using a gateway
+
+Suppose you are running Emacs (and ange-ftp, 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 ange-ftp can do all the hard work for you.
+
+Firstly, you need to set the variable @code{ange-ftp-gateway-host} to
+the name of the gateway machine. The name should be the one that the
+local host recognises, that is, the name you use with @code{login} so
+that it works.
+@example
+(setq ange-ftp-gateway-host "Y.local.lan.edu")
+@end example
+@vindex ange-ftp-gateway-host
+@noindent
+Since you only need to go through these convolutions for remote hosts
+that the local host can't access directly, you can set the variable
+@code{ange-ftp-local-host-regexp} to a regular expression which matches
+those hostnames that X can access, but does not match those hosts that
+only the gateway can access. In other words, if the host you are trying
+to access matches @code{ange-ftp-local-host-regexp}, the FTP process
+will be run on the local machine, otherwise it will be run on the
+gateway machine. For example
+@example
+(setq ange-ftp-local-host-regexp "\\.hp\\.com$\\|^[^.]*$")
+@end example
+@vindex ange-ftp-local-host-regexp
+@noindent
+will match all hosts that are in the @samp{.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.
+
+The next step is to determine whether you have a smart gateway, that is,
+@cindex smart gateways
+if the FTP process on the gateway will accept commands of the form 
+@code{USER user@@host}. You can test this by trying a manual FTP:
+@example
+X$ ftp -n Y.local.lan.edu
+Connected to Y.local.lan.edu
+220 Y.local.lan.edu FTP server (Version ?.??? some-date) ready.
+ftp> user myname@@Z.foo.bar.com
+@end example
+@noindent
+If you then got a message like:
+@example
+331 Password required for myname@@Z.foo.bar.com
+Password: 
+530 Login incorrect.
+Login failed.
+@end example
+@noindent
+then you @emph{don't} have a smart gateway. If you do, then something
+else happens -- but since it doesn't work for me I can't say what!
+Anyway, if you do have a smart gateway, put the line
+@example
+(setq ange-ftp-smart-gateway t)
+@end example
+@vindex ange-ftp-smart-gateway
+@noindent
+in your @file{.emacs}. You may also wish to set the variable
+@code{ange-ftp-smart-gateway-port}
+@vindex ange-ftp-smart-gateway-port
+to the port of the gateway machine to
+use when smart gateway is in operation, but the default of 21 will
+probably be fine. In any case, your installation has finished, so
+@xref{Using ange-ftp} now -- the rest of this section is of no use to
+you. If on the other hand you don't have a smart gateway, put the line
+@example
+(setq ange-ftp-smart-gateway nil) ; this is the default
+@end example
+@noindent
+in your @file{.emacs} and read on.
+
+Since to get files from Z to X we need to copy from Z to Y, and then
+from Y to X, we need a place to store files on Y which is also
+accessible by X, i.e. we need a directory which is mounted on both X and
+Y. Since we are assuming that the local host and the gateway machine are
+on the same local network, it's fairly likely that this is the case
+thanks to NFS. 
+@cindex NFS
+If such a directory exists, then ange-ftp can transfer files from Z to X
+simply by FTP'ing from Z to the temporary directory on Y, and then using
+a normal (local) copy from the image of the temporary directory on X to
+the destination directory. Unfortunately, ange-ftp requires that
+this temporary directory
+@cindex temporary files
+has the @emph{same} name on both the local and
+gateway machines, so you might need to do some twiddling with symbolic
+links, or ask your sysadmin to set something up with NFS. Once you have
+found such a directory, set the variable
+@code{ange-ftp-gateway-tmp-name-template}
+to the name of this directory plus an identifying filename prefix. For example:
+@example
+(setq ange-ftp-gateway-tmp-name-template "/nfs/hplose/ange/ange-ftp")
+@end example
+@vindex ange-ftp-gateway-tmp-name-template
+@noindent
+where @file{/nfs/hplose/ange} is a directory that is shared between the gateway
+machine Y and the local machine X.
+
+The next step is to find a means of getting an FTP process running on
+the gateway machine. The simplest method is to spawn a remote shell
+@cindex remote shell
+using @code{remsh} or @code{rsh} or their equivalent. Unfortunately, this
+doesn't always work --- try the following:
+@example
+X$ rsh Y.local.lan.edu ftp
+@end example
+@noindent
+On my system, this command simply hangs. On others, it might be
+disallowed for security reasons. If it doesn't work for you, then skip
+the rest of this paragraph. If it does, then you should set then
+variable @code{ange-ftp-gateway-program} to the name of the program
+used to spawn a remote shell. The default is @code{"remsh"}
+on HP-UX machines, and @code{"rsh"} otherwise. You should also set
+@code{ange-ftp-gateway-program-interactive} to @code{nil}:
+@example
+(setq ange-ftp-gateway-program "rsh")
+(setq ange-ftp-gateway-program-interactive nil)
+@end example
+@vindex ange-ftp-gateway-program
+@vindex ange-ftp-gateway-program-interactive
+@noindent
+and now your installation is complete.
+
+Since spawning a remote shell didn't work, ange-ftp needs to actually
+login to the gateway machine to run ftp, the same as you would do if you
+were running ftp manually. So you need to set the variable
+@code{ange-ftp-gateway-program} to the name of the program that lets you
+log onto the gateway machine --- probably @code{"rlogin"} or @code{"telnet"}:
+@example
+(setq ange-ftp-gateway-program "rlogin")
+@end example
+@noindent
+Now set the variable @code{ange-ftp-gateway-prompt-pattern} to a regular
+expression that matches the prompt you get when you login to the gateway
+machine.  Be very specific here; this regexp must not match
+@emph{anything} in your login banner except this prompt.
+@code{shell-prompt-pattern}
+@vindex shell-prompt-pattern
+is far too general as it appears to match
+some login banners from Sun machines. For example:
+@example
+(setq ange-ftp-gateway-prompt-pattern "^[^$]*\\$ *")
+@end example
+@vindex ange-ftp-gateway-prompt-pattern
+@noindent
+You also need to set the variable
+@code{ange-ftp-gateway-program-interactive}
+to @code{t} to let ange-ftp know that it has to "hand-hold" the login to
+the gateway machine:
+@example
+(setq ange-ftp-gateway-program-interactive t)
+@end example
+@noindent
+Now comes a slightly tricky bit. You need to set the variable
+@code{ange-ftp-gateway-setup-term-command} to a UNIX command that will
+put the pty connected to the gateway machine into a no-echoing mode, and
+will strip off carriage-returns from output from the gateway machine.
+The default is @code{"stty -onlcr -echo\n"} for HP-UX machines, and
+@cindex HP-UX
+@code{"stty -echo nl\n"} otherwise. So
+@example
+(setq ange-ftp-gateway-setup-term-command "stty -echo nl\n")
+@end example
+@vindex ange-ftp-gateway-setup-term-command
+@noindent
+will probably work. If it does, then you're done.  There's a bit of a
+problem for @code{tcsh}
+@cindex tcsh
+users, though: in some versions of @code{tcsh}, the "tty
+sanity checking" feature prevents the above commands from working. In
+this case, an easy fix is to invoke @code{csh} first, and then run the
+@code{stty}:
+@example 
+(setq ange-ftp-gateway-setup-term-command  "exec csh\nstty -echo nl\n")
+@end example
+or maybe
+@example
+(setq ange-ftp-gateway-setup-term-command  "(stty -echo nl; csh)\n")
+@end example
+@noindent
+may well do the trick. When using this method, synchronisation may be a
+problem: if your gateway machine is slow in responding, when ange-ftp is
+ready for (and indeed has already sent) FTP commands, your machine may
+still be setting up. This can cause ange-ftp to think that the FTP has
+had an error, and abort. One solution is to set
+@code{ange-ftp-skip-msgs}
+@vindex ange-ftp-skip-msgs
+(a regular expression matching messages from the ftp process that can be
+ignored) so that any line ending in @code{^M} (carriage-returns) will be
+ignored (since the @code{stty} hasn't come into effect yet) and also to
+ignore any lines beginning with your prompt (since this means the
+terminal setup is still in progress):
+@example
+(setq ange-ftp-skip-msgs
+  (concat "\\|^.*\C-M$\\|" ange-ftp-gateway-prompt-pattern
+                                              ange-ftp-skip-msgs))
+@end example
+@noindent
+Unfortunately, this can also mean that sometimes ange-ftp won't
+recognise a @emph{real} error, and simply hang -- but if that ever
+happens @kbd{C-g} might get you out of it.
+
+@node Other options, , Using a gateway, Installing ange-ftp
+@comment  node-name,  next,  previous,  up
+@section Other user options
+
+Here are the other user options available in ange-ftp:
+
+@code{ange-ftp-netrc-filename}: The name of a file in @code{netrc(5)}
+format that ange-ftp 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 ange-ftp-netrc-filename
+
+@code{ange-ftp-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 ange-ftp-default-user
+
+@code{ange-ftp-default-password}: The password to use when the user is the
+same as @code{ange-ftp-default-user}. The default is @code{nil}.
+@vindex ange-ftp-default-password
+
+@code{ange-ftp-default-account}: Account password to use when the user
+is the same as @code{ange-ftp-default-user}. The default is @code{nil}.
+@vindex ange-ftp-default-account
+
+@code{ange-ftp-generate-anonymous-password}: If this is @code{t}, then
+ange-ftp will generate a password of the form @code{your_username@@local_host}
+when you specify a username of @code{anonymous} in the filename (or if
+you are automatically logged in as @code{anonymous}). If this is a
+string, then that string is used instead. If it is @code{nil}, then the
+user is prompted for a password. The default is @code{nil}.
+@vindex ange-ftp-generate-anonymous-password
+
+@code{ange-ftp-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 ange-ftp erroneously thinks that a directory
+is just a plain file. The routine @code{ange-ftp-add-dumb-unix-host} can can
+be called to tell ange-ftp 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 GNU Emacs session only). 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 ange-ftp cannot automatically detect
+such hosts. The default is @code{nil}.
+@vindex ange-ftp-dumb-unix-host-regexp
+@pindex ange-ftp-add-dumb-unix-host
+
+@code{ange-ftp-binary-file-name-regexp}: By default ange-ftp 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 "\\.Z$\\|\\.lzh$\\|\\.arc$\\|\\.zip$\\|\\.zoo$\\|\\.tar$\\|"
+        "\\.dvi$\\|\\.ps$\\|\\.elc$\\|TAGS$\\|"
+	"\\.gif$\\|\\.EXE\\(;[0-9]+\\)?$")
+@end example
+@vindex ange-ftp-binary-file-name-regexp
+
+@code{ange-ftp-hash-mark-size}: Ange-ftp 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 ange-ftp-hash-mark-size
+
+@code{ange-ftp-process-verbose}: If this is @code{t} then ange-ftp will
+be chatty about interaction with the FTP process. The default is @code{t}. 
+@vindex ange-ftp-process-verbose
+
+@code{ange-ftp-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 ange-ftp-ftp-program-name
+
+@code{ange-ftp-gateway-ftp-program-name}: Same as above, but this time
+it's the name of the program to be used if a gateway is in use. The
+default is again @code{"ftp"}, but some AT&T folks claim to use
+something called @code{"pftp"} here.
+@vindex ange-ftp-gateway-ftp-program-name
+
+@code{ange-ftp-make-backup-files}: A list of operating systems for which
+ange-ftp 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{ange-ftp-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 ange-ftp-make-backup-files
+@cindex backup files
+
+@code{ange-ftp-path-format}: This variable dictates the the format of a
+fully expanded remote pathname. This is a cons @code{(REGEXP . (HOST
+USER PATH))}, where @code{REGEXP} is a regular expression matching the
+full remote pathname, and @code{HOST}, @code{USER}, and @code{PATH} are
+the numbers of parenthesised expressions in @code{REGEXP} for the components
+(in that order). The syntax can be customised with this variable to a
+certain extent, but there are limitations. The default is @*
+@code{'("^/\\(\\([^@@/:]*\\)@@\\)?\\([^@@/:]*\\):\\(.*\\)" . (3 2 4))}.
+@vindex ange-ftp-path-format
+
+@code{ange-ftp-multi-msgs}: A regular expression matching messages from
+the ftp process that start a multiline reply. The default is @*
+@code{"^220-\\|^230-\\|^226\\|^25.-\\|^221-\\|^200-\\|^530-\\|^4[25]1-"}
+@vindex ange-ftp-multi-msgs
+
+@code{ange-ftp-good-msgs}: A regular expression matching messages from
+the ftp process that indicate that the action that was initiated has
+completed successfully. The default is
+@code{"^220 \\|^230 \\|^226\\|^25. \\|^221 \\|^200 \\|^[Hh]ash mark"}.
+@vindex ange-ftp-good-msgs
+
+@code{ange-ftp-skip-msgs}: A regular expression matching messages from
+the ftp process that can be ignored. The default is
+@example
+(concat "^200 \\(PORT\\|Port\\) \\|^331 \\|^150 \\|^350 \\|^[0-9]+ bytes \\|"
+        "^Connected \\|^$\\|^Remote system\\|^Using\\|^ \\|Password:\\|"
+        "^local:\\|^Trying\\|^125 \\|^550-")
+@end example
+@noindent
+but you might need to tweak it if ange-ftp is giving up when it
+shouldn't.
+@vindex ange-ftp-skip-msgs
+
+@code{ange-ftp-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 "^ftp: \\|^Not connected\\|^530 \\|^4[25]1 \\|rcmd: \\|"
+        "^No control connection\\|unknown host\\|^lost connection")
+@end example
+@vindex ange-ftp-fatal-msgs
+
+@code{ange-ftp-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 ange-ftp-gateway-fatal-msgs
+
+@code{ange-ftp-tmp-name-template}: This should be a directory and a
+filename prefix indicating where ange-ftp should make temporary files.
+The default of @code{"/tmp/ange-ftp"} should be fine for most systems.
+@vindex ange-ftp-tmp-name-template
+@cindex temporary files
+
+@code{ange-ftp-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{ange-ftp-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 ange-ftp-retry-time
+
+@node Using ange-ftp, Getting help, Installing ange-ftp, Top
+@comment  node-name,  next,  previous,  up
+@chapter Using ange-ftp
+
+Once you have ange-ftp installed, you never need worry about using FTP
+again. The interface is completely transparent, and you may now use
+Emacs commands such as @kbd{C-x C-f} (@code{find-file})
+@pindex find-file
+on @emph{any}
+file that your local host (or, if you are using one) your gateway can
+access. That file may be a regular file (for editing, viewing etc.), a
+directory (for invoking Dired) or even a symbolic link
+@cindex symbolic links
+(pointing to a
+directory or a regular file). All it takes is an extended filename
+syntax. For example, if you give the filename
+@example
+/ange@@anorman:/tmp/notes
+@end example
+@noindent
+to @code{find-file}, then ange-ftp will spawn an FTP process, connect to
+the host @code{anorman} as user @code{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 filesystem.  If ange-ftp needed a
+password to connect then it would prompt the user in the minibuffer.
+From then on you can edit that file as if it were any other file: saving
+is with @kbd{C-x C-s} as usual --- in fact, everything is as usual.
+
+Ange-ftp is also extremely useful for regular "file-transfer" FTP jobs.
+Since Dired also works on remote directories when using ange-ftp, you
+will be able to browse the filesystem on your favourite archive site
+with consummate ease.
+
+@menu
+* Remote filenames::		The ange-ftp extended filename syntax.
+* Using Dired::			Browsing directories.
+* Using a .netrc::		Preventing password pestering.
+* Ange-ftp commands::		Interactive commands supplied by ange-ftp.
+* DL support::			For hosts using descriptive directory listings.
+* Non-Unix Hosts::		Some hosts have funny filenames.
+* Completion::			On filenames and hostnames.
+* Accessing the FTP process::   For when manual tinkering is needed.
+@end menu
+
+@node Remote filenames, Using Dired, , Using ange-ftp
+@comment  node-name,  next,  previous,  up
+@section Remote filename syntax
+
+The general form of the extended filename syntax is
+@example
+/user@@host:path
+@end example
+@noindent
+which refers to the file pointed to by @code{path} on machine
+@code{host} when logging in as user @code{user}. When @code{path} is
+supplied as a relative file-name (that is, without a leading @samp{/})
+it is relative to @code{user}'s home directory (although such relative
+filenames are ultimately converted to absolute ange-ftp pathnames). You
+may even refer to home directories
+@cindex home directories of other users
+@cindex other users' home directories
+of users on remote Unix sites using the
+standard tilde @samp{~} notation.
+@code{host} needs to be
+the fully qualified pathname if the local or gateway machine requires it
+to be (however hostname completion is available if it is included in
+your @file{.netrc} -- @xref{Using a .netrc}), or it may be an IP
+@cindex IP numbers
+@cindex numeric Internet addresses
+number if your nameserver can't find the site. The @code{user@@} part
+may be omitted, in which case the username is chosen on the basis of the
+variable @code{ange-ftp-default-user}
+@vindex ange-ftp-default-user
+(@xref{Other options}) and your
+@file{.netrc}. If a password is requested by the FTP process, ange-ftp
+will either prompt you for it, or generate one on the basis of the
+variables @code{ange-ftp-default-password},
+@vindex ange-ftp-default-password
+and your @file{.netrc}.
+
+Thus the following are all valid ange-ftp filenames:
+@example
+/anonymous@@waldo.uranium.com:pub/games/wumpus
+/root@@127.44.3.1:/etc/passwd
+/jbrown@@freddie.ucla.edu:~mblack/
+/alpha.gnu.ai.mit.edu:ange-ftp/ange-ftp.tar.Z
+@end example
+
+@node Using Dired, Using a .netrc, Remote filenames, Using ange-ftp
+@comment  node-name,  next,  previous,  up
+@section Using Dired
+
+This feature of ange-ftp 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 ange-ftp's internal cache. If you
+(or anybody else) has changed a remote directory since you first accessed it
+with ange-ftp, completion is not provided on any new files that ange-ftp
+does not know about. If you have
+(or create) a Dired buffer which contains the modified directory,
+executing @code{revert-buffer}
+@pindex 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 ange-ftp'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.
+
+The version of Dired supplied with Emacs version 18.58 (and earlier
+versions) does not include a capability for multiple file transfers. The
+@cindex multiple file transfers
+@cindex wildcards
+Tree Dired package (@xref{Obtaining source code}), however, is ideal
+for this application. Tree 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. See the documentation
+for Tree Dired for more details.
+
+Since ange-ftp is mostly transparent, modifying Dired or Tree Dired by
+means of hooks or keybindings should still work.
+
+@node Using a .netrc, Ange-ftp commands, Using Dired, Using ange-ftp    
+@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{ange-ftp-netrc-filename}
+@vindex ange-ftp-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{ange-ftp-default-user} is
+@vindex ange-ftp-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 Ange-ftp commands, DL support, Using a .netrc, Using ange-ftp    
+@comment  node-name,  next,  previous,  up
+@section Ange-ftp commands
+
+Ange-ftp supplies a few interactive commands to make connecting with
+hosts a little easier.
+
+@noindent
+Command @code{ange-ftp-set-user}: Prompts for a hostname and a username.
+Next time access to the host is attempted, ange-ftp will attempt to log
+in again with the new username.
+@pindex ange-ftp-set-user
+
+@noindent
+Command @code{ange-ftp-set-passwd}: Prompts for a hostname, user and
+password. Future logins to that host as that user will use the given
+password.
+@pindex ange-ftp-set-passwd
+
+@noindent
+Command @code{ange-ftp-set-account}: Prompts for a hostname, user and
+account. Future logins to that host as that user will use the given
+account.
+@pindex ange-ftp-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
+(ange-ftp-set-user HOST USER)
+(ange-ftp-set-password HOST USER PASSWORD)
+(ange-ftp-set-account HOST USER ACCOUNT)
+@end example
+@noindent
+This is an alternative to using a @file{.netrc}; @xref{Using a .netrc}.
+
+@noindent
+Command @code{ange-ftp-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.
+@pindex ange-ftp-kill-ftp-process
+
+@node DL support, Non-Unix Hosts, Ange-ftp commands, Using ange-ftp    
+@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 ange-ftp has
+been modified to cope with this. Ange-ftp can detect such listings, but
+if you regularly use a remote host which uses this extended listing
+format you should set the variable @code{ange-ftp-dl-dir-regexp} to a
+@vindex ange-ftp-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{ange-ftp-add-dl-dir} to temporarily add a
+@pindex ange-ftp-add-dl-dir
+remote directory for this Emacs session only.
+
+Tree Dired has been modified to work with such descriptive listings.
+
+@node Non-Unix Hosts, Completion, DL support, Using ange-ftp    
+@comment  node-name,  next,  previous,  up
+@section Using ange-ftp with non-Unix hosts
+
+Ange-ftp 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 ange-ftp and Tree Dired (although
+Classical Dired may well be broken on such systems.) Filename completion
+also now works on these hosts. 
+
+Ange-ftp 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{ange-ftp-TYPE-host-regexp} variable (where @code{TYPE} is one of
+@samp{vms}, @samp{cms} or @samp{mts}) -- see below. If ange-ftp 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 ange-ftp with VMS systems
+* CMS support::		Using ange-ftp with CMS systems
+* MTS support::		Using ange-ftp with MTS systems
+@end menu
+
+@node VMS support, CMS support, , 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 ange-ftp, 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 Tree Dired @kbd{f}
+(@code{dired-find-file}),
+@pindex dired-find-file
+always loads the file sans version, whereas @kbd{v},
+(@code{dired-view-file}),
+@pindex 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
+
+Ange-ftp 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{ange-ftp-add-vms-host}
+@pindex ange-ftp-add-vms-host
+to inform ange-ftp manually. For a more permanent effect, or
+if you use a VMS host regularly, it's a good idea to set
+@code{ange-ftp-vms-host-regexp} to a regular expression matching that
+@vindex ange-ftp-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 ange-ftp-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
+Ange-ftp has full support, including Tree 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 ange-ftp send an account password,
+you can either include it in your @file{.netrc} (@xref{Using a .netrc}), or use
+@code{ange-ftp-set-account}.
+@pindex ange-ftp-set-account
+
+@item
+Ange-ftp cannot send ``write passwords'' for a minidisk. Hopefully, we
+can fix this.
+@end itemize
+
+Ange-ftp 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{ange-ftp-add-cms-host}
+@pindex ange-ftp-add-cms-host
+to inform ange-ftp manually. For a more permanent effect, or
+if you use a CMS host regularly, it's a good idea to set
+@code{ange-ftp-cms-host-regexp} to a regular expression matching that
+@vindex ange-ftp-cms-host-regexp
+host's name.
+
+@node MTS support, , CMS support, Non-Unix Hosts    
+@comment  node-name,  next,  previous,  up
+@subsection MTS support
+Ange-ftp has full support, including Tree 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.
+
+Ange-ftp 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{ange-ftp-add-mts-host}
+@pindex ange-ftp-add-mts-host
+to inform ange-ftp manually. For a more permanent effect, or
+if you use an MTS host regularly, it's a good idea to set
+@code{ange-ftp-mts-host-regexp} to a regular expression matching that
+@vindex ange-ftp-mts-host-regexp
+host's name.
+
+@node Completion, Accessing the FTP process, Non-Unix Hosts, Using ange-ftp    
+@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 ange-ftp works. Whenever
+ange-ftp 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. Ange-ftp 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 ange-ftp doesn't know about it yet. The solution if to
+force ange-ftp 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
+ange-ftp 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 ange-ftp    
+@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 ange-ftp
+even works at all). The other is multiple (i.e. wildcard) file transfers
+@cindex multiple file transfers
+@cindex wildcards
+which the standard version of Dired does not handle (but Tree Dired
+@emph{does}, and is worth installing for this feature alone.)  If you
+are going to use @code{mget} or @code{mput}, make sure you type
+@code{glob} first: ange-ftp turns globbing off by default. Don't be
+afraid of changing directories, either --- ange-ftp 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
+This won't cause ange-ftp any grief whatsoever --- if you later make
+another request to that host, ange-ftp will simply fire up another
+process and create a new buffer to hold it.
+
+@node Getting help, Bugs, Using ange-ftp, Top    
+@comment  node-name,  next,  previous,  up
+@chapter Getting help
+
+Ange-ftp has its own mailing list modestly called ange-ftp-lovers where
+ange-ftp users discuss new features, problems, bug fixes etc. There is
+also another list called ange-ftp-lovers-announce which is reserved
+exclusively for the announcement of new versions. All
+users of ange-ftp are welcome to subscribe (see below) to either of
+these lists.  New versions of ange-ftp are posted periodically to
+these lists.
+
+To [un]subscribe to ange-ftp-lovers or ange-ftp-lovers-announce, or to
+report mailer problems with the list, please mail one of the following
+addresses:
+@example
+ange-ftp-lovers-request@@anorman.hpl.hp.com
+ange-ftp-lovers-request%anorman.hpl.hp.com@@hplb.hpl.hp.com
+hplb.hpl.hp.com!anorman.hpl.hp.com!ange-ftp-lovers-request
+hplabs.hpl.hp.com!anorman.hpl.hp.com!ange-ftp-lovers-request
+@end example
+@noindent
+Please don't forget the @samp{-request} part, and please make it clear
+in the request which mailing list you wish to join.
+
+For mail to be posted directly to ange-ftp-lovers, send to one of the
+following addresses:
+@example
+ange-ftp-lovers@@anorman.hpl.hp.com
+ange-ftp-lovers%anorman.hpl.hp.com@@hplb.hpl.hp.com
+hplb.hpl.hp.com!anorman.hpl.hp.com!ange-ftp-lovers
+hplabs.hpl.hp.com!anorman.hpl.hp.com!ange-ftp-lovers
+@end example
+@noindent
+The ange-ftp-lovers mailing list is archived on 
+@example
+ftp.reed.edu:pub/mailing-lists/ange-ftp/
+@end example
+
+The newsgroup @code{gnu.emacs.help} also occasionally discusses ange-ftp.
+
+@node Bugs, Concept Index, Getting help, Top
+@comment  node-name,  next,  previous,  up
+@chapter Bugs and Wish List
+
+Here is a list of the known bugs in ange-ftp:
+
+@itemize @bullet
+@item
+Be warned that files created by using ange-ftp will take account of the
+umask
+@cindex umask
+of the ftp daemon process rather than the umask of the creating
+user.  This is particulary important when logging in as the root user.
+The way that I tighten up the ftp daemon's umask under HP-UX is to make
+sure that the umask is changed to 027 before I spawn @file{/etc/inetd}.  I
+suspect that there is something similar on other systems.
+
+@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
+@code{ai.mit.edu} machines cause this problem for some FTP clients.
+
+@item
+Ange-ftp 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 ange-ftp to
+get confused about what exactly is the name of the file. The
+most common causes of this are using lower case filenames on systems
+which support only upper case, and using filenames which are too
+long.
+
+@item
+Null (blank) passwords confuse both ange-ftp and some FTP daemons.
+
+@item
+ange-ftp likes to use pty's
+@cindex pty
+to talk to its FTP processes. If GNU Emacs
+creates a FTP process that only talks via pipes (for example, if 
+@code{process-connection-type} is @code{nil})
+@vindex process-connection-type
+then ange-ftp won't be getting the information it requires at the time that 
+it wants it since pipes flush at different times to pty's. One        
+disgusting way around this problem is to talk to the FTP process via   
+rlogin which does the `right' things with pty's.                       
+
+@item
+You need to quote @samp{$} characters in filenames by using @samp{$$}
+instead. This isn't actually a bug, but rather an Emacs convention
+(which allows environment variables in filenames.) What @emph{is} an bug
+is that when filenames containing @samp{$}'s are inserted in the
+minibuffer as defaults, the @samp{$} is not converted into the @samp{$$}
+quoted form --- hopefully this will be fixed in version 19. It doesn't
+usually bother Unix users, but VMS filenames often contain @samp{$}.
+Incidentally, Sebastian Kremer's @code{gmhist} package
+@pindex gmhist
+(which comes with the Tree Dired distribution: @xref{Obtaining source code})
+fixes this bug.
+
+@item
+@cindex symbolic links
+Some hosts (notably ULTRIX)
+@cindex ULTRIX
+mark symbolic links with a @samp{@@} character in an @code{ls -F}
+listing. The variable @code{dired-ls-F-marks-symlinks}
+@vindex dired-ls-F-marks-symlinks
+when set to @code{t} (the default) alerts Dired to this behaviour and
+everything is OK. Enabling this behaviour by default is not generally a
+problem on hosts which does @emph{not} mark symlinks in this way, but if
+you have @code{dired-ls-F-marks-symlinks} set to @code{t} while
+accessing a such a host, then Dired will think that a symbolic link whose name
+ends in @samp{@@} (a strange thing indeed!) is a regular file. The fix
+(other than setting @code{dired-ls-F-marks-symlinks to} @code{nil}, a bad idea
+if you regularly access hosts who mark symbolic links) is to remove
+@samp{F} from the @code{ls} listing switches (use @kbd{C-u s} in the
+Dired buffer.)
+
+Another problem with symbolic links arises with hosts who do not show
+the linked file with @samp{->} in the listing, meaning that Dired will
+not recognize the symlink. The solution here is to get a decent
+@code{ls} program on that machine. 
+
+@item
+No classic dired support for non-UNIX systems. Tree dired was enough.
+
+@item
+If a directory 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 ange-ftp work to around it.
+
+@item
+Bombs on filenames that start with a space. Deals well with filenames
+containing spaces, but beware that the remote ftpd may not like them much.
+
+@item
+@cindex auto-saving
+Doesn't autosave. Maybe someone could implement auto-saving on the local
+host ...
+
+@item
+@cindex compressing files
+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 @file{-Z} or @file{.Z} may be
+truncated. Then, ange-ftp would delete the only remaining version of the
+file. Maybe ange-ftp should make backups when it compresses files?
+
+@item
+@cindex copying
+Remote to remote copying of files on non-Unix machines can be risky. Depending
+on the variable @code{ange-ftp-binary-file-name-regexp}, ange-ftp will use binary
+mode for the copy. Between systems of different architecture, this still
+may not be enough to guarantee the integrity of binary files. Binary file
+transfers from VMS machines are particularly problematical. 
+
+@item
+@cindex CMS minidisks
+Some CMS machines do not assign a default minidisk when you ftp them as
+anonymous. It is then necessary to guess a valid minidisk name, and
+@code{cd} to it.  This is (understandably) beyond ange-ftp; however
+Sebastian Kremer says:
+@quotation
+It is beyond ange-ftp, but if the @code{init} ftp macro were supported, one
+could write the appropriate @code{cd} command into that.  I used to do that
+on a CMS machine I had an account on because I never could remember
+the name of the minidisk.  I think I even had to give an @code{account}
+command, too. Supporting @code{init} would be a very handy thing.
+
+Hmm, why start @code{ftp(1)} with the @code{-n} flag at all?
+@end quotation
+
+@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.
+@end itemize
+
+If you find any bugs or problems with this package, @strong{please}
+e-mail the author. Ideas and constructive comments are especially
+welcome. So are any enhancements to ange-ftp, preferably debugged and
+documented. Also welcome are any typo fixes, corrections or additions to
+this manual. And just so you don't forget, here's Ange's address again:
+@example
+ange@@hplb.hpl.hp.com
+@end example
+@noindent
+Enjoy!
+
+@node Concept Index, Variable and command index, Bugs, Top
+@comment  node-name,  next,  previous,  up
+@unnumbered Concept Index
+
+@printindex cp
+
+@node Variable and command index, , Concept Index, Top
+@unnumbered Variable and command index
+
+@printindex vr
+
+@contents
+
+@bye
+