Bump version to 2.0.2.
[emacs.git] / man / tramp.texi
blob5b764386eab4bb63ec06b3fb4496396496708a07
1 \input texinfo   @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename ../info/tramp
4 @settitle TRAMP User Manual
5 @setchapternewpage odd
6 @c %**end of header
8 @c This is *so* much nicer :)
9 @footnotestyle end
12 @c Entries for @command{install-info} to use
13 @dircategory Emacs
14 @direntry
15 * TRAMP: (tramp).                Transparent Remote Access, Multiple Protocol
16                                  Emacs remote file access via rsh and rcp.
17 @end direntry
19 @c Macro to make formatting of the tramp program name consistent.
20 @macro tramp
21 @sc{tramp}
22 @end macro
24 @c Copying permissions, et al
25 @copying
26 This file documents @tramp{}, a remote file editing package for Emacs and
27 XEmacs.
28      
29 Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software
30 Foundation, Inc.
32 @quotation     
33 Permission is granted to copy, distribute and/or modify this document
34 under the terms of the GNU Free Documentation License, Version 1.1 or
35 any later version published by the Free Software Foundation; with no
36 Invariant Sections, with the Front-Cover texts being ``A GNU
37 Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
38 license is included in the section entitled ``GNU Free Documentation
39 License'' in the Emacs manual.
41 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
42 this GNU Manual, like GNU software.  Copies published by the Free
43 Software Foundation raise funds for GNU development.''
45 This document is part of a collection distributed under the GNU Free
46 Documentation License.  If you want to distribute this document
47 separately from the collection, you can do so by adding a copy of the
48 license to the document, as described in section 6 of the license.
49 @end quotation
50 @end copying
53 @tex
55 @titlepage
56 @title @tramp{} User Manual
58 @author by Daniel Pittman
59 @author based on documentation by Kai Gro@ss{}johann
60 @page
62 @end titlepage
63 @page
65 @end tex
67 @ifnottex
68 @node Top, Overview, (dir), (dir)
69 @top @tramp{} User Manual
71 @tramp{} stands for `Transparent Remote (file) Access, Multiple
72 Protocol'.  This package provides remote file editing, similar to
73 @cite{Ange-FTP} and @cite{EFS}.
75 The difference is that Ange-FTP uses FTP to transfer files between the
76 local and the remote host, whereas @tramp{} uses a combination of
77 @command{rsh} and @command{rcp} or other work-alike programs, such as
78 @command{ssh}/@command{scp}.
80 You can find the latest version of this document on the web at
81 @uref{http://www.freesoftware.fsf.org/tramp/}.
83 @ifhtml
84 This manual is also available as a @uref{tramp_ja.html, Japanese
85 translation}.
87 The latest release of @tramp{} is available for
88 @uref{http://savannah.gnu.org/download/tramp/,
89 download}, or you may see @ref{Obtaining @tramp{}} for more details,
90 including the CVS server details.
92 @tramp{} also has a @uref{https://savannah.gnu.org/projects/tramp/,
93 Savannah Project Page}.
94 @end ifhtml
96 There is a mailing list for @tramp{}, available at
97 @email{tramp-devel@@mail.freesoftware.fsf.org}, and archived at
98 @uref{http://www.mail-archive.com/emacs-rcp@@ls6.cs.uni-dortmund.de/} as
99 well as the usual Savannah archives.
101 @end ifnottex
103 @menu
104 * Overview::                    What @tramp{} can and cannot do.
106 For the end user:
107 * Obtaining @tramp{}::          How to obtain @tramp{}.
108 * History::                     History of @tramp{}
109 * Installation::                Installing @tramp{} with your (X)Emacs.
110 * Configuration::               Configuring @tramp{} for use.
111 * Usage::                       An overview of the operation of @tramp{}.
112 * Bug Reports::                 Reporting Bugs and Problems
113 * Frequently Asked Questions::  Questions and answers from the mailing list.
115 For the developer:
116 * Version Control::             The inner workings of remote version control.
117 * Files directories and paths::  How file names, directories and paths are mangled and managed.
118 * Issues::                      
120 @detailmenu
121  --- The Detailed Node Listing ---
123 Configuring @tramp{} for use
125 * Connection types::            Types of connections made to remote machines.
126 * Inline methods::              Inline methods.
127 * External transfer methods::   External transfer methods.
128 * Multi-hop Methods::           Connecting to a remote host using multiple hops.
129 * Default Method::              Selecting a default method.
130 * Customizing Methods::         Using Non-Standard Methods.
131 * Remote Programs::             How @tramp{} finds and uses programs on the remote machine.
132 * Remote shell setup::          
134 Using @tramp
136 * Filename Syntax::             @tramp{} filename conventions.
137 * Multi-hop filename syntax::   Multi-hop filename conventions
138 * Dired::                       Dired and filename completion.
140 The inner workings of remote version control
142 * Version Controlled Files::    Determining if a file is under version control.
143 * Remote Commands::             Executing the version control commands on the remote machine.
144 * Changed workfiles::           Detecting if the working file has changed.
145 * Checking out files::          Bringing the workfile out of the repository.
146 * Miscellaneous Version Control::  Things related to Version Control that don't fit elsewhere
148 Things related to Version Control that don't fit elsewhere
150 * Remote File Ownership::       How VC determines who owns a workfile.
151 * Back-end Versions::           How VC determines what release your RCS is.
153 How file names, directories and paths are mangled and managed.
155 * Path deconstruction::         Breaking a path into its components.
157 @end detailmenu
158 @end menu
161 @node Overview
162 @chapter An overview of @tramp
163 @cindex overview
165 After the installation of @tramp{} into your Emacs, you will be able
166 to access files on remote machines as though they were local.  Access
167 to the remote file system for editing files, version control, and
168 @command{dired} are transparently enabled.
170 Your access to the remote machine can be with the @command{rsh},
171 @command{rlogin}, @command{telnet} programs or with any similar
172 connection method.  This connection must pass ASCII successfully to be
173 usable but need not be 8-bit clean.
175 The package provides support for @command{ssh} connections out of the
176 box, one of the more common uses of the package.  This allows
177 relatively secure access to machines, especially if @command{ftp}
178 access is disabled.
180 The majority of activity carried out by @tramp{} requires only that
181 the remote login is possible and is carried out at the terminal.  In
182 order to access remote files @tramp{} needs to transfer their content
183 to the local machine temporarily.
185 @tramp{} can transfer files between the machines in a variety of ways.
186 The details are easy to select, depending on your needs and the
187 machines in question.
189 The fastest transfer methods (for large files) rely on a remote file
190 transfer package such as @command{rcp}, @command{scp} or
191 @command{rsync}.  The use of these methods is only possible if the
192 file copy command does not ask for a password for the remote machine.
194 If the remote copy methods are not suitable for you, @tramp{} also
195 supports the use of encoded transfers directly through the shell.
196 This requires that the @command{mimencode} or @command{uuencode} tools
197 are available on the remote machine.  These methods are generally
198 faster for small files.
200 Within these limitations, @tramp{} is quite powerful.  It is worth
201 noting that, as of the time of writing, it is far from a polished
202 end-user product.  For a while yet you should expect to run into rough
203 edges and problems with the code now and then.
205 It is finished enough that the developers use it for day to day work but
206 the installation and setup can be a little difficult to master, as can
207 the terminology.
209 @tramp{} is still under active development and any problems you encounter,
210 trivial or major, should be reported to the @tramp{} developers.
211 @xref{Bug Reports}.
214 @subsubheading Behind the scenes
215 @cindex behind the scenes
216 @cindex details of operation
217 @cindex how it works
219 This section tries to explain what goes on behind the scenes when you
220 access a remote file through @tramp{}.
222 Suppose you type @kbd{C-x C-f} and enter part of an @tramp{} file name,
223 then hit @kbd{@key{TAB}} for completion.  Suppose further that this is
224 the first time that @tramp{} is invoked for the host in question.  Here's
225 what happens:
227 @itemize
228 @item
229 @tramp{} discovers that it needs a connection to the host.  So it
230 invokes @samp{telnet @var{host}} or @samp{rsh @var{host} -l
231 @var{user}} or a similar tool to connect to the remote host.
232 Communication with this process happens through an Emacs buffer, that
233 is, the output from the remote end goes into a buffer.
235 @item
236 The remote host may prompt for a login name (for @command{telnet}).  The
237 login name is given in the file name, so @tramp{} sends the login name and
238 a newline.
240 @item
241 The remote host may prompt for a password or pass phrase (for
242 @command{rsh} or for @command{telnet} after sending the login name).
243 @tramp{} displays the prompt in the minibuffer, asking you for the
244 password or pass phrase.
246 You enter the password or pass phrase.  @tramp{} sends it to the remote
247 host, followed by a newline.
249 @item
250 @tramp{} now waits for the shell prompt or for a message that the login
251 failed.
253 If @tramp{} sees neither of them after a certain period of time (a minute,
254 say), then it issues an error message saying that it couldn't find the
255 remote shell prompt and shows you what the remote host has sent.
257 If @tramp{} sees a `login failed' message, it tells you so, aborts the
258 login attempt and allows you to try again.
260 @item
261 Suppose that the login was successful and @tramp{} sees the shell prompt
262 from the remote host.  Now @tramp{} invokes @command{/bin/sh} because
263 Bourne shells and C shells have different command
264 syntaxes.@footnote{Invoking @command{/bin/sh} will fail if your login
265 shell doesn't recognize @samp{exec /bin/sh} as a valid command.
266 Maybe you use the Scheme shell @command{scsh}@dots{}}
268 After the Bourne shell has come up, @tramp{} sends a few commands to
269 ensure a good working environment.  It turns off echoing, it sets the
270 shell prompt, and a few other things.
272 @item
273 Now the remote shell is up and it good working order.  Remember, what
274 was supposed to happen is that @tramp{} tries to find out what files exist
275 on the remote host so that it can do filename completion.
277 So, @tramp{} basically issues @command{cd} and @command{ls} commands and
278 also sometimes @command{echo} with globbing.  Another command that is
279 often used is @command{test} to find out whether a file is writable or a
280 directory or the like.  The output of each command is parsed for the
281 necessary operation.
283 @item
284 Suppose you are finished with filename completion, have entered @kbd{C-x
285 C-f}, a full file name and hit @kbd{@key{RET}}.  Now comes the time to
286 transfer the file contents from the remote host to the local host so
287 that you can edit them.
289 See above for an explanation of how @tramp{} transfers the file contents.
291 For inline transfers, @tramp{} issues a command like @samp{mimencode -b
292 /path/to/remote/file}, waits until the output has accumulated in the
293 buffer that's used for communication, then decodes that output to
294 produce the file contents.
296 For out-of-band transfers, @tramp{} issues a command like @samp{rcp
297 user@@host:/path/to/remote/file /tmp/tramp.4711} and then reads the local
298 temporary file @file{/tmp/tramp.4711} into a buffer and deletes the
299 temporary file.
301 @item
302 You now edit the buffer contents, blithely unaware of what has happened
303 behind the scenes.  (Unless you have read this section, that is.)  When
304 you are finished, you type @kbd{C-x C-s} to save the buffer.
306 @item
307 Again, @tramp{} transfers the file contents to the remote host either
308 inline or out-of-band.  This is the reverse of what happens when reading
309 the file.
311 @end itemize
313 I hope this has provided you with a basic overview of what happens
314 behind the scenes when you open a file with @tramp{}.
317 @c For the end user
318 @node Obtaining @tramp{}
319 @chapter Obtaining @tramp{}.
320 @cindex obtaining Tramp
322 @tramp{} is freely available on the Internet and the latest release may be
323 downloaded from
324 @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/tramp.tar.gz}. This
325 release includes the full documentation and code for @tramp{}, suitable
326 for installation.  But Emacs (21.4 or later) includes @tramp{}
327 already, and there is a @tramp{} package for XEmacs, as well.  So
328 maybe it is easier to just use those.  But if you want the bleeding
329 edge, read on@dots{...}
331 For the especially brave, @tramp{} is available from CVS.  The CVS version
332 is the latest version of the code and may contain incomplete features or
333 new issues. Use these versions at your own risk.
335 Instructions for obtaining the latest development version of @tramp{}
336 from CVS can be found by going to the Savannah project page at
337 @uref{http://savannah.gnu.org/projects/tramp/} and then clicking on the
338 CVS link in the navigation bar at the top.  Or follow the example
339 session below:
341 @example
342 ] @strong{cd ~/lisp}
343 ] @strong{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/tramp login}
345 (Logging in to anoncvs@@subversions.gnu.org)
346 CVS password: @strong{(just hit RET here)}
347 @dots{}
349 ] @strong{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/tramp co tramp}
350 @end example
352 You should now have a directory @file{~/lisp/tramp} containing the latest
353 version of @tramp{}. You can fetch the latest updates from the repository
354 by issuing the command:
356 @example
357 ] @strong{cd ~/lisp/tramp}
358 ] @strong{cvs update -d}
359 @end example
362 @node History
363 @chapter History of @tramp{}
364 @cindex history
365 @cindex development history
367 Development was started end of November 1998.  The package was called
368 @file{rssh.el}, back then.  It only provided one method to access a
369 file, using @command{ssh} to log in to a remote host and using
370 @command{scp} to transfer the file contents.  After a while, the name
371 was changed to @file{rcp.el}, and now it's @tramp{}.  Along the way,
372 many more methods for getting a remote shell and for transferring the
373 file contents were added.  Support for VC was added.
375 The most recent addition of major features were the multi-hop methods
376 added in April 2000 and the unification of @tramp{} and Ange-FTP
377 filenames in July 2002.
380 @node Installation
381 @chapter Installing @tramp{} into Emacs or XEmacs
382 @cindex installation
384 If you use the version that comes with your Emacs or the XEmacs
385 package, the following information is not necessary.  Installing
386 @tramp{} into your Emacs or XEmacs is a relatively easy process, at
387 least compared to rebuilding your machine from scratch. ;)
389 Seriously though, the installation should be a fairly simple matter.
391 The easiest way to proceed is as follows:
393 @itemize
394 @item
395 Choose a directory, say @file{~/emacs/}.  Change into that directory and
396 unpack the tarball.  This will give you a directory
397 @file{~/emacs/tramp/} which contains subdirectories @file{lisp} for the
398 Lisp code and @file{texi} for the documentation.
400 @item
401 Optionally byte-compile all files in the Lisp directory,
402 @file{~/emacs/tramp/lisp/}, by issuing a command like the following from
403 the top level directory @file{~/emacs/tramp/}:
404 @example
405 make EMACS=emacs all            # for Emacs users
406 make EMACS=xemacs all           # for XEmacs users
407 @end example
409 @item
410 NOTE:
411 @example
412 If you run into problems running the example @command{make}
413 commands, don't dispare.  You can still byte compile the
414 @file{*.el} files by opening emacs in @command{dired}
415 (@command{C-x d}) mode, at @file{~/tramp/lisp}.  Mark the lisp
416 files with @kbd{m}, then press @kbd{B} to byte compile
417 your selections.
419 Something similar can be done to create the info manual.  
420 Just cd to @file{~/emacs/tramp/texi} and load the @file{tramp.texi}
421 file in emacs.  Then press @kbd{M-x makeinfo-buffer <RET>}
422 to generate @file{tramp.info}.
423 @end example     
425 @item
426 Tell Emacs about the new Lisp directory and the @tramp{} package 
427 with the following lines in @file{~/.emacs}:
428 @lisp
429 (add-to-list 'load-path "~/emacs/tramp/lisp/")
430 (require 'tramp)
431 @end lisp
433 @item
434 To be able to read the Info documentation, create a file
435 @file{~/emacs/tramp/texi/dir} using for example the
436 @command{install-info} command, and add the directory to the search 
437 path for Info.
439 @item
440 NOTE:
441 @example
442 On systems using `gnu' @command{install-info}, the
443 @command{install-info} syntax is very direct and simple.  One can 
444 cd to @file{~/emacs/tramp/texi} and type:
445     @kbd{install-info tramp.info dir}
446 and a @file{dir} file will be created with the @tramp{}
447 entry.  The info reader will know how to interpret it, but must
448 be told where to find it (see below).  If you want anything fancier
449 you'll need to look through @kbd{man install-info}.
451 Debian gnu/linux doesn't default to `gnu' @command{install-info} and
452 uses its own version.  This version does not create a @file{dir} file
453 for you from scratch.  You must provide a skeleton dir file it
454 recognizes.  One can be found in a default install at
455 @file{/usr/info/dir}.  Copy the top of this file down to the first
456 occurrence of `* Menu' including that line plus one more blank line,
457 to your working directory @file{texi/dir}, or use the sample provided
458 in the @file{texi} directroy of this distribution.  See
459 @file{texi/dir_sample}
461 Once a @file{dir} file is in place, this command will make the entry.
462      install-info --infodir=. tramp.info
463 If you want it in a specific category
464    (see @kbd{man install-info} for further details)
465 @end example
467 If the environment variable @env{INFOPATH} is set, add the directory
468 @file{~/emacs/tramp/texi/} to it.  Else, add the directory to
469 @code{Info-default-directory-list}, as follows:
470 @lisp
471 (add-to-list 'Info-default-directory-list "~/emacs/tramp/texi/")
472 @end lisp
473 XEmacs 21 users should use @code{Info-directory-list} rather than
474 @code{Info-default-directory-list}.
476 @end itemize
479 For XEmacs users, the package @file{fsf-compat} must be installed.
480 For details on package installation, see @ref{Packages, , ,xemacs}.
481 @ifhtml
482 (If the previous link doesn't work, try the XEmacs documentation at
483 @uref{http://www.xemacs.org/Documentation/packageGuide.html,the XEmacs
484 site}.)
485 @end ifhtml
487 @node Configuration
488 @chapter Configuring @tramp{} for use
489 @cindex configuration
491 @cindex default configuration
492 @tramp{} is (normally) fully functional when it is initially
493 installed.  It is initially configured to use the @command{sh} program
494 to connect to the remote host and to use base-64 encoding (on the
495 remote host, via @command{mimencode}, and on the local host via the
496 built-in support for base-64 encoding in Emacs).
498 On some hosts, there are problems with opening a connection.  These are
499 related to the behavior of the remote shell.  See @xref{Remote shell
500 setup}, for details on this.
502 If you do not wish to use these commands to connect to the remote
503 host, you should change the default connection and transfer method
504 that @tramp uses.  There are several different methods that @tramp{}
505 can use to connect to remote machines and transfer files
506 (@pxref{Connection types}).
509 @menu
510 * Connection types::            Types of connections made to remote machines.
511 * Inline methods::              Inline methods.
512 * External transfer methods::   External transfer methods.
513 * Multi-hop Methods::           Connecting to a remote host using multiple hops.
514 * Default Method::              Selecting a default method.
515 * Customizing Methods::         Using Non-Standard Methods.
516 * Remote Programs::             How @tramp{} finds and uses programs on the remote machine.
517 * Remote shell setup::          Remote shell setup hints.
518 * Windows setup hints::         Issues with Cygwin ssh.
519 @end menu
522 @node Connection types
523 @section Types of connections made to remote machines.
524 @cindex connection types, overview
526 There are two basic types of transfer methods, each with its own
527 advantages and limitations.  Both types of connection make use of a
528 remote shell access program such as @command{rsh}, @command{ssh} or
529 @command{telnet} to connect to the remote machine.
531 This connection is used to perform many of the operations that @tramp
532 requires to make the remote file system transparently accessible from
533 the local machine. It is only when visiting files that the methods
534 differ.
536 @cindex inline methods
537 @cindex external transfer methods
538 @cindex external methods
539 @cindex out-of-band methods
540 @cindex methods, inline
541 @cindex methods, external transfer
542 @cindex methods, out-of-band
543 Loading or saving a remote file requires that the content of the file
544 be transfered between the two machines. The content of the file can be
545 transfered over the same connection used to log in to the remote
546 machine or the file can be transfered through another connection using
547 a remote copy program such as @command{rcp}, @command{scp} or
548 @command{rsync}.  The former are called @dfn{inline methods}, the
549 latter are called @dfn{out-of-band methods} or @dfn{external transfer
550 methods} (@dfn{external methods} for short).
552 The performance of the external transfer methods is generally better
553 than that of the inline methods, at least for large files.  This is
554 caused by the need to encode and decode the data when transferring
555 inline.
557 The one exception to this rule are the @command{scp} based transfer
558 methods.  While these methods do see better performance when actually
559 transferring files, the overhead of the cryptographic negotiation at
560 startup may drown out the improvement in file transfer times.
562 External transfer methods do require that the remote copy command is not
563 interactive --- that is, the command does not prompt you for a password.
564 If you cannot perform remote copies without a password, you will need to
565 use an inline transfer method to work with @tramp{}.
567 @cindex multi-hop methods
568 @cindex methods, multi-hop
569 A variant of the inline methods are the @dfn{multi-hop methods}.
570 These methods allow you to connect a remote host using a number `hops',
571 each of which connects to a different host.  This is useful if you are
572 in a secured network where you need to go through a bastion host to
573 connect to the outside world.
576 @node Inline methods
577 @section Inline methods
578 @cindex inline methods
579 @cindex methods, inline
581 The inline methods in @tramp{} are quite powerful and can work in
582 situations where you cannot use an external transfer program to connect.
583 Inline methods are the only methods that work when connecting to the
584 remote machine via telnet.  (There are also strange inline methods which
585 allow you to transfer files between @emph{user identities} rather than
586 hosts, see below.)
588 These methods depend on the existence of a suitable encoding and
589 decoding command on remote machine.  Locally, @tramp{} may be able to use
590 features of Emacs to decode and encode the files or it may require
591 access to external commands to perform that task.
593 @cindex uuencode
594 @tramp{} supports the use of @command{uuencode} to transfer files.
595 This is @emph{not} recommended.  The @command{uuencode} and
596 @command{uudecode} commands are not well standardized and may not
597 function correctly or at all on some machines, notably AIX and IRIX.
598 These systems do not work with @command{uuencode} at all.  (But do see
599 the note about AIX in the documentation for @var{tramp-methods}.)
601 @cindex mimencode
602 @cindex base-64 encoding
603 In summary, if possible use the @command{mimencode} methods to transfer
604 the data base64 encoded. This has the advantage of using a built-in
605 command in every modern Emacs, improving performance.
607 @table @asis
608 @item @option{rm}  ---  @command{rsh} with @command{mimencode}
609 @cindex method rm
610 @cindex rm method
611 @cindex method using rsh (rm)
613 Connect to the remote host with @command{rsh} and use base64 encoding to
614 transfer files between the machines.
616 This requires the @command{mimencode} command that is part of the
617 @command{metamail} packages. This may not be installed on all remote
618 machines.
621 @item @option{sm}  ---  @command{ssh} with @command{mimencode}
622 @cindex method sm
623 @cindex sm method
624 @cindex method using ssh (sm)
625 @cindex ssh (with sm method)
626 @cindex mimencode (with sm method)
627 @cindex base-64 encoding (with sm method)
629 Connect to the remote host with @command{ssh} and use base64 encoding to
630 transfer files between the machines.
632 This is identical to the previous option except that the @command{ssh}
633 package is used, making the connection more secure.
635 There are also two variants, @option{sm1} and @option{sm2}, that call
636 @samp{ssh -1} and @samp{ssh -2}, respectively.  This way, you can
637 explicitly select whether you want to use the SSH protocol version 1
638 or 2 to connect to the remote host.  (You can also specify in
639 @file{~/.ssh/config}, the SSH configuration file, which protocol
640 should be used, and use the regular @option{sm} method.)
642 There are also two variants, @option{sm-ssh1} and @option{sm-ssh2}
643 that use the @command{ssh1} and @command{ssh2} commands explicitly. If
644 you don't know what these are, you do not need these options.
646 All the methods based on @command{ssh} have an additional kludgy
647 feature: you can specify a host name which looks like @file{host#42}
648 (the real host name, then a hash sign, then a port number).  This
649 means to connect to the given host but to also pass @code{-p 42} as
650 arguments to the @command{ssh} command.
653 @item @option{tm}  ---  @command{telnet} with @command{mimencode}
654 @cindex method tm
655 @cindex tm method
656 @cindex method using telnet (tm)
657 @cindex telnet (with tm method)
658 @cindex mimencode (with tm method)
659 @cindex base-64 encoding (with tm method)
661 Connect to the remote host with @command{telnet} and use base64 encoding
662 to transfer files between the machines.
664 This requires the @command{mimencode} command that is part of the
665 @command{metamail} packages.
668 @item @option{ru}  ---  @command{rsh} with @command{uuencode}
669 @cindex method ru
670 @cindex ru method
671 @cindex method using rsh
672 @cindex rsh (with ru method)
673 @cindex uuencode (with ru method)
675 Connect to the remote host with @command{rsh} and use the
676 @command{uuencode} and @command{uudecode} commands to transfer files
677 between the machines.
680 @item @option{su}  ---  @command{ssh} with @command{uuencode}
681 @cindex method su
682 @cindex su method
683 @cindex method using ssh (su)
684 @cindex ssh (with su method)
685 @cindex uuencode (with su method)
687 Connect to the remote host with @command{ssh} and use the
688 @command{uuencode} and @command{uudecode} commands to transfer files
689 between the machines.
691 As with the @command{ssh} and base64 option (@option{sm}) above, this
692 provides the @option{su1} and @option{su2} methods to explicitly
693 select an SSH protocol version, and the @option{su-ssh1} and
694 @option{su-ssh2} variants to call specific SSH binaries.
696 Note that this method does not invoke the @command{su} program, see
697 below for methods which use that.
699 This supports the @samp{-p} kludge.
702 @item @option{tu}  ---  @command{telnet} with @command{uuencode}
703 @cindex tu method
704 @cindex method tu
705 @cindex method using telnet (tu)
706 @cindex telnet (with tu method)
707 @cindex uuencode (with tu method)
709 Connect to the remote host with @command{telnet} and use the
710 @command{uuencode} and @command{uudecode} commands to transfer files
711 between the machines.
714 @item @option{sum} --- @command{su} with @command{mimencode}
715 @cindex method sum
716 @cindex sum method
717 @cindex method using su (sum)
718 @cindex su (with sum method)
719 @cindex mimencode (with sum method)
720 @cindex base-64 encoding (with sum method)
722 This method does not connect to a remote host at all, rather it uses the
723 @command{su} program to allow you to edit files as another user.  Uses
724 base64 encoding to transfer the file contents.
727 @item @option{suu} --- @command{su} with @command{uuencode}
728 @cindex method suu
729 @cindex suu method
730 @cindex method using su (suu)
731 @cindex su (with suu method)
732 @cindex uuencode (with suu method)
734 Like @option{sum}, this uses the @command{su} program to allow you to
735 edit files on the local host as another user.  Uses @command{uuencode}
736 and @command{uudecode} to transfer the file contents.
739 @item @option{sudm} --- @command{sudo} with @command{mimencode}
740 @cindex method sudm
741 @cindex sudm method
742 @cindex method using sudo (sudm)
743 @cindex sudo (with sudm method)
744 @cindex mimencode (with sudm method)
745 @cindex base-64 encoding (with sudm method)
747 This is similar to the @option{sum} method, but it uses @command{sudo}
748 rather than @command{su} to become a different user.
750 Note that @command{sudo} must be configured to allow you to start a
751 shell as the user.  It would be nice if it was sufficient if
752 @command{ls} and @command{mimencode} were allowed, but that is not easy
753 to implement, so I haven't got around to it, yet.
756 @item @option{sudu} --- @command{sudo} with @command{uuencode}
757 @cindex method sudu
758 @cindex sudu method
759 @cindex method using sudo (sudu)
760 @cindex sudo (with sudu method)
761 @cindex uuencode (with sudu method)
763 This is similar to the @option{suu} method, but it uses @command{sudo}
764 rather than @command{su} to become a different user.
767 @item @option{smx} --- @command{ssh} with @command{mimencode}
768 @cindex method smx
769 @cindex smx method
770 @cindex method using ssh (smx)
771 @cindex ssh (with smx method)
772 @cindex mimencode (with smx method)
773 @cindex base-64 encoding (with smx method)
774 @cindex Cygwin (with smx method)
776 As you expect, this is similar to @option{sm}, only a little
777 different.  Whereas @option{sm} opens a normal interactive shell on
778 the remote host, this option uses @samp{ssh -t -t @var{host} -l
779 @var{user} /bin/sh} tp open a connection.  This is useful for users
780 where the normal login shell is set up to ask them a number of
781 questions when logging in.  This procedure avoids these questions, and
782 just gives @tramp{} a more-or-less `standard' login shell to work
783 with.
785 Note that this procedure does not eliminate questions asked by
786 @command{ssh} itself.  For example, @command{ssh} might ask ``Are you
787 sure you want to continue connecting?'' if the host key of the remote
788 host is not known.  Tramp does not know how to deal with such a
789 question (yet), therefore you will need to make sure that you can log
790 in without such questions.
792 This is also useful for Windows users where @command{ssh}, when
793 invoked from an Emacs buffer, tells them that it is not allocating a
794 pseudo tty.  When this happens, the login shell is wont to not print
795 any shell prompt, which confuses @tramp{} mightily.  For reasons
796 unknown, some Windows ports for @command{ssh} (maybe the Cygwin one)
797 require the doubled @samp{-t} option.
799 This supports the @samp{-p} kludge.
802 @item @option{km} --- @command{krlogin} with @command{mimencode}
803 @cindex method km
804 @cindex km method
805 @cindex krlogin (with km method)
806 @cindex Kerberos (with km method)
807 @cindex mimencode (with km method)
808 @cindex base-64 encoding (with km method)
810 This method is also similar to @option{sm}.  It only uses the
811 @command{krlogin -x} command to log in to the remote host.
814 @item @option{plinku} --- @command{plink} with @command{uuencode}
815 @cindex method plinku
816 @cindex plinku method
817 @cindex method using plink (plinku)
818 @cindex plink (with plinku method)
819 @cindex uuencode (with plinku method)
821 This method is mostly interesting for Windows users using the PuTTY
822 implementation of SSH.  It uses @samp{plink -ssh} to log in to the
823 remote host.
825 CCC: Do we have to connect to the remote host once from the command
826 line to accept the SSH key?  Maybe this can be made automatic?
828 CCC: Does @command{plink} support the @samp{-p} option?  Tramp
829 will support that, anyway.
831 @item @option{plinkm} --- @command{plink} with @command{mimencode}
832 @cindex method plinkm
833 @cindex plinkm method
834 @cindex method using plink (plinkm)
835 @cindex plink (with plinkm method)
836 @cindex mimencode (with plinkm method)
837 @cindex base-64 encoding (with plinkm method)
839 Like @option{plinku}, but uses base64 encoding instead of uu encoding.
841 @end table
845 @node External transfer methods
846 @section External transfer methods
847 @cindex methods, external transfer
848 @cindex methods, out-of-band
849 @cindex external transfer methods
850 @cindex out-of-band methods
852 The external transfer methods operate through multiple channels, using
853 the remote shell connection for many actions while delegating file
854 transfers to an external transfer utility.
856 This saves the overhead of encoding and decoding that multiplexing the
857 transfer through the one connection has with the inline methods.
859 If you want to use an external transfer method you @emph{must} be able
860 to execute the transfer utility to copy files to and from the remote
861 machine without any interaction.
863 @cindex ssh-agent
864 This means that you will need to use @command{ssh-agent} if you use the
865 @command{scp} program for transfers, or maybe your version of
866 @command{scp} accepts a password on the command line.@footnote{PuTTY's
867 @command{pscp} allows you to specify the password on the command line.}
868 If you use @command{rsync} via @command{ssh} then the same rule must
869 apply to that connection.
871 If you cannot get @command{scp} to run without asking for a password but
872 would still like to use @command{ssh} to secure your connection, have a
873 look at the @command{ssh} based inline methods.
876 @table @asis
877 @item @option{rcp}  ---  @command{rsh} and @command{rcp}
878 @cindex method rcp
879 @cindex rcp method
880 @cindex rcp (with rcp method)
881 @cindex rsh (with rcp method)
883 This method uses the @command{rsh} and @command{rcp} commands to connect
884 to the remote machine and transfer files. This is probably the fastest
885 connection method available.
888 @item @option{scp}  ---  @command{ssh} and @command{scp}
889 @cindex method scp
890 @cindex scp method
891 @cindex scp (with scp method)
892 @cindex ssh (with scp method)
894 Using @command{ssh} to connect to the remote host and @command{scp} to
895 transfer files between the machines is the best method for securely
896 connecting to a remote machine and accessing files.
898 The performance of this option is also quite good. It may be slower than
899 the inline methods when you often open and close small files however.
900 The cost of the cryptographic handshake at the start of an @command{scp}
901 session can begin to absorb the advantage that the lack of encoding and
902 decoding presents.
904 All the @command{ssh} based methods support the kludgy @samp{-p}
905 feature where you can specify a port number to connect to in the host
906 name.  For example, the host name @file{host#42} tells Tramp to
907 specify @samp{-p 42} in the argument list for @command{ssh}.
910 @item @option{rsync}  ---  @command{ssh} and @command{rsync}
911 @cindex method rsync
912 @cindex rsync method
913 @cindex rsync (with rsync method)
914 @cindex ssh (with rsync method)
916 Using the @command{ssh} command to connect securely to the remote
917 machine and the @command{rsync} command to transfer files is almost
918 identical to the @option{scp} method.
920 While @command{rsync} performs much better than @command{scp} when
921 transferring files that exist on both hosts, this advantage is lost if
922 the file exists only on one side of the connection.
924 The @command{rsync} based method may be considerably faster than the
925 @command{rcp} based methods when writing to the remote system. Reading
926 files to the local machine is no faster than with a direct copy. 
928 This method supports the @samp{-p} hack.
931 @item @option{scpx} --- @command{ssh} and @command{scp}
932 @cindex method scpx
933 @cindex scpx method
934 @cindex scp (with scpx method)
935 @cindex ssh (with scpx method)
936 @cindex Cygwin (with scpx method)
938 As you expect, this is similar to @option{scp}, only a little
939 different.  Whereas @option{scp} opens a normal interactive shell on
940 the remote host, this option uses @samp{ssh -t -t @var{host} -l
941 @var{user} /bin/sh} to open a connection.  This is useful for users
942 where the normal login shell is set up to ask them a number of
943 questions when logging in.  This procedure avoids these questions, and
944 just gives @tramp{} a more-or-less `standard' login shell to work
945 with.
947 This is also useful for Windows users where @command{ssh}, when
948 invoked from an Emacs buffer, tells them that it is not allocating a
949 pseudo tty.  When this happens, the login shell is wont to not print
950 any shell prompt, which confuses @tramp{} mightily.  Maybe this
951 applies to the Cygwin port of SSH.
953 This method supports the @samp{-p} hack.
956 @item @option{pscp} --- @command{plink} and @command{pscp}
957 @cindex method pscp
958 @cindex pscp method
959 @cindex pscp (with pscp method)
960 @cindex plink (with pscp method)
961 @cindex PuTTY (with pscp method)
963 This method is similar to @option{scp}, but it uses the
964 @command{plink} command to connect to the remote host, and it uses
965 @command{pscp} for transferring the files.  These programs are part
966 of PuTTY, an SSH implementation for Windows.
968 CCC: Does @command{plink} support the @samp{-p} hack?
971 @item @option{fcp} --- @command{fsh} and @command{fcp}
972 @cindex method fcp
973 @cindex fcp method
974 @cindex fsh (with fcp method)
975 @cindex fcp (with fcp method)
977 This method is similar to @option{scp}, but it uses the @command{fsh}
978 command to connect to the remote host, and it uses @command{fcp} for
979 transferring the files.  @command{fsh/fcp} are a front-end for
980 @command{ssh} which allow for reusing the same @command{ssh} session
981 for submitting several commands.  This avoids the startup overhead of
982 @command{scp} (which has to establish a secure connection whenever it
983 is called).  Note, however, that you can also use one of the inline
984 methods to achieve a similar effect.
986 This method uses the command @samp{fsh @var{host} -l @var{user}
987 /bin/sh -i} to establish the connection, it does not work to just say
988 @command{fsh @var{host} -l @var{user}}.
990 @cindex method fsh
991 @cindex fsh method
992 There is no inline method using @command{fsh} as the multiplexing
993 provided by the program is not very useful in our context.  @tramp{}
994 opens just one connection to the remote host and then keeps it open,
995 anyway.
997 @end table
999 @node Multi-hop Methods
1000 @section Connecting to a remote host using multiple hops
1001 @cindex multi-hop methods
1002 @cindex methods, multi-hop
1004 Sometimes, the methods described before are not sufficient.  Sometimes,
1005 it is not possible to connect to a remote host using a simple command.
1006 For example, if you are in a secured network, you might have to log in
1007 to a `bastion host' first before you can connect to the outside world.
1008 Of course, the target host may also require a bastion host.  The format
1009 of multi-hop filenames is slightly different than the format of normal
1010 @tramp{} methods.
1012 A multi-hop file name specifies a method, a number of hops, and a path
1013 name on the remote system.  The method specifies how the file is
1014 transferred through the inline connection.  The following two multi-hop
1015 methods are available:
1017 @table @asis
1018 @item @option{multi} --- base64 encoding with @command{mimencode}
1019 @cindex method multi
1020 @cindex multi method
1021 @cindex mimencode (with multi method)
1022 @cindex base-64 encoding (with multi method)
1024 The file is transferred through the connection in base64 encoding.  Uses
1025 the @command{mimencode} program for doing encoding and decoding, but
1026 uses an Emacs internal implementation on the local host if available.
1028 @item @option{multiu} --- use commands @command{uuencode} and @command{uudecode}
1029 @cindex method multiu
1030 @cindex multiu method
1031 @cindex uuencode (with multiu method)
1033 The file is transferred through the connection in `uu' encoding.  Uses
1034 the @command{uuencode} and @command{uudecode} programs for encoding and
1035 decoding, but uses a Lisp implementation for decoding on the local host
1036 if available.
1038 @end table
1040 Each hop consists of a @dfn{hop method} specification, a user name and a
1041 host name.  The following hop methods are (currently) available:
1043 @table @option
1044 @item telnet
1045 @cindex hop method telnet
1046 @cindex telnet hop method
1048 Uses the well-known @command{telnet} program to connect to the host.
1049 Whereas user name and host name are supplied in the file name, the
1050 user is queried for the password.
1052 @item rsh
1053 @cindex hop method rsh
1054 @cindex rsh hop method
1056 This uses @command{rsh} to connect to the host.  You do not need to
1057 enter a password unless @command{rsh} explicitly asks for it.
1059 @item ssh
1060 @cindex hop method ssh
1061 @cindex ssh hop method
1063 This uses @command{ssh} to connect to the host.  You might have to enter
1064 a password or a pass phrase.
1066 @item su
1067 @cindex hop method su
1068 @cindex su hop method
1070 This method does not actually contact a different host, but it allows
1071 you to become a different user on the host you're currently on.  This
1072 might be useful if you want to edit files as root, but the remote host
1073 does not allow remote root logins.  In this case you can use
1074 @option{telnet}, @option{rsh} or @option{ssh} to connect to the
1075 remote host as a non-root user, then use an @option{su} hop to become
1076 root.  But @option{su} need not be the last hop in a sequence, you could
1077 also use it somewhere in the middle, if the need arises.
1079 Even though you @emph{must} specify both user and host with a
1080 @option{su} hop, the host name is ignored and only the user name is
1081 used.
1083 @item sudo
1084 @cindex hop method sudo
1085 @cindex sudo hop method
1087 This is similar to the @option{su} hop, except that it uses
1088 @command{sudo} rather than @command{su} to become a different user.
1090 @end table
1092 Some people might wish to use port forwarding with @command{ssh} or
1093 maybe they have to use a nonstandard port.  This can be accomplished
1094 by putting a stanza in @file{~/.ssh/config} for the account which
1095 specifies a different port number for a certain host name.  But it can
1096 also be accomplished within Tramp, by adding a multi-hop method.  For
1097 example:
1099 @lisp
1100 (add-to-list 'tramp-multi-connection-function-alist
1101              '("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n"))
1102 @end lisp
1104 Now you can use a @code{sshf} hop which connects to port 4400 instead of
1105 the standard port.
1108 @node Default Method
1109 @section Selecting a default method
1110 @cindex default method
1112 @vindex tramp-default-method
1113 When you select an appropriate transfer method for your typical usage
1114 you should set the variable @var{tramp-default-method} to reflect that
1115 choice.  This variable controls which method will be used when a method
1116 is not specified in the @tramp{} file path.  For example:
1118 @lisp
1119 (setq tramp-default-method "scp")
1120 @end lisp
1122 @vindex tramp-default-method-alist
1123 You can also specify different methods for certain user/host
1124 combinations, via the variable @var{tramp-default-method-alist}.  For
1125 example, the following two lines specify to use the @option{sm}
1126 method for all user names matching @samp{john} and the @option{rsync}
1127 method for all host names matching @samp{lily}.  The third line
1128 specifies to use the @option{sum} method for the user @samp{root} on
1129 the machine @samp{localhost}.
1131 @lisp
1132 (add-to-list 'tramp-default-method-alist '("" "john" "sm"))
1133 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1134 (add-to-list 'tramp-default-method-alist
1135              '("\\`root\\'" "\\`localhost\\'" "sum"))
1136 @end lisp
1138 @noindent
1139 See the documentation for the variable
1140 @var{tramp-default-method-alist} for more details.
1142 External transfer methods are normally preferable to inline transfer
1143 methods, giving better performance. They may not be useful if you use
1144 many remote machines where you cannot log in without a password.
1146 @xref{Inline methods}.
1147 @xref{External transfer methods}.
1148 @xref{Multi-hop Methods}.
1150 Another consideration with the selection of transfer methods is the
1151 environment you will use them in and, especially when used over the
1152 Internet, the security implications of your preferred method.
1154 The @command{rsh} and @command{telnet} methods send your password as
1155 plain text as you log in to the remote machine, as well as transferring
1156 the files in such a way that the content can easily be read from other
1157 machines.
1159 If you need to connect to remote systems that are accessible from the
1160 Internet, you should give serious thought to using @command{ssh} based
1161 methods to connect. These provide a much higher level of security,
1162 making it a non-trivial exercise for someone to obtain your password or
1163 read the content of the files you are editing.
1165 @node Customizing Methods
1166 @section Using Non-Standard Methods
1167 @cindex customizing methods
1168 @cindex using non-standard methods
1169 @cindex create your own methods
1171 There is a variable @code{tramp-methods} which you can change if the
1172 predefined methods don't seem right.
1174 For the time being, I'll refer you to the Lisp documentation of that
1175 variable, accessible with @kbd{C-h v tramp-methods @key{RET}}.
1178 @node Remote Programs
1179 @section How @tramp{} finds and uses programs on the remote machine.
1181 @tramp{} depends on a number of programs on the remote host in order to
1182 function, including @command{ls}, @command{test}, @command{find} and
1183 @command{cat}.
1185 In addition to these required tools, there are various tools that may be
1186 required based on the connection method. See @ref{Inline methods} and
1187 @ref{External transfer methods} for details on these.
1189 Certain other tools, such as @command{perl} (or @command{perl5}) and
1190 @command{grep} will be used if they can be found. When they are
1191 available, they are used to improve the performance and accuracy of
1192 remote file access.
1194 @vindex tramp-remote-path
1195 When @tramp{} connects to the remote machine, it searches for the
1196 programs that it can use. The variable @var{tramp-remote-path} controls
1197 the directories searched on the remote machine.
1199 By default, this is set to a reasonable set of defaults for most
1200 machines. It is possible, however, that your local (or remote ;) system
1201 administrator has put the tools you want in some obscure local
1202 directory.
1204 In this case, you can still use them with @tramp{}. You simply need to
1205 add code to your @file{.emacs} to add the directory to the remote path.
1206 This will then be searched by @tramp{} when you connect and the software
1207 found.
1209 To add a directory to the remote search path, you could use code such
1212 @example
1213 (require 'tramp)                @i{; @tramp{} must be loaded before this}
1214                                 @i{; happens.}
1216 @i{; We have @command{perl} in "/usr/local/perl/bin"}
1217 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1218 @end example
1220 @node Remote shell setup
1221 @comment  node-name,  next,  previous,  up
1222 @section Remote shell setup hints
1223 @cindex remote shell setup
1224 @cindex @file{.profile} file
1225 @cindex @file{.login} file
1226 @cindex shell init files
1228 As explained in the @ref{Overview} section, @tramp{} connects to the
1229 remote host and talks to the shell it finds there.  Of course, when you
1230 log in, the shell executes its init files.  Suppose your init file
1231 requires you to enter the birthdate of your mother; clearly @tramp{}
1232 does not know this and hence fails to log you in to that host.
1234 There are different possible strategies for pursuing this problem.  One
1235 strategy is to enable @tramp{} to deal with all possible situations.
1236 This is a losing battle, since it is not possible to deal with
1237 @emph{all} situations.  The other strategy is to require you to set up
1238 the remote host such that it behaves like @tramp{} expect.  This might
1239 be inconvenient because you have to invest a lot of effort into shell
1240 setup before you can begin to use @tramp{}.
1242 The package, therefore, pursues a combined approach.  It tries to figure
1243 out some of the more common setups, and only requires you to avoid
1244 really exotic stuff.  For example, it looks through a list of
1245 directories to find some programs on the remote host.  And also, it
1246 knows that it is not obvious how to check whether a file exist, and
1247 therefore it tries different possibilities.  (On some hosts and shells,
1248 the command @code{test -e} does the trick, on some hosts the shell
1249 builtin doesn't work but the program @code{/usr/bin/test -e} or
1250 @code{/bin/test -e} works.  And on still other hosts, @code{ls -d} is
1251 the right way to do this.)
1253 Below you find a discussion of a few things that @tramp{} does not deal
1254 with, and that you therefore have to set up correctly.
1256 @table @asis
1257 @item @var{shell-prompt-pattern}
1258 @vindex shell-prompt-pattern
1260 After logging in to the remote host, @tramp{} has to wait for the remote
1261 shell startup to finish before it can send commands to the remote
1262 shell.  The strategy here is to wait for the shell prompt.  In order to
1263 recognize the shell prompt, the variable @code{shell-prompt-pattern} has
1264 to be set correctly to recognize the shell prompt on the remote host.
1266 Note that Tramp requires the match for @code{shell-prompt-pattern} to
1267 be at the end of the buffer.  Many people have something like the
1268 following as the value for the variable: @code{"^[^>$][>$] *"}.  Now
1269 suppose your shell prompt is @code{a <b> c $ }.  In this case, Tramp
1270 recognizes the @code{>} character as the end of the prompt, but it is
1271 not at the end of the buffer.
1273 @item @code{tset} and other questions
1274 @cindex Unix command tset
1275 @cindex tset Unix command
1277 Some people invoke the @code{tset} program from their shell startup
1278 scripts which asks the user about the terminal type of the shell.  Maybe
1279 some shells ask other questions when they are started.  @tramp{} does
1280 not know how to answer these questions.  (A facility for enabling
1281 @tramp{} to answer these questions is planned for some future version,
1282 but don't hold your breath.)
1284 Therefore, you should take care that the shell does not ask any
1285 questions when invoked from @tramp{}.  You can do this by checking the
1286 @code{TERM} environment variable, it will be set to @code{dumb} when
1287 connecting.
1289 @vindex tramp-terminal-type
1290 The variable @code{tramp-terminal-type} can be used to change this value
1291 @code{dumb}.
1293 @end table
1296 @node Windows setup hints
1297 @section Issues with Cygwin ssh
1298 @cindex Cygwin, issues
1300 This section needs a lot of work!  Please help.
1302 @cindex method smx with Cygwin
1303 @cindex smx method with Cygwin
1304 If you use the Cygwin installation of ssh (you have to explicitly select
1305 it in the installer), then it should work out of the box to just select
1306 @code{smx} as the connection method.  You can find information about
1307 setting up Cygwin in their FAQ at @uref{http://cygwin.com/faq/}.
1310 @node Usage
1311 @chapter Using @tramp
1312 @cindex using @tramp
1314 Once you have installed @tramp{} it will operate fairly transparently. You
1315 will be able to access files on any remote machine that you can log in
1316 to as though they were local.
1318 Files are specified to @tramp{} using a formalized syntax specifying the
1319 details of the system to connect to.  This is similar to the syntax used
1320 by the @command{EFS} and @command{Ange-FTP} packages.
1323 @menu
1324 * Filename Syntax::             @tramp{} filename conventions.
1325 * Multi-hop filename syntax::   Multi-hop filename conventions
1326 * Dired::                       Dired and filename completion.
1327 @end menu
1330 @node Filename Syntax
1331 @section @tramp{} filename conventions
1332 @cindex filename syntax
1333 @cindex filename examples
1335 On Emacs, the Ange-FTP and Tramp filenames use a unified syntax.  On
1336 XEmacs, EFS and Tramp use different formats for the filenames.
1337 Therefore, the following will describe the Emacs and XEmacs cases
1338 separately.
1340 On Emacs, to access the file @var{path} on the remote machine
1341 @var{machine} you would specify the filename
1342 @file{/@var{machine}:@var{path}}.  This will connect to @var{machine}
1343 and transfer the file using the default method.  @xref{Default
1344 Method}.  On XEmacs, use @file{/[@var{machine}]@var{path}}.  (The
1345 square brackets are part of the file name.)
1347 Some examples of @tramp{} filenames are shown below.  In each case,
1348 the Emacs-style filename is shown first, then the XEmacs-style
1349 filename.
1351 @table @file
1352 @item /melancholia:.emacs
1353 @itemx /[melancholia].emacs
1354 Edit the file @file{.emacs} in your home directory on the machine
1355 @code{melancholia}.
1357 @item /melancholia.danann.net:.emacs
1358 @itemx /[melancholia.danann.net].emacs
1359 This edits the same file, using the fully qualified domain name of
1360 the machine.
1362 @item /melancholia:~/.emacs
1363 @itemx /[melancholia]~/.emacs
1364 This also edits the same file --- the @file{~} is expanded to your
1365 home directory on the remote machine, just like it is locally.
1367 @item /melancholia:~daniel/.emacs
1368 @itemx /[melancholia]~daniel/.emacs
1369 This edits the file @file{.emacs} in the home directory of the user
1370 @code{daniel} on the machine @code{melancholia}. The @file{~<user>}
1371 construct is expanded to the home directory of that user on the remote
1372 machine.
1374 @item /melancholia:/etc/squid.conf
1375 @itemx /[melancholia]/etc/squid.conf
1376 This edits the file @file{/etc/squid.conf} on the machine
1377 @code{melancholia}.
1379 @end table
1381 Unless you specify a different name to use, @tramp{} will use the current
1382 local user name as the remote user name to log in with. If you need to
1383 log in as a different user, you can specify the user name as part of the
1384 filename.
1386 On Emacs, to log in to the remote machine as a specific user, you use
1387 the syntax @file{/@var{user}@@@var{machine}:/path/to.file}.  On
1388 XEmacs, use @file{/[@var{user}@@@var{machine}]/path/to.file}.  That
1389 means that connecting to @code{melancholia} as @code{daniel} and
1390 editing @file{.emacs} in your home directory you would specify
1391 @file{/daniel@@melancholia:.emacs} on Emacs and
1392 @file{/[daniel@@melancholia].emacs} on XEmacs.
1395 It is also possible to specify other file transfer methods
1396 (@pxref{Default Method}) as part of the filename.  On Emacs, this is
1397 done by puttig the method before the user and host name, as in
1398 @file{/@var{method}:} (note the trailing colon).  On XEmacs, it is
1399 done by replacing the initial @file{/[} with @file{/[<method>/}.
1400 (Note the trailing slash!)  The user, machine and file specification
1401 remain the same.
1403 So, to connect to the machine @code{melancholia} as @code{daniel},
1404 using the @option{su} method to transfer files, and edit @file{.emacs}
1405 in my home directory I would specify the filename
1406 @file{/su:daniel@@melancholia:.emacs} on Emacs and
1407 @file{/[su/daniel@@melancholia].emacs} on XEmacs.
1410 @node Multi-hop filename syntax
1411 @section Multi-hop filename conventions
1412 @cindex filename syntax for multi-hop files
1413 @cindex multi-hop filename syntax
1415 The syntax of multi-hop file names is necessarily slightly different
1416 than the syntax of other @tramp{} file names.  Here's an example multi-hop
1417 file name, first in Emacs syntax and then in XEmacs syntax:
1419 @file{/multi:rsh:out@@gate:telnet:kai@@real.host:/path/to.file}
1420 @file{/[multi/rsh:out@@gate/telnet:kai@@real.host]/path/to.file}
1422 This is quite a mouthful.  So let's go through it step by step.  The
1423 file name consists of three parts.  On Emacs, the parts are separated
1424 by colons, on XEmacs they are separated by slashes and square
1425 brackets.  The first part is @file{/multi:} (or @file{/[multi}), the
1426 method specification.  The second part is
1427 @file{rsh:out@@gate:telnet:kai@@real.host} (or
1428 @file{rsh:out@@gate/telnet:kai@@real.host}) and specifies the hops.
1429 (Yes, on Emacs the second part may contain even more colons, so that's why
1430 this file name has more than two colons in it.)  The final part is
1431 @file{/path/to.file} and specifies the file name on the remote host.
1433 The first part and the final part should be clear.  @ref{Multi-hop
1434 Methods}, for a list of alternatives for the method specification.
1436 The second part can be subdivided again into components, so-called hops.
1437 In the above file name, there are two hops, @file{rsh:out@@gate} and
1438 @file{telnet:kai@@real.host}.
1440 Each hop can @emph{again} be subdivided into (three) components, the
1441 @dfn{hop method}, the @dfn{user name} and the @dfn{host name}.  The
1442 meaning of the second and third component should be clear, and the hop
1443 method says what program to use to perform that hop.
1445 The first hop, @file{rsh:out@@gate}, says to use @command{rsh} to log in
1446 as user @code{out} to the host @code{gate}.  Starting at that host, the
1447 second hop, @file{telnet:kai@@real.host}, says to use @command{telnet}
1448 to log in as user @code{kai} to host @code{real.host}.
1450 @xref{Multi-hop Methods}, for a list of possible hop method values.  The
1451 variable @var{tramp-multi-connection-function-alist} contains the list of
1452 possible hop methods and information on how to execute them, should you
1453 want to add your own.
1456 @node Dired
1457 @section Dired and filename completion
1458 @cindex dired
1459 @cindex filename completion
1461 @tramp{} works transparently with dired, enabling you to use this powerful
1462 file management tool to manage files on any machine you have access to
1463 over the Internet.
1465 Filename completion also works with @tramp{} for files on remote machines
1466 although there is no completion for user names or machine names at this
1467 stage.
1469 As filename completion needs to fetch the listing of files from the
1470 remote machine, this feature is sometimes fairly slow.  As @tramp{} does not
1471 yet cache the results of directory listing, there is no gain in
1472 performance the second time you complete filenames.
1474 If you need to browse a directory tree, Dired is a better choice, at
1475 present, than filename completion.  Dired has its own cache mechanism
1476 and will only fetch the directory listing once.
1479 @node Bug Reports
1480 @chapter Reporting Bugs and Problems
1481 @cindex bug reports
1483 Bugs and problems with @tramp{} are actively worked on by the development
1484 team. Feature requests and suggestions are also more than welcome.
1486 The @tramp{} mailing list is a great place to get information on working
1487 with @tramp{}, solving problems and general discussion and advice on topics
1488 relating to the package.
1490 The  mailing list is at @email{tramp-devel@@mail.freesoftware.fsf.org}.
1491 Messages sent to this address go to all the subscribers. This is
1492 @emph{not} the address to send subscription requests to.
1494 For help on subscribing to the list, send mail to the administrative
1495 address, @email{tramp-devel-request@@mail.freesoftware.fsf.org}, with the
1496 subject @samp{help}.
1498 To report a bug in @tramp{}, you should execute @kbd{M-x tramp-bug}. This
1499 will automatically generate a buffer with the details of your system and
1500 @tramp{} version.
1502 When submitting a bug report, please try to describe in excruciating
1503 detail the steps required to reproduce the problem, the setup of the
1504 remote machine and any special conditions that exist.
1506 If you can identify a minimal test case that reproduces the problem,
1507 include that with your bug report. This will make it much easier for the
1508 development team to analyze and correct the problem.
1510 @node Frequently Asked Questions
1511 @chapter Frequently Asked Questions
1512 @cindex frequently asked questions
1513 @cindex FAQ
1515 @itemize @bullet
1516 @item
1517 Where can I get the latest @tramp{}?
1519 @tramp{} is available at
1520 @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/tramp.tar.gz}.
1521 There is also a Savannah project page, at
1522 @uref{https://savannah.gnu.org/projects/tramp/}.
1525 @item
1526 Which systems does it work on?
1528 The package has been used successfully on Emacs 20 and Emacs 21, as well
1529 as XEmacs 21.  XEmacs 20 is more problematic, see the notes in
1530 @file{tramp.el}.  I don't think anybody has really tried it on Emacs 19.
1532 The package was intended to work on Unix, and it really expects a
1533 Unix-like system on the remote end, but some people seemed to have some
1534 success getting it to work on NT Emacs.
1536 There are some informations on Tramp on NT at the following URL; many
1537 thanks to Joe Stoy for providing the information:
1538 @uref{ftp://ftp.comlab.ox.ac.uk/tmp/Joe.Stoy/}
1540 The above mostly contains patches to old ssh versions; Tom Roche has a
1541 Web page with instructions:
1542 @uref{http://www4.ncsu.edu/~tlroche/plinkTramp.html}
1544 ??? Is the XEmacs info correct?
1546 ??? Can somebody provide some information for getting it to work on NT
1547 Emacs?  I think there was some issue with @command{ssh}?
1550 @item
1551 I can't stop EFS starting with XEmacs
1553 Not all the older versions of @tramp{} supported XEmacs correctly. The
1554 first thing to do is to make sure that you have the latest version of
1555 @tramp{} installed.
1557 If you do, please try and find out exactly the conditions required for
1558 the @code{EFS} handlers to fire. If you can, putting a breakpoint on
1559 @code{efs-ftp-path} and sending in the stack trace along with your bug
1560 report would make it easier for the developers to work out what is going
1561 wrong.
1564 @item
1565 File name completion does not work with @tramp{}
1567 When you log in to the remote machine, do you see the output of
1568 @command{ls} in color? If so, this may be the cause of your problems.
1570 @command{ls} outputs @acronym{ANSI} escape sequences that your terminal
1571 emulator interprets to set the colors. These escape sequences will
1572 confuse @tramp{} however.
1574 In your @file{.bashrc}, @file{.profile} or equivalent on the remote
1575 machine you probably have an alias configured that adds the option
1576 @option{--color=yes} or @option{--color=auto}.
1578 You should remove that alias and ensure that a new login @emph{does not}
1579 display the output of @command{ls} in color. If you still cannot use
1580 filename completion, report a bug to the @tramp{} developers.
1583 @item
1584 File name completion does not work in large directories
1586 @tramp{} uses globbing for some operations.  (Globbing means to use the
1587 shell to expand wildcards such as `*.c'.)  This might create long
1588 command lines, especially in directories with many files.  Some shell
1589 choke on long command lines, or don't cope well with the globbing
1590 itself.
1592 If you have a large directory on the remote end, you may wish to execute
1593 a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs.
1594 Note that you must first start the right shell, which might be
1595 @command{/bin/sh}, @command{ksh} or @command{bash}, depending on which
1596 of those supports tilde expansion.
1599 @item
1600 What kinds of systems does @tramp{} work on
1602 @tramp{} really expects the remote system to be a Unix-like system.  The
1603 local system should preferably be Unix-like, as well, but @tramp{} might
1604 work on NT with some tweaking.
1607 @item
1608 How can I get notified when @tramp{} file transfers are complete?
1610 The following snippet can be put in your @file{~/.emacs} file.  It makes
1611 Emacs beep after reading from or writing to the remote host.
1613 @lisp
1614 (defadvice tramp-handle-write-region
1615   (after tramp-write-beep-advice activate)
1616  " make tramp beep after writing a file."
1617  (interactive)
1618  (beep))
1619 (defadvice tramp-handle-do-copy-or-rename-file
1620   (after tramp-copy-beep-advice activate)
1621  " make tramp beep after copying a file."
1622  (interactive)
1623  (beep))
1624 (defadvice tramp-handle-insert-file-contents
1625   (after tramp-copy-beep-advice activate)
1626  " make tramp beep after copying a file."
1627  (interactive)
1628  (beep))
1629 @end lisp
1632 @item
1633 There's this @file{~/.sh_history} file on the remote host which keeps
1634 growing and growing.  What's that?
1636 Sometimes, @tramp{} starts @code{ksh} on the remote host for tilde
1637 expansion.  Maybe @code{ksh} saves the history by default.  @tramp{}
1638 tries to turn off saving the history, but maybe you have to help.  For
1639 example, you could put this in your @file{.kshrc}:
1641 @example
1642 if [ -f $HOME/.sh_history ] ; then
1643    /bin/rm $HOME/.sh_history
1645 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
1646    unset HISTFILE
1648 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
1649    unset HISTSIZE
1651 @end example
1653 @end itemize
1656 @c For the developer
1657 @node Version Control
1658 @chapter The inner workings of remote version control
1660 Unlike EFS and Ange-FTP, @tramp{} has full shell access to the remote
1661 machine. This makes it possible to provide version control for files
1662 accessed under @tramp{}.
1664 The actual version control binaries must be installed on the remote
1665 machine, accessible in the directories specified in
1666 @var{tramp-remote-path}.
1668 This transparent integration with the version control systems is one of
1669 the most valuable features provided by @tramp{}, but it is far from perfect.
1670 Work is ongoing to improve the transparency of the system.
1672 @menu
1673 * Version Controlled Files::    Determining if a file is under version control.
1674 * Remote Commands::             Executing the version control commands on the remote machine.
1675 * Changed workfiles::           Detecting if the working file has changed.
1676 * Checking out files::          Bringing the workfile out of the repository.
1677 * Miscellaneous Version Control::  Things related to Version Control that don't fit elsewhere
1678 @end menu
1681 @node Version Controlled Files
1682 @section Determining if a file is under version control
1684 The VC package uses the existence of on-disk revision control master
1685 files to determine if a given file is under revision control. These file
1686 tests happen on the remote machine through the standard @tramp{} mechanisms.
1689 @node Remote Commands
1690 @section Executing the version control commands on the remote machine
1692 There are no hooks provided by VC to allow intercepting of the version
1693 control command execution. The calls occur through the
1694 @code{call-process} mechanism, a function that is somewhat more
1695 efficient than the @code{shell-command} function but that does not
1696 provide hooks for remote execution of commands.
1698 To work around this, the functions @code{vc-do-command} and
1699 @code{vc-simple-command} have been advised to intercept requests for
1700 operations on files accessed via @tramp{}.
1702 In the case of a remote file, the @code{shell-command} interface is
1703 used, with some wrapper code, to provide the same functionality on the
1704 remote machine as would be seen on the local machine. 
1707 @node Changed workfiles
1708 @section Detecting if the working file has changed
1710 As there is currently no way to get access to the mtime of a file on a
1711 remote machine in a portable way, the @code{vc-workfile-unchanged-p}
1712 function is advised to call an @tramp{} specific function for remote files.
1714 The @code{tramp-vc-workfile-unchanged-p} function uses the functioning VC
1715 diff functionality to determine if any changes have occurred between the
1716 workfile and the version control master.
1718 This requires that a shell command be executed remotely, a process that
1719 is notably heavier-weight than the mtime comparison used for local
1720 files. Unfortunately, unless a portable solution to the issue is found,
1721 this will remain the cost of remote version control.
1724 @node Checking out files
1725 @section Bringing the workfile out of the repository
1727 VC will, by default, check for remote files and refuse to act on them
1728 when checking out files from the repository. To work around this
1729 problem, the function @code{vc-checkout} knows about @tramp{} files and
1730 allows version control to occur.
1733 @node Miscellaneous Version Control
1734 @section Things related to Version Control that don't fit elsewhere
1736 Minor implementation details, &c.
1738 @menu
1739 * Remote File Ownership::       How VC determines who owns a workfile.
1740 * Back-end Versions::           How VC determines what release your RCS is.
1741 @end menu
1744 @node Remote File Ownership
1745 @subsection How VC determines who owns a workfile
1747 Emacs provides the @code{user-full-name} function to return the login name
1748 of the current user as well as mapping from arbitrary user id values
1749 back to login names. The VC code uses this functionality to map from the
1750 uid of the owner of a workfile to the login name in some circumstances.
1752 This will not, for obvious reasons, work if the remote system has a
1753 different set of logins. As such, it is necessary to delegate to the
1754 remote machine the job of determining the login name associated with a
1755 uid.
1757 Unfortunately, with the profusion of distributed management systems such
1758 as @code{NIS}, @code{NIS+} and @code{NetInfo}, there is no simple,
1759 reliable and portable method for performing this mapping.
1761 Thankfully, the only place in the VC code that depends on the mapping of
1762 a uid to a login name is the @code{vc-file-owner} function. This returns
1763 the login of the owner of the file as a string.
1765 This function has been advised to use the output of @command{ls} on the
1766 remote machine to determine the login name, delegating the problem of
1767 mapping the uid to the login to the remote system which should know more
1768 about it than I do.
1771 @node Back-end Versions
1772 @subsection How VC determines what release your RCS is
1774 VC needs to know what release your revision control binaries you are
1775 running as not all features VC supports are available with older
1776 versions of @command{rcs(1)}, @command{cvs(1)} or @command{sccs(1)}.
1778 The default implementation of VC determines this value the first time it
1779 is needed and then stores the value globally to avoid the overhead of
1780 executing a process and parsing its output each time the information is
1781 needed.
1783 Unfortunately, life is not quite so easy when remote version control
1784 comes into the picture. Each remote machine may have a different version
1785 of the version control tools and, while this is painful, we need to
1786 ensure that unavailable features are not used remotely.
1788 To resolve this issue, @tramp{} currently takes the sledgehammer
1789 approach of making the release values of the revision control tools
1790 local to each @tramp{} buffer, forcing VC to determine these values
1791 again each time a new file is visited.
1793 This has, quite obviously, some performance implications. Thankfully,
1794 most of the common operations performed by VC do not actually require
1795 that the remote version be known. This makes the problem far less
1796 apparent.
1798 Eventually these values will be captured by @tramp{} on a system by
1799 system basis and the results cached to improve performance.
1802 @node Files directories and paths
1803 @chapter How file names, directories and paths are mangled and managed.
1805 @menu
1806 * Path deconstruction::         Breaking a path into its components.
1807 @end menu
1810 @node Path deconstruction
1811 @section Breaking a path into its components.
1813 @tramp{} filenames are somewhat different, obviously, to ordinary path
1814 names. As such, the lisp functions @code{file-name-directory} and
1815 @code{file-name-nondirectory} are overridden within the @tramp{} package.
1817 Their replacements are reasonably simplistic in their approach. They
1818 dissect the filename, call the original handler on the remote path and
1819 then rebuild the @tramp{} path with the result.
1821 This allows the platform specific hacks in the original handlers to take
1822 effect while preserving the @tramp{} path information.
1825 @node Issues
1826 @chapter Debatable Issues and What Was Decided
1828 @itemize @bullet
1829 @item The uuencode method does not always work.
1831 Due to the design of @tramp{}, the encoding and decoding programs need to
1832 read from stdin and write to stdout.  On some systems, @code{uudecode -o
1833 -} will read stdin and write the decoded file to stdout, on other
1834 systems @code{uudecode -p} does the same thing.  But some systems have
1835 uudecode implementations which cannot do this at all---it is not
1836 possible to call these uudecode implementations with suitable parameters
1837 so that they write to stdout.
1839 Of course, this could be circumvented: the @code{begin foo 644} line
1840 could be rewritten to put in some temporary file name, then
1841 @code{uudecode} could be called, then the temp file could be printed and
1842 deleted.
1844 But I have decided that this is too fragile to reliably work, so on some
1845 systems you'll have to do without the uuencode methods.
1847 @item @tramp{} does not work on XEmacs 20.
1849 This is because it requires the macro @code{with-timeout} which does not
1850 appear to exist in XEmacs 20.  I'm somewhat reluctant to add an
1851 emulation macro to @tramp{}, but if somebody who uses XEmacs 20 steps
1852 forward and wishes to implement and test it, please contact me or the
1853 mailing list.
1855 @item The @tramp{} filename syntax differs between Emacs and XEmacs.
1857 The Emacs maintainers wish to use a unified filename syntax for
1858 Ange-FTP and @tramp{} so that users don't have to learn a new
1859 syntax.  It is sufficient to learn some extensions to the old syntax.
1861 For the XEmacs maintainers, the problems caused from using a unified
1862 filename syntax are greater than the gains.  The XEmacs package
1863 system uses EFS for downloading new packages.  So, obviously, EFS has
1864 to be installed from the start.  If the filenames were unified, Tramp
1865 would have to be installed from the start, too.
1867 @end itemize
1870 @c End of tramp.texi - the TRAMP User Manual
1871 @bye
1873 @c TODO
1875 @c * Say something about the .login and .profile files of the remote
1876 @c   shells.
1877 @c * Explain how tramp.el works in principle: open a shell on a remote
1878 @c   host and then send commands to it.
1879 @c * Mention that bookmarks are a cool feature to go along with Tramp.
1880 @c * Make terminology "inline" vs "out-of-band" consistent.
1881 @c   It seems that "external" is also used instead of "out-of-band".