@end macro
@copying
-Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
-Software Foundation, Inc.
+Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
+under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
@end ifset
The latest release of @value{tramp} is available for
-@uref{http://ftp.gnu.org/gnu/tramp/, download}, or you may see
+@uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
@ref{Obtaining Tramp} for more details, including the CVS server
details.
* Files directories and localnames:: How file names, directories and localnames are mangled and managed.
* Issues:: Debatable Issues and What Was Decided.
+* GNU Free Documentation License:: The license for this documentation.
+
@detailmenu
--- The Detailed Node Listing ---
@c
@chapter An overview of @value{tramp}
@cindex overview
-After the installation of @value{tramp} into your @value{emacsname}, you
-will be able to access files on remote machines as though they were
-local. Access to the remote file system for editing files, version
-control, and @command{dired} are transparently enabled.
+After the installation of @value{tramp} into your @value{emacsname},
+you will be able to access files on remote machines as though they
+were local. Access to the remote file system for editing files,
+version control, and @code{dired} are transparently enabled.
Your access to the remote machine can be with the @command{rsh},
@command{rlogin}, @command{telnet} programs or with any similar
goes into a buffer.
@item
-The remote host may prompt for a login name (for @command{telnet}). The
-login name is given in the file name, so @value{tramp} sends the login name and
-a newline.
+The remote host may prompt for a login name (for @command{telnet}).
+The login name is given in the file name, so @value{tramp} sends the
+login name and a newline.
@item
The remote host may prompt for a password or pass phrase (for
Again, @value{tramp} transfers the file contents to the remote host either
inline or out-of-band. This is the reverse of what happens when reading
the file.
-
@end itemize
I hope this has provided you with a basic overview of what happens
@value{tramp} is freely available on the Internet and the latest
release may be downloaded from
-@uref{http://ftp.gnu.org/gnu/tramp/}. This release includes the full
+@uref{ftp://ftp.gnu.org/gnu/tramp/}. This release includes the full
documentation and code for @value{tramp}, suitable for installation.
But GNU Emacs (22 or later) includes @value{tramp} already, and there
is a @value{tramp} package for XEmacs, as well. So maybe it is easier
@cindex configuration
@cindex default configuration
-@value{tramp} is (normally) fully functional when it is initially installed.
-It is initially configured to use the @command{ssh} program to connect
-to the remote host and to use base64 or uu encoding to transfer the
-files through that shell connection. So in the easiest case, you just
-type @kbd{C-x C-f} and then enter the filename
+@value{tramp} is (normally) fully functional when it is initially
+installed. It is initially configured to use the @command{scp}
+program to connect to the remote host. So in the easiest case, you
+just type @kbd{C-x C-f} and then enter the filename
@file{@value{prefix}@var{user}@@@var{machine}@value{postfix}@var{/path/to.file}}.
On some hosts, there are problems with opening a connection. These are
@item @option{sshx}
@cindex method sshx
@cindex sshx method
-@cindex Cygwin (with sshx method)
As you would expect, this is similar to @option{ssh}, only a little
different. Whereas @option{ssh} opens a normal interactive shell on
This is also useful for Windows users where @command{ssh}, when
invoked from an @value{emacsname} buffer, tells them that it is not
allocating a pseudo tty. When this happens, the login shell is wont
-to not print any shell prompt, which confuses @value{tramp} mightily. For
-reasons unknown, some Windows ports for @command{ssh} (maybe the
-Cygwin one) require the doubled @samp{-t} option.
+to not print any shell prompt, which confuses @value{tramp} mightily.
+For reasons unknown, some Windows ports for @command{ssh} require the
+doubled @samp{-t} option.
This supports the @samp{-p} kludge.
Additionally, the method @option{plink1} is provided, which calls
@samp{plink -1 -ssh} in order to use SSH protocol version 1
-explicitely.
+explicitly.
CCC: Do we have to connect to the remote host once from the command
line to accept the SSH key? Maybe this can be made automatic?
@cindex scpx method
@cindex scp (with scpx method)
@cindex ssh (with scpx method)
-@cindex Cygwin (with scpx method)
As you would expect, this is similar to @option{scp}, only a little
different. Whereas @option{scp} opens a normal interactive shell on
invoked from an @value{emacsname} buffer, tells them that it is not
allocating a pseudo tty. When this happens, the login shell is wont
to not print any shell prompt, which confuses @value{tramp} mightily.
-Maybe this applies to the Cygwin port of SSH.
+
+This method supports the @samp{-p} hack.
+
+
+@item @option{scpc} --- @command{ssh} and @command{scp}
+@cindex method scpx
+@cindex scpx method
+@cindex scp (with scpx method)
+@cindex ssh (with scpx method)
+
+Newer versions of @option{ssh} (for example OpenSSH 4) offer an option
+@option{ControlMaster}. This allows @option{scp} to reuse an existing
+@option{ssh} channel, which increases performance.
+
+Before you use this method, you shall check whether your @option{ssh}
+implementation does support this option. Try from the command line
+
+@example
+ssh localhost -o ControlMaster=yes
+@end example
This method supports the @samp{-p} hack.
'("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n"))
@end lisp
-Now you can use an @code{sshf} hop which connects to port 4400 instead of
+Now you can use an @option{sshf} hop which connects to port 4400 instead of
the standard port.
is not specified in the @value{tramp} file name. For example:
@lisp
-(setq tramp-default-method "scp")
+(setq tramp-default-method "ssh")
@end lisp
@vindex tramp-default-method-alist
environment you will use them in and, especially when used over the
Internet, the security implications of your preferred method.
-The @command{rsh} and @command{telnet} methods send your password as
-plain text as you log in to the remote machine, as well as transferring
-the files in such a way that the content can easily be read from other
-machines.
+The @option{rsh} and @option{telnet} methods send your password as
+plain text as you log in to the remote machine, as well as
+transferring the files in such a way that the content can easily be
+read from other machines.
If you need to connect to remote systems that are accessible from the
-Internet, you should give serious thought to using @command{ssh} based
+Internet, you should give serious thought to using @option{ssh} based
methods to connect. These provide a much higher level of security,
-making it a non-trivial exercise for someone to obtain your password or
-read the content of the files you are editing.
+making it a non-trivial exercise for someone to obtain your password
+or read the content of the files you are editing.
@subsection Which method is the right one for me?
to edit mostly small files.
I guess that these days, most people can access a remote machine by
-using @code{ssh}. So I suggest that you use the @code{ssh} method.
-So, type @kbd{C-x C-f
+using @command{ssh}. So I suggest that you use the @option{ssh}
+method. So, type @kbd{C-x C-f
@value{prefix}ssh@value{postfixsinglehop}root@@otherhost@value{postfix}/etc/motd
@key{RET}} to edit the @file{/etc/motd} file on the other host.
-If you can't use @code{ssh} to log in to the remote host, then select a
-method that uses a program that works. For instance, Windows users
-might like the @code{plink} method which uses the PuTTY implementation
-of @code{ssh}. Or you use Kerberos and thus like @code{krlogin}.
+If you can't use @option{ssh} to log in to the remote host, then
+select a method that uses a program that works. For instance, Windows
+users might like the @option{plink} method which uses the PuTTY
+implementation of @command{ssh}. Or you use Kerberos and thus like
+@option{krlogin}.
For the special case of editing files on the local host as another
-user, see the @code{su} or @code{sudo} method. It offers shortened
-syntax for the @samp{root} account, like
+user, see the @option{su} or @option{sudo} methods. They offer
+shortened syntax for the @samp{root} account, like
@file{@value{prefix}su@value{postfixsinglehop}@value{postfix}/etc/motd}.
-People who edit large files may want to consider @code{scp} instead of
-@code{ssh}, or @code{pscp} instead of @code{plink}. These out-of-band
-methods are faster than inline methods for large files. Note, however,
-that out-of-band methods suffer from some limitations. Please try
-first whether you really get a noticeable speed advantage from using an
-out-of-band method! Maybe even for large files, inline methods are
-fast enough.
+People who edit large files may want to consider @option{scp} instead
+of @option{ssh}, or @option{pscp} instead of @option{plink}. These
+out-of-band methods are faster than inline methods for large files.
+Note, however, that out-of-band methods suffer from some limitations.
+Please try first whether you really get a noticeable speed advantage
+from using an out-of-band method! Maybe even for large files, inline
+methods are fast enough.
@node Customizing Methods
Sometimes it is necessary to connect to the same remote host several
times. Reentering passwords again and again would be annoying, when
-the choosen method does not support access without password prompt
-throught own configuration.
+the chosen method does not support access without password prompt
+through own configuration.
By default, @value{tramp} caches the passwords entered by you. They will
be reused next time if a connection needs them for the same user name
-and host name, independant of the connection method.
+and host name, independently of the connection method.
@vindex password-cache-expiry
Passwords are not saved permanently, that means the password caching
be inconvenient because you have to invest a lot of effort into shell
setup before you can begin to use @value{tramp}.
-The package, therefore, pursues a combined approach. It tries to figure
-out some of the more common setups, and only requires you to avoid
-really exotic stuff. For example, it looks through a list of
+The package, therefore, pursues a combined approach. It tries to
+figure out some of the more common setups, and only requires you to
+avoid really exotic stuff. For example, it looks through a list of
directories to find some programs on the remote host. And also, it
knows that it is not obvious how to check whether a file exists, and
-therefore it tries different possibilities. (On some hosts and shells,
-the command @code{test -e} does the trick, on some hosts the shell
-builtin doesn't work but the program @code{/usr/bin/test -e} or
-@code{/bin/test -e} works. And on still other hosts, @code{ls -d} is
-the right way to do this.)
+therefore it tries different possibilities. (On some hosts and
+shells, the command @command{test -e} does the trick, on some hosts
+the shell builtin doesn't work but the program @command{/usr/bin/test
+-e} or @command{/bin/test -e} works. And on still other hosts,
+@command{ls -d} is the right way to do this.)
Below you find a discussion of a few things that @value{tramp} does not deal
with, and that you therefore have to set up correctly.
@code{shell-prompt-pattern}, which is reported to work well in many
circumstances.
-@item @code{tset} and other questions
+@item @command{tset} and other questions
@cindex Unix command tset
@cindex tset Unix command
-Some people invoke the @code{tset} program from their shell startup
+Some people invoke the @command{tset} program from their shell startup
scripts which asks the user about the terminal type of the shell.
Maybe some shells ask other questions when they are started. @value{tramp}
does not know how to answer these questions. There are two approaches
@item Non-Bourne commands in @file{.profile}
After logging in to the remote host, @value{tramp} issues the command
-@code{exec /bin/sh}. (Actually, the command is slightly different.)
-When @code{/bin/sh} is executed, it reads some init files, such as
-@file{~/.shrc} or @file{~/.profile}.
+@command{exec /bin/sh}. (Actually, the command is slightly
+different.) When @command{/bin/sh} is executed, it reads some init
+files, such as @file{~/.shrc} or @file{~/.profile}.
Now, some people have a login shell which is not @code{/bin/sh} but a
Bourne-ish shell such as bash or ksh. Some of these people might put
-their shell setup into the files @code{~/.shrc} or @code{~/.profile}.
+their shell setup into the files @file{~/.shrc} or @file{~/.profile}.
This way, it is possible for non-Bourne constructs to end up in those
-files. Then, @code{exec /bin/sh} might cause the Bourne shell to barf
-on those constructs.
+files. Then, @command{exec /bin/sh} might cause the Bourne shell to
+barf on those constructs.
-As an example, imagine somebody putting @code{export FOO=bar} into the
-file @file{~/.profile}. The standard Bourne shell does not understand
-this syntax and will emit a syntax error when it reaches this line.
+As an example, imagine somebody putting @command{export FOO=bar} into
+the file @file{~/.profile}. The standard Bourne shell does not
+understand this syntax and will emit a syntax error when it reaches
+this line.
Another example is the tilde (@code{~}) character, say when adding
@file{~/bin} to @code{$PATH}. Many Bourne shells will not expand this
Well, one possibility is to make sure that everything in @file{~/.shrc}
and @file{~/.profile} on all remote hosts is Bourne-compatible. In the
-above example, instead of @code{export FOO=bar}, you might use
-@code{FOO=bar; export FOO} instead.
+above example, instead of @command{export FOO=bar}, you might use
+@command{FOO=bar; export FOO} instead.
The other possibility is to put your non-Bourne shell setup into some
other files. For example, bash reads the file @file{~/.bash_profile}
aficionados just rename their @file{~/.profile} to
@file{~/.bash_profile} on all remote hosts, and Bob's your uncle.
-The @value{tramp} developers would like to circumvent this problem, so if you
-have an idea about it, please tell us. However, we are afraid it is not
-that simple: before saying @code{exec /bin/sh}, @value{tramp} does not know
-which kind of shell it might be talking to. It could be a Bourne-ish
-shell like ksh or bash, or it could be a csh derivative like tcsh, or
-it could be zsh, or even rc. If the shell is Bourne-ish already, then
-it might be prudent to omit the @code{exec /bin/sh} step. But how to
-find out if the shell is Bourne-ish?
+The @value{tramp} developers would like to circumvent this problem, so
+if you have an idea about it, please tell us. However, we are afraid
+it is not that simple: before saying @command{exec /bin/sh},
+@value{tramp} does not know which kind of shell it might be talking
+to. It could be a Bourne-ish shell like ksh or bash, or it could be a
+csh derivative like tcsh, or it could be zsh, or even rc. If the
+shell is Bourne-ish already, then it might be prudent to omit the
+@command{exec /bin/sh} step. But how to find out if the shell is
+Bourne-ish?
@end table
@end ifset
is @code{nil} (the default), such problems do not occur.
-Therefore, it is usefull to set special values for @value{tramp}
+Therefore, it is useful to set special values for @value{tramp}
files. For example, the following statement effectively `turns off'
the effect of
@ifset emacs
@cindex method sshx with Cygwin
@cindex sshx method with Cygwin
-If you use the Cygwin installation of ssh (you have to explicitly select
-it in the installer), then it should work out of the box to just select
-@code{sshx} as the connection method. You can find information about
-setting up Cygwin in their FAQ at @uref{http://cygwin.com/faq/}.
+The recent Cygwin installation of @command{ssh} works only with a
+Cygwinized @value{emacsname}. You can check it by typing @kbd{M-x
+eshell}, and starting @kbd{ssh test.machine}. The problem is evident
+if you see a message like this:
+
+@example
+Pseudo-terminal will not be allocated because stdin is not a terminal.
+@end example
+
+Older @command{ssh} versions of Cygwin are told to cooperate with
+@value{tramp} selecting @option{sshx} as the connection method. You
+can find information about setting up Cygwin in their FAQ at
+@uref{http://cygwin.com/faq/}.
@cindex method scpx with Cygwin
@cindex scpx method with Cygwin
-If you wish to use the @code{scpx} connection method, then you might
-have the problem that @value{emacsname} calls @code{scp} with a
+If you wish to use the @option{scpx} connection method, then you might
+have the problem that @value{emacsname} calls @command{scp} with a
Windows filename such as @code{c:/foo}. The Cygwin version of
-@code{scp} does not know about Windows filenames and interprets this
+@command{scp} does not know about Windows filenames and interprets this
as a remote filename on the host @code{c}.
-One possible workaround is to write a wrapper script for @code{scp}
+One possible workaround is to write a wrapper script for @option{scp}
which converts the Windows filename to a Cygwinized filename.
-I guess that another workaround is to run @value{emacsname} under
-Cygwin, or to run a Cygwinized @value{emacsname}.
-
@cindex Cygwin and ssh-agent
@cindex SSH_AUTH_SOCK and @value{emacsname} on Windows
-If you want to use either @code{ssh} based method on Windows, then you
-might encounter problems with @code{ssh-agent}. Using this program,
-you can avoid typing the pass-phrase every time you log in. However,
-if you start @value{emacsname} from a desktop shortcut, then the
-environment variable @code{SSH_AUTH_SOCK} is not set and so
-@value{emacsname} and thus @value{tramp} and thus @code{ssh} and
-@code{scp} started from @value{tramp} cannot communicate with
-@code{ssh-agent}. It works better to start @value{emacsname} from
+If you want to use either @option{ssh} based method on Windows, then
+you might encounter problems with @command{ssh-agent}. Using this
+program, you can avoid typing the pass-phrase every time you log in.
+However, if you start @value{emacsname} from a desktop shortcut, then
+the environment variable @code{SSH_AUTH_SOCK} is not set and so
+@value{emacsname} and thus @value{tramp} and thus @command{ssh} and
+@command{scp} started from @value{tramp} cannot communicate with
+@command{ssh-agent}. It works better to start @value{emacsname} from
the shell.
-If anyone knows how to start @code{ssh-agent} under Windows in such a
+If anyone knows how to start @command{ssh-agent} under Windows in such a
way that desktop shortcuts can profit, please holler. I don't really
know anything at all about Windows@dots{}
@section Filename completion
@cindex filename completion
-Filename completion works with @value{tramp} for both completing methods,
-user names and machine names (except multi hop methods) as well as for
-files on remote machines.
+Filename completion works with @value{tramp} for completion of method
+names, of user names and of machine names (except multi-hop methods)
+as well as for completion of file names on remote machines.
+@ifset emacs
+In order to enable this, Partial Completion mode must be set on.
+@ifinfo
+@xref{Completion Options, , , @value{emacsdir}}.
+@end ifinfo
+@end ifset
If you, for example, type @kbd{C-x C-f @value{prefix}t
@key{TAB}}, @value{tramp} might give you as result the choice for
@chapter Reporting Bugs and Problems
@cindex bug reports
-Bugs and problems with @value{tramp} are actively worked on by the development
-team. Feature requests and suggestions are also more than welcome.
+Bugs and problems with @value{tramp} are actively worked on by the
+development team. Feature requests and suggestions are also more than
+welcome.
-The @value{tramp} mailing list is a great place to get information on working
-with @value{tramp}, solving problems and general discussion and advice on topics
-relating to the package.
+The @value{tramp} mailing list is a great place to get information on
+working with @value{tramp}, solving problems and general discussion
+and advice on topics relating to the package. It is moderated so
+non-subscribers can post but messages will be delayed, possibly up to
+48 hours (or longer in case of holidays), until the moderator approves
+your message.
The mailing list is at @email{tramp-devel@@gnu.org}. Messages sent to
this address go to all the subscribers. This is @emph{not} the address
When submitting a bug report, please try to describe in excruciating
detail the steps required to reproduce the problem, the setup of the
-remote machine and any special conditions that exist.
+remote machine and any special conditions that exist. You should also
+check that your problem is not described already in @xref{Frequently
+Asked Questions}.
If you can identify a minimal test case that reproduces the problem,
include that with your bug report. This will make it much easier for the
@value{tramp} is available under the URL below.
@noindent
-@uref{http://ftp.gnu.org/gnu/tramp/}
+@uref{ftp://ftp.gnu.org/gnu/tramp/}
@noindent
There is also a Savannah project page.
@noindent
@uref{http://savannah.gnu.org/projects/tramp/}
+
@item
Which systems does it work on?
@uref{http://www4.ncsu.edu/~tlroche/plinkTramp.html}
@end ignore
-??? Is the XEmacs info correct?
-??? Can somebody provide some information for getting it to work on NT
-Emacs? I think there was some issue with @command{ssh}?
+@item
+@value{tramp} does not connect to the remote host
+
+When @value{tramp} does not connect to the remote host, there are two
+reasons heading the bug mailing list:
+@itemize @minus
@item
-I can't stop @value{ftppackagename} starting with @value{emacsname}
+Unknown characters in the prompt
-@ifset emacs
-@value{ftppackagename} is loaded from @value{tramp} automatically if you
-require a file by the ftp method. Unfortunately, there are some Lisp
-packages which make @value{ftppackagename} file name handlers active.
-You can see it applying @kbd{C-h v file-name-handler-alist}:
+@value{tramp} needs to recognize the prompt on the remote machine
+after execution any command. This is not possible, when the prompt
+contains unknown characters like escape sequences for coloring. This
+should be avoided on the remote side. @xref{Remote shell setup}. for
+setting the regular expression detecting the prompt.
+
+A special problem is the zsh, which uses left-hand side and right-hand
+side prompts in parallel. Therefore, it is necessary to disable the
+zsh line editor on the remote host. You shall add to @file{~/.zshrc}
+the following command:
@example
-file-name-handler-alist's value is
-(("^/[^/:]*\\'" . ange-ftp-completion-hook-function)
- ("^/[^/:]*[^/:.]:" . ange-ftp-hook-function)
- ("^/[^/]*$" . tramp-completion-file-name-handler)
- ("\\`/[^/:]+:" . tramp-file-name-handler)
- ("\\`/:" . file-name-non-special))
+[ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
@end example
-Please try to find out which package is responsible for loading
-@value{ftppackagename}, and raise a bug report.
-
-A workaround is to require @value{ftppackagename} before @value{tramp} in
-your @file{~/.emacs}, because @value{tramp} cleans up the entries in
-@code{file-name-handler-alist}:
-
-@lisp
-;; @value{ftppackagename} temporarily required
-(require 'ange-ftp)
-;; @value{tramp} cleans up @code{file-name-handler-alist}
-(require 'tramp)
-@end lisp
-@end ifset
+@item
+@value{tramp} doesn't transfer strings with more than 500 characters
+correctly
-@ifset xemacs
-Not all the older versions of @value{tramp} supported @value{emacsname}
-correctly. The first thing to do is to make sure that you have the
-latest version of @value{tramp} installed.
-
-If you do, please try and find out exactly the conditions required for
-the @value{ftppackagename} handlers to fire. If you can, putting a
-breakpoint on @code{efs-ftp-path} and sending in the stack trace along
-with your bug report would make it easier for the developers to work out
-what is going wrong.
-@end ifset
+On some few systems, the implementation of @code{process-send-string}
+seems to be broken for longer strings. This case, you should
+customize the variable @code{tramp-chunksize} to 500. For a
+description how to determine whether this is necessary see the
+documentation of @code{tramp-chunksize}.
+@end itemize
@item
There's this @file{~/.sh_history} file on the remote host which keeps
growing and growing. What's that?
-Sometimes, @value{tramp} starts @code{ksh} on the remote host for tilde
-expansion. Maybe @code{ksh} saves the history by default. @value{tramp}
-tries to turn off saving the history, but maybe you have to help. For
-example, you could put this in your @file{.kshrc}:
+Sometimes, @value{tramp} starts @command{ksh} on the remote host for
+tilde expansion. Maybe @command{ksh} saves the history by default.
+@value{tramp} tries to turn off saving the history, but maybe you have
+to help. For example, you could put this in your @file{.kshrc}:
@example
if [ -f $HOME/.sh_history ] ; then
@item
-@value{tramp} doesn't transfer strings with more than 500 characters
-correctly
+How can I disable @value{tramp}?
-On some few systems, the implementation of @code{process-send-string}
-seems to be broken for longer strings. This case, you should
-customize the variable @code{tramp-chunksize} to 500. For a
-description how to determine whether this is necessary see the
-documentation of @code{tramp-chunksize}.
+Shame on you, why did you read until now?
+
+@ifset emacs
+If you just want to have @value{ftppackagename} as default remote
+files access package, you should apply the following code:
+
+@lisp
+(setq tramp-default-method "ftp")
+@end lisp
+@end ifset
+
+Unloading @value{tramp} can be achieved by applying @kbd{M-x
+tramp-unload-tramp}.
+@ifset emacs
+This resets also the @value{ftppackagename} plugins.
+@end ifset
@end itemize
@itemize @bullet
@item The uuencode method does not always work.
-Due to the design of @value{tramp}, the encoding and decoding programs need to
-read from stdin and write to stdout. On some systems, @code{uudecode -o
--} will read stdin and write the decoded file to stdout, on other
-systems @code{uudecode -p} does the same thing. But some systems have
-uudecode implementations which cannot do this at all---it is not
-possible to call these uudecode implementations with suitable parameters
-so that they write to stdout.
+Due to the design of @value{tramp}, the encoding and decoding programs
+need to read from stdin and write to stdout. On some systems,
+@command{uudecode -o -} will read stdin and write the decoded file to
+stdout, on other systems @command{uudecode -p} does the same thing.
+But some systems have uudecode implementations which cannot do this at
+all---it is not possible to call these uudecode implementations with
+suitable parameters so that they write to stdout.
Of course, this could be circumvented: the @code{begin foo 644} line
could be rewritten to put in some temporary file name, then
-@code{uudecode} could be called, then the temp file could be printed and
-deleted.
+@command{uudecode} could be called, then the temp file could be
+printed and deleted.
But I have decided that this is too fragile to reliably work, so on some
systems you'll have to do without the uuencode methods.
would have to be installed from the start, too.
@ifset xemacs
-@strong{Note:} If you'ld like to use a similar syntax like
+@strong{Note:} If you'd like to use a similar syntax like
@value{ftppackagename}, you need the following settings in your init
file:
In case of unified filenames, all @value{emacsname} download sites
are added to @code{tramp-default-method-alist} with default method
-@code{ftp} @xref{Default Method}. These settings shouldn't be touched
+@option{ftp} @xref{Default Method}. These settings shouldn't be touched
for proper working of the @value{emacsname} package system.
The syntax for unified filenames is described in the @value{tramp} manual
for @value{emacsothername}.
@end ifset
-
@end itemize
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+@include doclicense.texi
+
@node Concept Index
@comment node-name, next, previous, up
@unnumbered Concept Index