(vc-default-comment-history): Hard code *vc*.
[emacs.git] / man / tramp.texi
blobd27f6c942cf4918ccd84a003239909e9ee12e337
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 use the
636 @command{ssh1} and @command{ssh2} commands explicitly. If you don't know
637 what these are, you do not need these options.
639 All the methods based on @command{ssh} have an additional kludgy
640 feature: you can specify a host name which looks like @file{host#42}
641 (the real host name, then a hash sign, then a port number).  This
642 means to connect to the given host but to also pass @code{-p 42} as
643 arguments to the @command{ssh} command.
646 @item @option{tm}  ---  @command{telnet} with @command{mimencode}
647 @cindex method tm
648 @cindex tm method
649 @cindex method using telnet (tm)
650 @cindex telnet (with tm method)
651 @cindex mimencode (with tm method)
652 @cindex base-64 encoding (with tm method)
654 Connect to the remote host with @command{telnet} and use base64 encoding
655 to transfer files between the machines.
657 This requires the @command{mimencode} command that is part of the
658 @command{metamail} packages.
661 @item @option{ru}  ---  @command{rsh} with @command{uuencode}
662 @cindex method ru
663 @cindex ru method
664 @cindex method using rsh
665 @cindex rsh (with ru method)
666 @cindex uuencode (with ru method)
668 Connect to the remote host with @command{rsh} and use the
669 @command{uuencode} and @command{uudecode} commands to transfer files
670 between the machines.
673 @item @option{su}  ---  @command{ssh} with @command{uuencode}
674 @cindex method su
675 @cindex su method
676 @cindex method using ssh (su)
677 @cindex ssh (with su method)
678 @cindex uuencode (with su method)
680 Connect to the remote host with @command{ssh} and use the
681 @command{uuencode} and @command{uudecode} commands to transfer files
682 between the machines.
684 As with the @command{ssh} and base64 option (@option{sm}) above, this
685 provides the @option{su1} and @option{su2} methods to explicitly
686 select an ssh version.
688 Note that this method does not invoke the @command{su} program, see
689 below for methods which use that.
691 This supports the @samp{-p} kludge.
694 @item @option{tu}  ---  @command{telnet} with @command{uuencode}
695 @cindex tu method
696 @cindex method tu
697 @cindex method using telnet (tu)
698 @cindex telnet (with tu method)
699 @cindex uuencode (with tu method)
701 Connect to the remote host with @command{telnet} and use the
702 @command{uuencode} and @command{uudecode} commands to transfer files
703 between the machines.
706 @item @option{sum} --- @command{su} with @command{mimencode}
707 @cindex method sum
708 @cindex sum method
709 @cindex method using su (sum)
710 @cindex su (with sum method)
711 @cindex mimencode (with sum method)
712 @cindex base-64 encoding (with sum method)
714 This method does not connect to a remote host at all, rather it uses the
715 @command{su} program to allow you to edit files as another user.  Uses
716 base64 encoding to transfer the file contents.
719 @item @option{suu} --- @command{su} with @command{uuencode}
720 @cindex method suu
721 @cindex suu method
722 @cindex method using su (suu)
723 @cindex su (with suu method)
724 @cindex uuencode (with suu method)
726 Like @option{sum}, this uses the @command{su} program to allow you to
727 edit files on the local host as another user.  Uses @command{uuencode}
728 and @command{uudecode} to transfer the file contents.
731 @item @option{sudm} --- @command{sudo} with @command{mimencode}
732 @cindex method sudm
733 @cindex sudm method
734 @cindex method using sudo (sudm)
735 @cindex sudo (with sudm method)
736 @cindex mimencode (with sudm method)
737 @cindex base-64 encoding (with sudm method)
739 This is similar to the @option{sum} method, but it uses @command{sudo}
740 rather than @command{su} to become a different user.
742 Note that @command{sudo} must be configured to allow you to start a
743 shell as the user.  It would be nice if it was sufficient if
744 @command{ls} and @command{mimencode} were allowed, but that is not easy
745 to implement, so I haven't got around to it, yet.
748 @item @option{sudu} --- @command{sudo} with @command{uuencode}
749 @cindex method sudu
750 @cindex sudu method
751 @cindex method using sudo (sudu)
752 @cindex sudo (with sudu method)
753 @cindex uuencode (with sudu method)
755 This is similar to the @option{suu} method, but it uses @command{sudo}
756 rather than @command{su} to become a different user.
759 @item @option{smx} --- @command{ssh} with @command{mimencode}
760 @cindex method smx
761 @cindex smx method
762 @cindex method using ssh (smx)
763 @cindex ssh (with smx method)
764 @cindex mimencode (with smx method)
765 @cindex base-64 encoding (with smx method)
766 @cindex Cygwin (with smx method)
768 As you expect, this is similar to @option{sm}, only a little
769 different.  Whereas @option{sm} opens a normal interactive shell on
770 the remote host, this option uses @samp{ssh -t -t @var{host} -l
771 @var{user} /bin/sh} tp open a connection.  This is useful for users
772 where the normal login shell is set up to ask them a number of
773 questions when logging in.  This procedure avoids these questions, and
774 just gives @tramp{} a more-or-less `standard' login shell to work
775 with.
777 Note that this procedure does not eliminate questions asked by
778 @command{ssh} itself.  For example, @command{ssh} might ask ``Are you
779 sure you want to continue connecting?'' if the host key of the remote
780 host is not known.  Tramp does not know how to deal with such a
781 question (yet), therefore you will need to make sure that you can log
782 in without such questions.
784 This is also useful for Windows users where @command{ssh}, when
785 invoked from an Emacs buffer, tells them that it is not allocating a
786 pseudo tty.  When this happens, the login shell is wont to not print
787 any shell prompt, which confuses @tramp{} mightily.  For reasons
788 unknown, some Windows ports for @command{ssh} (maybe the Cygwin one)
789 require the doubled @samp{-t} option.
791 This supports the @samp{-p} kludge.
794 @item @option{km} --- @command{krlogin} with @command{mimencode}
795 @cindex method km
796 @cindex km method
797 @cindex krlogin (with km method)
798 @cindex Kerberos (with km method)
799 @cindex mimencode (with km method)
800 @cindex base-64 encoding (with km method)
802 This method is also similar to @option{sm}.  It only uses the
803 @command{krlogin -x} command to log in to the remote host.
806 @item @option{plinku} --- @command{plink} with @command{uuencode}
807 @cindex method plinku
808 @cindex plinku method
809 @cindex method using plink (plinku)
810 @cindex plink (with plinku method)
811 @cindex uuencode (with plinku method)
813 This method is mostly interesting for Windows users using the PuTTY
814 implementation of SSH.  It uses @samp{plink -ssh} to log in to the
815 remote host.
817 CCC: Do we have to connect to the remote host once from the command
818 line to accept the SSH key?  Maybe this can be made automatic?
820 CCC: Does @command{plink} support the @samp{-p} option?  Tramp
821 will support that, anyway.
823 @item @option{plinkm} --- @command{plink} with @command{mimencode}
824 @cindex method plinkm
825 @cindex plinkm method
826 @cindex method using plink (plinkm)
827 @cindex plink (with plinkm method)
828 @cindex mimencode (with plinkm method)
829 @cindex base-64 encoding (with plinkm method)
831 Like @option{plinku}, but uses base64 encoding instead of uu encoding.
833 @end table
837 @node External transfer methods
838 @section External transfer methods
839 @cindex methods, external transfer
840 @cindex methods, out-of-band
841 @cindex external transfer methods
842 @cindex out-of-band methods
844 The external transfer methods operate through multiple channels, using
845 the remote shell connection for many actions while delegating file
846 transfers to an external transfer utility.
848 This saves the overhead of encoding and decoding that multiplexing the
849 transfer through the one connection has with the inline methods.
851 If you want to use an external transfer method you @emph{must} be able
852 to execute the transfer utility to copy files to and from the remote
853 machine without any interaction.
855 @cindex ssh-agent
856 This means that you will need to use @command{ssh-agent} if you use the
857 @command{scp} program for transfers, or maybe your version of
858 @command{scp} accepts a password on the command line.@footnote{PuTTY's
859 @command{pscp} allows you to specify the password on the command line.}
860 If you use @command{rsync} via @command{ssh} then the same rule must
861 apply to that connection.
863 If you cannot get @command{scp} to run without asking for a password but
864 would still like to use @command{ssh} to secure your connection, have a
865 look at the @command{ssh} based inline methods.
868 @table @asis
869 @item @option{rcp}  ---  @command{rsh} and @command{rcp}
870 @cindex method rcp
871 @cindex rcp method
872 @cindex rcp (with rcp method)
873 @cindex rsh (with rcp method)
875 This method uses the @command{rsh} and @command{rcp} commands to connect
876 to the remote machine and transfer files. This is probably the fastest
877 connection method available.
880 @item @option{scp}  ---  @command{ssh} and @command{scp}
881 @cindex method scp
882 @cindex scp method
883 @cindex scp (with scp method)
884 @cindex ssh (with scp method)
886 Using @command{ssh} to connect to the remote host and @command{scp} to
887 transfer files between the machines is the best method for securely
888 connecting to a remote machine and accessing files.
890 The performance of this option is also quite good. It may be slower than
891 the inline methods when you often open and close small files however.
892 The cost of the cryptographic handshake at the start of an @command{scp}
893 session can begin to absorb the advantage that the lack of encoding and
894 decoding presents.
896 All the @command{ssh} based methods support the kludgy @samp{-p}
897 feature where you can specify a port number to connect to in the host
898 name.  For example, the host name @file{host#42} tells Tramp to
899 specify @samp{-p 42} in the argument list for @command{ssh}.
902 @item @option{rsync}  ---  @command{ssh} and @command{rsync}
903 @cindex method rsync
904 @cindex rsync method
905 @cindex rsync (with rsync method)
906 @cindex ssh (with rsync method)
908 Using the @command{ssh} command to connect securely to the remote
909 machine and the @command{rsync} command to transfer files is almost
910 identical to the @option{scp} method.
912 While @command{rsync} performs much better than @command{scp} when
913 transferring files that exist on both hosts, this advantage is lost if
914 the file exists only on one side of the connection.
916 The @command{rsync} based method may be considerably faster than the
917 @command{rcp} based methods when writing to the remote system. Reading
918 files to the local machine is no faster than with a direct copy. 
920 This method supports the @samp{-p} hack.
923 @item @option{scpx} --- @command{ssh} and @command{scp}
924 @cindex method scpx
925 @cindex scpx method
926 @cindex scp (with scpx method)
927 @cindex ssh (with scpx method)
928 @cindex Cygwin (with scpx method)
930 As you expect, this is similar to @option{scp}, only a little
931 different.  Whereas @option{scp} opens a normal interactive shell on
932 the remote host, this option uses @samp{ssh -t -t @var{host} -l
933 @var{user} /bin/sh} to open a connection.  This is useful for users
934 where the normal login shell is set up to ask them a number of
935 questions when logging in.  This procedure avoids these questions, and
936 just gives @tramp{} a more-or-less `standard' login shell to work
937 with.
939 This is also useful for Windows users where @command{ssh}, when
940 invoked from an Emacs buffer, tells them that it is not allocating a
941 pseudo tty.  When this happens, the login shell is wont to not print
942 any shell prompt, which confuses @tramp{} mightily.  Maybe this
943 applies to the Cygwin port of SSH.
945 This method supports the @samp{-p} hack.
948 @item @option{pscp} --- @command{plink} and @command{pscp}
949 @cindex method pscp
950 @cindex pscp method
951 @cindex pscp (with pscp method)
952 @cindex plink (with pscp method)
953 @cindex PuTTY (with pscp method)
955 This method is similar to @option{scp}, but it uses the
956 @command{plink} command to connect to the remote host, and it uses
957 @command{pscp} for transferring the files.  These programs are part
958 of PuTTY, an SSH implementation for Windows.
960 CCC: Does @command{plink} support the @samp{-p} hack?
963 @item @option{fcp} --- @command{fsh} and @command{fcp}
964 @cindex method fcp
965 @cindex fcp method
966 @cindex fsh (with fcp method)
967 @cindex fcp (with fcp method)
969 This method is similar to @option{scp}, but it uses the @command{fsh}
970 command to connect to the remote host, and it uses @command{fcp} for
971 transferring the files.  @command{fsh/fcp} are a front-end for
972 @command{ssh} which allow for reusing the same @command{ssh} session
973 for submitting several commands.  This avoids the startup overhead of
974 @command{scp} (which has to establish a secure connection whenever it
975 is called).  Note, however, that you can also use one of the inline
976 methods to achieve a similar effect.
978 This method uses the command @samp{fsh @var{host} -l @var{user}
979 /bin/sh -i} to establish the connection, it does not work to just say
980 @command{fsh @var{host} -l @var{user}}.
982 @cindex method fsh
983 @cindex fsh method
984 There is no inline method using @command{fsh} as the multiplexing
985 provided by the program is not very useful in our context.  @tramp{}
986 opens just one connection to the remote host and then keeps it open,
987 anyway.
989 @end table
991 @node Multi-hop Methods
992 @section Connecting to a remote host using multiple hops
993 @cindex multi-hop methods
994 @cindex methods, multi-hop
996 Sometimes, the methods described before are not sufficient.  Sometimes,
997 it is not possible to connect to a remote host using a simple command.
998 For example, if you are in a secured network, you might have to log in
999 to a `bastion host' first before you can connect to the outside world.
1000 Of course, the target host may also require a bastion host.  The format
1001 of multi-hop filenames is slightly different than the format of normal
1002 @tramp{} methods.
1004 A multi-hop file name specifies a method, a number of hops, and a path
1005 name on the remote system.  The method specifies how the file is
1006 transferred through the inline connection.  The following two multi-hop
1007 methods are available:
1009 @table @asis
1010 @item @option{multi} --- base64 encoding with @command{mimencode}
1011 @cindex method multi
1012 @cindex multi method
1013 @cindex mimencode (with multi method)
1014 @cindex base-64 encoding (with multi method)
1016 The file is transferred through the connection in base64 encoding.  Uses
1017 the @command{mimencode} program for doing encoding and decoding, but
1018 uses an Emacs internal implementation on the local host if available.
1020 @item @option{multiu} --- use commands @command{uuencode} and @command{uudecode}
1021 @cindex method multiu
1022 @cindex multiu method
1023 @cindex uuencode (with multiu method)
1025 The file is transferred through the connection in `uu' encoding.  Uses
1026 the @command{uuencode} and @command{uudecode} programs for encoding and
1027 decoding, but uses a Lisp implementation for decoding on the local host
1028 if available.
1030 @end table
1032 Each hop consists of a @dfn{hop method} specification, a user name and a
1033 host name.  The following hop methods are (currently) available:
1035 @table @option
1036 @item telnet
1037 @cindex hop method telnet
1038 @cindex telnet hop method
1040 Uses the well-known @command{telnet} program to connect to the host.
1041 Whereas user name and host name are supplied in the file name, the
1042 user is queried for the password.
1044 @item rsh
1045 @cindex hop method rsh
1046 @cindex rsh hop method
1048 This uses @command{rsh} to connect to the host.  You do not need to
1049 enter a password unless @command{rsh} explicitly asks for it.
1051 @item ssh
1052 @cindex hop method ssh
1053 @cindex ssh hop method
1055 This uses @command{ssh} to connect to the host.  You might have to enter
1056 a password or a pass phrase.
1058 @item su
1059 @cindex hop method su
1060 @cindex su hop method
1062 This method does not actually contact a different host, but it allows
1063 you to become a different user on the host you're currently on.  This
1064 might be useful if you want to edit files as root, but the remote host
1065 does not allow remote root logins.  In this case you can use
1066 @option{telnet}, @option{rsh} or @option{ssh} to connect to the
1067 remote host as a non-root user, then use an @option{su} hop to become
1068 root.  But @option{su} need not be the last hop in a sequence, you could
1069 also use it somewhere in the middle, if the need arises.
1071 Even though you @emph{must} specify both user and host with a
1072 @option{su} hop, the host name is ignored and only the user name is
1073 used.
1075 @item sudo
1076 @cindex hop method sudo
1077 @cindex sudo hop method
1079 This is similar to the @option{su} hop, except that it uses
1080 @command{sudo} rather than @command{su} to become a different user.
1082 @end table
1084 Some people might wish to use port forwarding with @command{ssh} or
1085 maybe they have to use a nonstandard port.  This can be accomplished
1086 by putting a stanza in @file{~/.ssh/config} for the account which
1087 specifies a different port number for a certain host name.  But it can
1088 also be accomplished within Tramp, by adding a multi-hop method.  For
1089 example:
1091 @lisp
1092 (add-to-list 'tramp-multi-connection-function-alist
1093              '("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n"))
1094 @end lisp
1096 Now you can use a @code{sshf} hop which connects to port 4400 instead of
1097 the standard port.
1100 @node Default Method
1101 @section Selecting a default method
1102 @cindex default method
1104 @vindex tramp-default-method
1105 When you select an appropriate transfer method for your typical usage
1106 you should set the variable @var{tramp-default-method} to reflect that
1107 choice.  This variable controls which method will be used when a method
1108 is not specified in the @tramp{} file path.  For example:
1110 @lisp
1111 (setq tramp-default-method "scp")
1112 @end lisp
1114 @vindex tramp-default-method-alist
1115 You can also specify different methods for certain user/host
1116 combinations, via the variable @var{tramp-default-method-alist}.  For
1117 example, the following two lines specify to use the @option{sm}
1118 method for all user names matching @samp{john} and the @option{rsync}
1119 method for all host names matching @samp{lily}.  The third line
1120 specifies to use the @option{sum} method for the user @samp{root} on
1121 the machine @samp{localhost}.
1123 @lisp
1124 (add-to-list 'tramp-default-method-alist '("" "john" "sm"))
1125 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1126 (add-to-list 'tramp-default-method-alist
1127              '("\\`root\\'" "\\`localhost\\'" "sum"))
1128 @end lisp
1130 @noindent
1131 See the documentation for the variable
1132 @var{tramp-default-method-alist} for more details.
1134 External transfer methods are normally preferable to inline transfer
1135 methods, giving better performance. They may not be useful if you use
1136 many remote machines where you cannot log in without a password.
1138 @xref{Inline methods}.
1139 @xref{External transfer methods}.
1140 @xref{Multi-hop Methods}.
1142 Another consideration with the selection of transfer methods is the
1143 environment you will use them in and, especially when used over the
1144 Internet, the security implications of your preferred method.
1146 The @command{rsh} and @command{telnet} methods send your password as
1147 plain text as you log in to the remote machine, as well as transferring
1148 the files in such a way that the content can easily be read from other
1149 machines.
1151 If you need to connect to remote systems that are accessible from the
1152 Internet, you should give serious thought to using @command{ssh} based
1153 methods to connect. These provide a much higher level of security,
1154 making it a non-trivial exercise for someone to obtain your password or
1155 read the content of the files you are editing.
1157 @node Customizing Methods
1158 @section Using Non-Standard Methods
1159 @cindex customizing methods
1160 @cindex using non-standard methods
1161 @cindex create your own methods
1163 There is a variable @code{tramp-methods} which you can change if the
1164 predefined methods don't seem right.
1166 For the time being, I'll refer you to the Lisp documentation of that
1167 variable, accessible with @kbd{C-h v tramp-methods @key{RET}}.
1170 @node Remote Programs
1171 @section How @tramp{} finds and uses programs on the remote machine.
1173 @tramp{} depends on a number of programs on the remote host in order to
1174 function, including @command{ls}, @command{test}, @command{find} and
1175 @command{cat}.
1177 In addition to these required tools, there are various tools that may be
1178 required based on the connection method. See @ref{Inline methods} and
1179 @ref{External transfer methods} for details on these.
1181 Certain other tools, such as @command{perl} (or @command{perl5}) and
1182 @command{grep} will be used if they can be found. When they are
1183 available, they are used to improve the performance and accuracy of
1184 remote file access.
1186 @vindex tramp-remote-path
1187 When @tramp{} connects to the remote machine, it searches for the
1188 programs that it can use. The variable @var{tramp-remote-path} controls
1189 the directories searched on the remote machine.
1191 By default, this is set to a reasonable set of defaults for most
1192 machines. It is possible, however, that your local (or remote ;) system
1193 administrator has put the tools you want in some obscure local
1194 directory.
1196 In this case, you can still use them with @tramp{}. You simply need to
1197 add code to your @file{.emacs} to add the directory to the remote path.
1198 This will then be searched by @tramp{} when you connect and the software
1199 found.
1201 To add a directory to the remote search path, you could use code such
1204 @example
1205 (require 'tramp)                @i{; @tramp{} must be loaded before this}
1206                                 @i{; happens.}
1208 @i{; We have @command{perl} in "/usr/local/perl/bin"}
1209 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1210 @end example
1212 @node Remote shell setup
1213 @comment  node-name,  next,  previous,  up
1214 @section Remote shell setup hints
1215 @cindex remote shell setup
1216 @cindex @file{.profile} file
1217 @cindex @file{.login} file
1218 @cindex shell init files
1220 As explained in the @ref{Overview} section, @tramp{} connects to the
1221 remote host and talks to the shell it finds there.  Of course, when you
1222 log in, the shell executes its init files.  Suppose your init file
1223 requires you to enter the birthdate of your mother; clearly @tramp{}
1224 does not know this and hence fails to log you in to that host.
1226 There are different possible strategies for pursuing this problem.  One
1227 strategy is to enable @tramp{} to deal with all possible situations.
1228 This is a losing battle, since it is not possible to deal with
1229 @emph{all} situations.  The other strategy is to require you to set up
1230 the remote host such that it behaves like @tramp{} expect.  This might
1231 be inconvenient because you have to invest a lot of effort into shell
1232 setup before you can begin to use @tramp{}.
1234 The package, therefore, pursues a combined approach.  It tries to figure
1235 out some of the more common setups, and only requires you to avoid
1236 really exotic stuff.  For example, it looks through a list of
1237 directories to find some programs on the remote host.  And also, it
1238 knows that it is not obvious how to check whether a file exist, and
1239 therefore it tries different possibilities.  (On some hosts and shells,
1240 the command @code{test -e} does the trick, on some hosts the shell
1241 builtin doesn't work but the program @code{/usr/bin/test -e} or
1242 @code{/bin/test -e} works.  And on still other hosts, @code{ls -d} is
1243 the right way to do this.)
1245 Below you find a discussion of a few things that @tramp{} does not deal
1246 with, and that you therefore have to set up correctly.
1248 @table @asis
1249 @item @var{shell-prompt-pattern}
1250 @vindex shell-prompt-pattern
1252 After logging in to the remote host, @tramp{} has to wait for the remote
1253 shell startup to finish before it can send commands to the remote
1254 shell.  The strategy here is to wait for the shell prompt.  In order to
1255 recognize the shell prompt, the variable @code{shell-prompt-pattern} has
1256 to be set correctly to recognize the shell prompt on the remote host.
1258 Note that Tramp requires the match for @code{shell-prompt-pattern} to
1259 be at the end of the buffer.  Many people have something like the
1260 following as the value for the variable: @code{"^[^>$][>$] *"}.  Now
1261 suppose your shell prompt is @code{a <b> c $ }.  In this case, Tramp
1262 recognizes the @code{>} character as the end of the prompt, but it is
1263 not at the end of the buffer.
1265 @item @code{tset} and other questions
1266 @cindex Unix command tset
1267 @cindex tset Unix command
1269 Some people invoke the @code{tset} program from their shell startup
1270 scripts which asks the user about the terminal type of the shell.  Maybe
1271 some shells ask other questions when they are started.  @tramp{} does
1272 not know how to answer these questions.  (A facility for enabling
1273 @tramp{} to answer these questions is planned for some future version,
1274 but don't hold your breath.)
1276 Therefore, you should take care that the shell does not ask any
1277 questions when invoked from @tramp{}.  You can do this by checking the
1278 @code{TERM} environment variable, it will be set to @code{dumb} when
1279 connecting.
1281 @vindex tramp-terminal-type
1282 The variable @code{tramp-terminal-type} can be used to change this value
1283 @code{dumb}.
1285 @end table
1288 @node Windows setup hints
1289 @section Issues with Cygwin ssh
1290 @cindex Cygwin, issues
1292 This section needs a lot of work!  Please help.
1294 @cindex method smx with Cygwin
1295 @cindex smx method with Cygwin
1296 If you use the Cygwin installation of ssh (you have to explicitly select
1297 it in the installer), then it should work out of the box to just select
1298 @code{smx} as the connection method.  You can find information about
1299 setting up Cygwin in their FAQ at @uref{http://cygwin.com/faq/}.
1302 @node Usage
1303 @chapter Using @tramp
1304 @cindex using @tramp
1306 Once you have installed @tramp{} it will operate fairly transparently. You
1307 will be able to access files on any remote machine that you can log in
1308 to as though they were local.
1310 Files are specified to @tramp{} using a formalized syntax specifying the
1311 details of the system to connect to.  This is similar to the syntax used
1312 by the @command{EFS} and @command{Ange-FTP} packages.
1315 @menu
1316 * Filename Syntax::             @tramp{} filename conventions.
1317 * Multi-hop filename syntax::   Multi-hop filename conventions
1318 * Dired::                       Dired and filename completion.
1319 @end menu
1322 @node Filename Syntax
1323 @section @tramp{} filename conventions
1324 @cindex filename syntax
1325 @cindex filename examples
1327 On Emacs, the Ange-FTP and Tramp filenames use a unified syntax.  On
1328 XEmacs, EFS and Tramp use different formats for the filenames.
1329 Therefore, the following will describe the Emacs and XEmacs cases
1330 separately.
1332 On Emacs, to access the file @var{path} on the remote machine
1333 @var{machine} you would specify the filename
1334 @file{/@var{machine}:@var{path}}.  This will connect to @var{machine}
1335 and transfer the file using the default method.  @xref{Default
1336 Method}.  On XEmacs, use @file{/[@var{machine}]@var{path}}.  (The
1337 square brackets are part of the file name.)
1339 Some examples of @tramp{} filenames are shown below.  In each case,
1340 the Emacs-style filename is shown first, then the XEmacs-style
1341 filename.
1343 @table @file
1344 @item /melancholia:.emacs
1345 @itemx /[melancholia].emacs
1346 Edit the file @file{.emacs} in your home directory on the machine
1347 @code{melancholia}.
1349 @item /melancholia.danann.net:.emacs
1350 @itemx /[melancholia.danann.net].emacs
1351 This edits the same file, using the fully qualified domain name of
1352 the machine.
1354 @item /melancholia:~/.emacs
1355 @itemx /[melancholia]~/.emacs
1356 This also edits the same file --- the @file{~} is expanded to your
1357 home directory on the remote machine, just like it is locally.
1359 @item /melancholia:~daniel/.emacs
1360 @itemx /[melancholia]~daniel/.emacs
1361 This edits the file @file{.emacs} in the home directory of the user
1362 @code{daniel} on the machine @code{melancholia}. The @file{~<user>}
1363 construct is expanded to the home directory of that user on the remote
1364 machine.
1366 @item /melancholia:/etc/squid.conf
1367 @itemx /[melancholia]/etc/squid.conf
1368 This edits the file @file{/etc/squid.conf} on the machine
1369 @code{melancholia}.
1371 @end table
1373 Unless you specify a different name to use, @tramp{} will use the current
1374 local user name as the remote user name to log in with. If you need to
1375 log in as a different user, you can specify the user name as part of the
1376 filename.
1378 On Emacs, to log in to the remote machine as a specific user, you use
1379 the syntax @file{/@var{user}@@@var{machine}:/path/to.file}.  On
1380 XEmacs, use @file{/[@var{user}@@@var{machine}]/path/to.file}.  That
1381 means that connecting to @code{melancholia} as @code{daniel} and
1382 editing @file{.emacs} in your home directory you would specify
1383 @file{/daniel@@melancholia:.emacs} on Emacs and
1384 @file{/[daniel@@melancholia].emacs} on XEmacs.
1387 It is also possible to specify other file transfer methods
1388 (@pxref{Default Method}) as part of the filename.  On Emacs, this is
1389 done by puttig the method before the user and host name, as in
1390 @file{/@var{method}:} (note the trailing colon).  On XEmacs, it is
1391 done by replacing the initial @file{/[} with @file{/[<method>/}.
1392 (Note the trailing slash!)  The user, machine and file specification
1393 remain the same.
1395 So, to connect to the machine @code{melancholia} as @code{daniel},
1396 using the @option{su} method to transfer files, and edit @file{.emacs}
1397 in my home directory I would specify the filename
1398 @file{/su:daniel@@melancholia:.emacs} on Emacs and
1399 @file{/[su/daniel@@melancholia].emacs} on XEmacs.
1402 @node Multi-hop filename syntax
1403 @section Multi-hop filename conventions
1404 @cindex filename syntax for multi-hop files
1405 @cindex multi-hop filename syntax
1407 The syntax of multi-hop file names is necessarily slightly different
1408 than the syntax of other @tramp{} file names.  Here's an example multi-hop
1409 file name, first in Emacs syntax and then in XEmacs syntax:
1411 @file{/multi:rsh:out@@gate:telnet:kai@@real.host:/path/to.file}
1412 @file{/[multi/rsh:out@@gate/telnet:kai@@real.host]/path/to.file}
1414 This is quite a mouthful.  So let's go through it step by step.  The
1415 file name consists of three parts.  On Emacs, the parts are separated
1416 by colons, on XEmacs they are separated by slashes and square
1417 brackets.  The first part is @file{/multi:} (or @file{/[multi}), the
1418 method specification.  The second part is
1419 @file{rsh:out@@gate:telnet:kai@@real.host} (or
1420 @file{rsh:out@@gate/telnet:kai@@real.host}) and specifies the hops.
1421 (Yes, on Emacs the second part may contain even more colons, so that's why
1422 this file name has more than two colons in it.)  The final part is
1423 @file{/path/to.file} and specifies the file name on the remote host.
1425 The first part and the final part should be clear.  @ref{Multi-hop
1426 Methods}, for a list of alternatives for the method specification.
1428 The second part can be subdivided again into components, so-called hops.
1429 In the above file name, there are two hops, @file{rsh:out@@gate} and
1430 @file{telnet:kai@@real.host}.
1432 Each hop can @emph{again} be subdivided into (three) components, the
1433 @dfn{hop method}, the @dfn{user name} and the @dfn{host name}.  The
1434 meaning of the second and third component should be clear, and the hop
1435 method says what program to use to perform that hop.
1437 The first hop, @file{rsh:out@@gate}, says to use @command{rsh} to log in
1438 as user @code{out} to the host @code{gate}.  Starting at that host, the
1439 second hop, @file{telnet:kai@@real.host}, says to use @command{telnet}
1440 to log in as user @code{kai} to host @code{real.host}.
1442 @xref{Multi-hop Methods}, for a list of possible hop method values.  The
1443 variable @var{tramp-multi-connection-function-alist} contains the list of
1444 possible hop methods and information on how to execute them, should you
1445 want to add your own.
1448 @node Dired
1449 @section Dired and filename completion
1450 @cindex dired
1451 @cindex filename completion
1453 @tramp{} works transparently with dired, enabling you to use this powerful
1454 file management tool to manage files on any machine you have access to
1455 over the Internet.
1457 Filename completion also works with @tramp{} for files on remote machines
1458 although there is no completion for user names or machine names at this
1459 stage.
1461 As filename completion needs to fetch the listing of files from the
1462 remote machine, this feature is sometimes fairly slow.  As @tramp{} does not
1463 yet cache the results of directory listing, there is no gain in
1464 performance the second time you complete filenames.
1466 If you need to browse a directory tree, Dired is a better choice, at
1467 present, than filename completion.  Dired has its own cache mechanism
1468 and will only fetch the directory listing once.
1471 @node Bug Reports
1472 @chapter Reporting Bugs and Problems
1473 @cindex bug reports
1475 Bugs and problems with @tramp{} are actively worked on by the development
1476 team. Feature requests and suggestions are also more than welcome.
1478 The @tramp{} mailing list is a great place to get information on working
1479 with @tramp{}, solving problems and general discussion and advice on topics
1480 relating to the package.
1482 The  mailing list is at @email{tramp-devel@@mail.freesoftware.fsf.org}.
1483 Messages sent to this address go to all the subscribers. This is
1484 @emph{not} the address to send subscription requests to.
1486 For help on subscribing to the list, send mail to the administrative
1487 address, @email{tramp-devel-request@@mail.freesoftware.fsf.org}, with the
1488 subject @samp{help}.
1490 To report a bug in @tramp{}, you should execute @kbd{M-x tramp-bug}. This
1491 will automatically generate a buffer with the details of your system and
1492 @tramp{} version.
1494 When submitting a bug report, please try to describe in excruciating
1495 detail the steps required to reproduce the problem, the setup of the
1496 remote machine and any special conditions that exist.
1498 If you can identify a minimal test case that reproduces the problem,
1499 include that with your bug report. This will make it much easier for the
1500 development team to analyze and correct the problem.
1502 @node Frequently Asked Questions
1503 @chapter Frequently Asked Questions
1504 @cindex frequently asked questions
1505 @cindex FAQ
1507 @itemize @bullet
1508 @item
1509 Where can I get the latest @tramp{}?
1511 @tramp{} is available at
1512 @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/tramp.tar.gz}.
1513 There is also a Savannah project page, at
1514 @uref{https://savannah.gnu.org/projects/tramp/}.
1517 @item
1518 Which systems does it work on?
1520 The package has been used successfully on Emacs 20 and Emacs 21, as well
1521 as XEmacs 21.  XEmacs 20 is more problematic, see the notes in
1522 @file{tramp.el}.  I don't think anybody has really tried it on Emacs 19.
1524 The package was intended to work on Unix, and it really expects a
1525 Unix-like system on the remote end, but some people seemed to have some
1526 success getting it to work on NT Emacs.
1528 There are some informations on Tramp on NT at the following URL; many
1529 thanks to Joe Stoy for providing the information:
1530 @uref{ftp://ftp.comlab.ox.ac.uk/tmp/Joe.Stoy/}
1532 The above mostly contains patches to old ssh versions; Tom Roche has a
1533 Web page with instructions:
1534 @uref{http://www4.ncsu.edu/~tlroche/plinkTramp.html}
1536 ??? Is the XEmacs info correct?
1538 ??? Can somebody provide some information for getting it to work on NT
1539 Emacs?  I think there was some issue with @command{ssh}?
1542 @item
1543 I can't stop EFS starting with XEmacs
1545 Not all the older versions of @tramp{} supported XEmacs correctly. The
1546 first thing to do is to make sure that you have the latest version of
1547 @tramp{} installed.
1549 If you do, please try and find out exactly the conditions required for
1550 the @code{EFS} handlers to fire. If you can, putting a breakpoint on
1551 @code{efs-ftp-path} and sending in the stack trace along with your bug
1552 report would make it easier for the developers to work out what is going
1553 wrong.
1556 @item
1557 File name completion does not work with @tramp{}
1559 When you log in to the remote machine, do you see the output of
1560 @command{ls} in color? If so, this may be the cause of your problems.
1562 @command{ls} outputs @acronym{ANSI} escape sequences that your terminal
1563 emulator interprets to set the colors. These escape sequences will
1564 confuse @tramp{} however.
1566 In your @file{.bashrc}, @file{.profile} or equivalent on the remote
1567 machine you probably have an alias configured that adds the option
1568 @option{--color=yes} or @option{--color=auto}.
1570 You should remove that alias and ensure that a new login @emph{does not}
1571 display the output of @command{ls} in color. If you still cannot use
1572 filename completion, report a bug to the @tramp{} developers.
1575 @item
1576 File name completion does not work in large directories
1578 @tramp{} uses globbing for some operations.  (Globbing means to use the
1579 shell to expand wildcards such as `*.c'.)  This might create long
1580 command lines, especially in directories with many files.  Some shell
1581 choke on long command lines, or don't cope well with the globbing
1582 itself.
1584 If you have a large directory on the remote end, you may wish to execute
1585 a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs.
1586 Note that you must first start the right shell, which might be
1587 @command{/bin/sh}, @command{ksh} or @command{bash}, depending on which
1588 of those supports tilde expansion.
1591 @item
1592 What kinds of systems does @tramp{} work on
1594 @tramp{} really expects the remote system to be a Unix-like system.  The
1595 local system should preferably be Unix-like, as well, but @tramp{} might
1596 work on NT with some tweaking.
1599 @item
1600 How can I get notified when @tramp{} file transfers are complete?
1602 The following snippet can be put in your @file{~/.emacs} file.  It makes
1603 Emacs beep after reading from or writing to the remote host.
1605 @lisp
1606 (defadvice tramp-handle-write-region
1607   (after tramp-write-beep-advice activate)
1608  " make tramp beep after writing a file."
1609  (interactive)
1610  (beep))
1611 (defadvice tramp-handle-do-copy-or-rename-file
1612   (after tramp-copy-beep-advice activate)
1613  " make tramp beep after copying a file."
1614  (interactive)
1615  (beep))
1616 (defadvice tramp-handle-insert-file-contents
1617   (after tramp-copy-beep-advice activate)
1618  " make tramp beep after copying a file."
1619  (interactive)
1620  (beep))
1621 @end lisp
1624 @item
1625 There's this @file{~/.sh_history} file on the remote host which keeps
1626 growing and growing.  What's that?
1628 Sometimes, @tramp{} starts @code{ksh} on the remote host for tilde
1629 expansion.  Maybe @code{ksh} saves the history by default.  @tramp{}
1630 tries to turn off saving the history, but maybe you have to help.  For
1631 example, you could put this in your @file{.kshrc}:
1633 @example
1634 if [ -f $HOME/.sh_history ] ; then
1635    /bin/rm $HOME/.sh_history
1637 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
1638    unset HISTFILE
1640 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
1641    unset HISTSIZE
1643 @end example
1645 @end itemize
1648 @c For the developer
1649 @node Version Control
1650 @chapter The inner workings of remote version control
1652 Unlike EFS and Ange-FTP, @tramp{} has full shell access to the remote
1653 machine. This makes it possible to provide version control for files
1654 accessed under @tramp{}.
1656 The actual version control binaries must be installed on the remote
1657 machine, accessible in the directories specified in
1658 @var{tramp-remote-path}.
1660 This transparent integration with the version control systems is one of
1661 the most valuable features provided by @tramp{}, but it is far from perfect.
1662 Work is ongoing to improve the transparency of the system.
1664 @menu
1665 * Version Controlled Files::    Determining if a file is under version control.
1666 * Remote Commands::             Executing the version control commands on the remote machine.
1667 * Changed workfiles::           Detecting if the working file has changed.
1668 * Checking out files::          Bringing the workfile out of the repository.
1669 * Miscellaneous Version Control::  Things related to Version Control that don't fit elsewhere
1670 @end menu
1673 @node Version Controlled Files
1674 @section Determining if a file is under version control
1676 The VC package uses the existence of on-disk revision control master
1677 files to determine if a given file is under revision control. These file
1678 tests happen on the remote machine through the standard @tramp{} mechanisms.
1681 @node Remote Commands
1682 @section Executing the version control commands on the remote machine
1684 There are no hooks provided by VC to allow intercepting of the version
1685 control command execution. The calls occur through the
1686 @code{call-process} mechanism, a function that is somewhat more
1687 efficient than the @code{shell-command} function but that does not
1688 provide hooks for remote execution of commands.
1690 To work around this, the functions @code{vc-do-command} and
1691 @code{vc-simple-command} have been advised to intercept requests for
1692 operations on files accessed via @tramp{}.
1694 In the case of a remote file, the @code{shell-command} interface is
1695 used, with some wrapper code, to provide the same functionality on the
1696 remote machine as would be seen on the local machine. 
1699 @node Changed workfiles
1700 @section Detecting if the working file has changed
1702 As there is currently no way to get access to the mtime of a file on a
1703 remote machine in a portable way, the @code{vc-workfile-unchanged-p}
1704 function is advised to call an @tramp{} specific function for remote files.
1706 The @code{tramp-vc-workfile-unchanged-p} function uses the functioning VC
1707 diff functionality to determine if any changes have occurred between the
1708 workfile and the version control master.
1710 This requires that a shell command be executed remotely, a process that
1711 is notably heavier-weight than the mtime comparison used for local
1712 files. Unfortunately, unless a portable solution to the issue is found,
1713 this will remain the cost of remote version control.
1716 @node Checking out files
1717 @section Bringing the workfile out of the repository
1719 VC will, by default, check for remote files and refuse to act on them
1720 when checking out files from the repository. To work around this
1721 problem, the function @code{vc-checkout} knows about @tramp{} files and
1722 allows version control to occur.
1725 @node Miscellaneous Version Control
1726 @section Things related to Version Control that don't fit elsewhere
1728 Minor implementation details, &c.
1730 @menu
1731 * Remote File Ownership::       How VC determines who owns a workfile.
1732 * Back-end Versions::           How VC determines what release your RCS is.
1733 @end menu
1736 @node Remote File Ownership
1737 @subsection How VC determines who owns a workfile
1739 Emacs provides the @code{user-full-name} function to return the login name
1740 of the current user as well as mapping from arbitrary user id values
1741 back to login names. The VC code uses this functionality to map from the
1742 uid of the owner of a workfile to the login name in some circumstances.
1744 This will not, for obvious reasons, work if the remote system has a
1745 different set of logins. As such, it is necessary to delegate to the
1746 remote machine the job of determining the login name associated with a
1747 uid.
1749 Unfortunately, with the profusion of distributed management systems such
1750 as @code{NIS}, @code{NIS+} and @code{NetInfo}, there is no simple,
1751 reliable and portable method for performing this mapping.
1753 Thankfully, the only place in the VC code that depends on the mapping of
1754 a uid to a login name is the @code{vc-file-owner} function. This returns
1755 the login of the owner of the file as a string.
1757 This function has been advised to use the output of @command{ls} on the
1758 remote machine to determine the login name, delegating the problem of
1759 mapping the uid to the login to the remote system which should know more
1760 about it than I do.
1763 @node Back-end Versions
1764 @subsection How VC determines what release your RCS is
1766 VC needs to know what release your revision control binaries you are
1767 running as not all features VC supports are available with older
1768 versions of @command{rcs(1)}, @command{cvs(1)} or @command{sccs(1)}.
1770 The default implementation of VC determines this value the first time it
1771 is needed and then stores the value globally to avoid the overhead of
1772 executing a process and parsing its output each time the information is
1773 needed.
1775 Unfortunately, life is not quite so easy when remote version control
1776 comes into the picture. Each remote machine may have a different version
1777 of the version control tools and, while this is painful, we need to
1778 ensure that unavailable features are not used remotely.
1780 To resolve this issue, @tramp{} currently takes the sledgehammer
1781 approach of making the release values of the revision control tools
1782 local to each @tramp{} buffer, forcing VC to determine these values
1783 again each time a new file is visited.
1785 This has, quite obviously, some performance implications. Thankfully,
1786 most of the common operations performed by VC do not actually require
1787 that the remote version be known. This makes the problem far less
1788 apparent.
1790 Eventually these values will be captured by @tramp{} on a system by
1791 system basis and the results cached to improve performance.
1794 @node Files directories and paths
1795 @chapter How file names, directories and paths are mangled and managed.
1797 @menu
1798 * Path deconstruction::         Breaking a path into its components.
1799 @end menu
1802 @node Path deconstruction
1803 @section Breaking a path into its components.
1805 @tramp{} filenames are somewhat different, obviously, to ordinary path
1806 names. As such, the lisp functions @code{file-name-directory} and
1807 @code{file-name-nondirectory} are overridden within the @tramp{} package.
1809 Their replacements are reasonably simplistic in their approach. They
1810 dissect the filename, call the original handler on the remote path and
1811 then rebuild the @tramp{} path with the result.
1813 This allows the platform specific hacks in the original handlers to take
1814 effect while preserving the @tramp{} path information.
1817 @node Issues
1818 @chapter Debatable Issues and What Was Decided
1820 @itemize @bullet
1821 @item The uuencode method does not always work.
1823 Due to the design of @tramp{}, the encoding and decoding programs need to
1824 read from stdin and write to stdout.  On some systems, @code{uudecode -o
1825 -} will read stdin and write the decoded file to stdout, on other
1826 systems @code{uudecode -p} does the same thing.  But some systems have
1827 uudecode implementations which cannot do this at all---it is not
1828 possible to call these uudecode implementations with suitable parameters
1829 so that they write to stdout.
1831 Of course, this could be circumvented: the @code{begin foo 644} line
1832 could be rewritten to put in some temporary file name, then
1833 @code{uudecode} could be called, then the temp file could be printed and
1834 deleted.
1836 But I have decided that this is too fragile to reliably work, so on some
1837 systems you'll have to do without the uuencode methods.
1839 @item @tramp{} does not work on XEmacs 20.
1841 This is because it requires the macro @code{with-timeout} which does not
1842 appear to exist in XEmacs 20.  I'm somewhat reluctant to add an
1843 emulation macro to @tramp{}, but if somebody who uses XEmacs 20 steps
1844 forward and wishes to implement and test it, please contact me or the
1845 mailing list.
1847 @item The @tramp{} filename syntax differs between Emacs and XEmacs.
1849 The Emacs maintainers wish to use a unified filename syntax for
1850 Ange-FTP and @tramp{} so that users don't have to learn a new
1851 syntax.  It is sufficient to learn some extensions to the old syntax.
1853 For the XEmacs maintainers, the problems caused from using a unified
1854 filename syntax are greater than the gains.  The XEmacs package
1855 system uses EFS for downloading new packages.  So, obviously, EFS has
1856 to be installed from the start.  If the filenames were unified, Tramp
1857 would have to be installed from the start, too.
1859 @end itemize
1862 @c End of tramp.texi - the TRAMP User Manual
1863 @bye
1865 @c TODO
1867 @c * Say something about the .login and .profile files of the remote
1868 @c   shells.
1869 @c * Explain how tramp.el works in principle: open a shell on a remote
1870 @c   host and then send commands to it.
1871 @c * Mention that bookmarks are a cool feature to go along with Tramp.
1872 @c * Make terminology "inline" vs "out-of-band" consistent.
1873 @c   It seems that "external" is also used instead of "out-of-band".