comparison man/tramp.texi @ 47576:b31c8ab7336a

Sync with version 2.0.20. Lengthy ChangeLog follows: 2002-09-22 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> Version 2.0.20 released. 2002-09-20 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> * net/tramp.el (tramp-completion-function-alist): Escape open paren in docstring. (tramp-user-regexp, tramp-host-regexp): Allow empty strings. (tramp-handle-insert-file-contents): Call tramp-message-for-buffer instead of tramp-message. (tramp-open-connection-rsh): Handle empty string as user name. (tramp-open-connection-su): Handle empty string as host name. Handle nil user name. (tramp-handle-file-local-copy, tramp-handle-write-region) (tramp-completion-handle-file-name-all-completions) (tramp-open-connection-telnet, tramp-open-connection-rsh) (tramp-open-connection-su, tramp-post-connection) (tramp-maybe-open-connection, tramp-method-out-of-band-p) (tramp-get-connection-function, tramp-get-remote-sh) (tramp-get-rsh-program, tramp-get-rsh-args) (tramp-get-rcp-program, tramp-get-rcp-args) (tramp-get-rcp-keep-date-arg, tramp-get-su-program) (tramp-get-su-args, tramp-get-telnet-program) (tramp-get-telnet-args): Use `tramp-find-method', perhaps require additional args USER, HOST. (tramp-action-password, tramp-open-connection-telnet) (tramp-open-connection-su, tramp-open-connection-multi) (tramp-method-out-of-band-p): `tramp-method-out-of-band-p' now takes USER and HOST arguments, to be able to use `tramp-find-method'. Update callers. (tramp-find-method): New function. 2002-09-20 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-insert-directory): Handle "--dired" in SWITCHES (by removing it). 2002-09-18 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-file-name-handler): Add `file-remote-p' property. 2002-09-17 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (top-level): Maybe autoload uudecode-decode-region. 2002-09-16 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-bug): Add tramp-methods. 2002-09-16 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-methods): Update docstring: tramp-encoding-command, tramp-decoding-command, tramp-encoding-function and tramp-decoding-function are not parameters anymore. (tramp-uuencode-region): Autoload it. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> Version 2.0.19 released. * net/tramp-uu.el: New file, implements uuencode in Lisp. * net/tramp.el (tramp-coding-commands): Use `tramp-uuencode-region' as local encoder for the uuencode based entries. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-write-region): Wrong parens. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> Version 2.0.18 released. * net/tramp.el (tramp-perl-decode): Perl changes to accomodate older versions of Perl. Now tested with 5.004. Suggestion from Michael Albinus. 2002-09-12 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-find-inline-encoding): Call tramp-call-local-coding-command with nil for INPUT and OUTPUT. (tramp-call-local-coding-command): OUTPUT equals nil means to discard the output. INPUT equals nil means /dev/null. 2002-09-12 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-encoding-shell): Default to environment variable COMSPEC on Windows. (tramp-handle-write-region): More debugging output. (tramp-find-inline-encoding): Ditto. 2002-09-11 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-handle-file-name-all-completions): Define `result1'. (tramp-parse-hosts-group): Discard IPv6 entries. 2002-09-11 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> * net/tramp.el (tramp-post-connection): Only send Perl mime-encode/decode implementations when using inline method. (tramp-handle-file-local-copy) (tramp-handle-write-region, tramp-post-connection) (tramp-coding-commands, tramp-find-inline-encoding): For the inline encodings, distinguish between local and remote commands, instead of between commands and functions. (The local commands can be functions, too.) If the local host is a Windows machine, we can't expect the same commands to work there as on the remote host. (tramp-call-local-coding-command): New function for calling local encoding and decoding commands. (tramp-set-remote-encoding, tramp-get-remote-encoding) (tramp-set-remote-decoding, tramp-get-remote-decoding) (tramp-set-local-encoding, tramp-get-local-encoding) (tramp-set-local-decoding, tramp-get-local-decoding): New functions. (tramp-get-encoding-command, tramp-set-encoding-command) (tramp-get-decoding-command, tramp-set-decoding-command) (tramp-get-encoding-function, tramp-set-encoding-function) (tramp-get-decoding-function, tramp-set-decoding-function): Old functions, removed. 2002-09-10 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-open-connection-setup-interactive-shell): Change command to invoke /bin/sh slightly to make it compatible with the `rc' shell. Suggested by Daniel Pittman. 2002-09-10 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-handle-write-region): Added missing `)'. Hope it's the right place. 2002-09-09 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-open-connection-setup-interactive-shell): Do "exec env PS1='$ ' /bin/sh" instead of just "exec /bin/sh" in order to get a sane shell prompt. If people have ${CWD}, say, in their shell prompt, then the default login shell might display something harmless, but the /bin/sh will display a dollar sign which confused the subsequent prompt recognition. (tramp-multi-action-password): More debugging output. (tramp-encoding-shell): Renamed from tramp-sh-program. More documentation. Default to cmd.exe on Windows NT. (tramp-encoding-command-switch): New variable. Use instead of hard-wired "-c" which is only good for /bin/sh. (tramp-encoding-reads-stdin): New variable. If t, commands are called like "/bin/sh -c COMMAND <INPUT", if nil, they are called like "/bin/sh -c COMMAND INPUT", ie the input file is the last argument. (tramp-multi-sh-program): Always default to tramp-encoding-shell. (tramp-handle-file-local-copy, tramp-handle-write-region): Respect tramp-encoding-shell and friends. (tramp-find-inline-encoding): Use new-style calls for checking if the local commands work. 2002-09-07 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-methods): Remove `tramp-completion-function' entries. They are handled now by `tramp-completion-function-alist'. (tramp-completion-function): Defvar removed. I've never used it. Hmm. (tramp-get-completion-function) (tramp-get-completion-rsh, tramp-get-completion-ssh) (tramp-get-completion-telnet, tramp-get-completion-su): Functions removed as well. Not necessary any longer due to extended customization means. (tramp-completion-function-alist): New defcustom. Holds all FUNCTION FILE pairs used for user and host name completion relevant for METHOD. (tramp-completion-function-alist-rsh) (tramp-completion-function-alist-ssh) (tramp-completion-function-alist-telnet) (tramp-completion-function-alist-su): Defconst for initializing `tramp-completion-function-alist'. Unfortunately, mainly UNIX-like values are known for me until now. Needs to be completed for at least VMS++ like operating systems. (tramp-set-completion-function) (tramp-get-completion-function): New functions for configuration of `tramp-completion-function-alist'. The old definition of `tramp-get-completion-function' has been discarded. (tramp-completion-handle-file-name-all-completions): Change function call for user/host completion according to definition in `tramp-completion-function-alist'. (tramp-parse-passwd): Added exception handling for "root", because `tramp-get-completion-su' (the previous place for this stuff) doesn't exist any longer. 2002-09-07 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-enter-password): Use `tramp-password-end-of-line' to terminate the line. (tramp-bug): Include new variable `tramp-password-end-of-line'. (tramp-password-end-of-line): New variable. People who use plink under Windows might have to issue "\r\n" after the password, but they need to send just "\n" after the other commands. So this variable was introduced to complement `tramp-rsh-end-of-line'. (tramp-wait-for-output, tramp-post-connection): Allow "\r" at end of line of the output delimiter. 2002-09-06 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-file-local-copy, tramp-find-shell) (tramp-open-connection-setup-interactive-shell): Add some comments about Douglas Grey Stephen's suggestions to make Tramp work better with plink under Windows. I'm not sure what to think of them, but now I have a guinea pig to try it out on. Said guinea pig is having other problems, though... Also remove some commented-out code. 2002-09-06 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods): Algorithm slightly tuned. (tramp-get-completion-user-host): Accept user names as they are if typed until "@". (tramp-completion-mode): Replace `last-input-char' by modern `last-input-event'. Check for `event-modifiers'. 2002-09-06 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (file-expand-wildcards): Corrected check to see if advising is necessary. 2002-09-05 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-postfix-single-method-format) (tramp-postfix-multi-method-format) (tramp-postfix-multi-hop-format) (tramp-postfix-user-format): New format strings. (tramp-postfix-single-method-regexp) (tramp-postfix-multi-method-regexp) (tramp-postfix-multi-hop-regexp) (tramp-postfix-user-regexp) (tramp-make-multi-tramp-file-format) (tramp-make-tramp-file-name): Apply them. (tramp-completion-handle-file-name-all-completions): Fix for invoking ange-ftp in case of "/ftp:xxx" file names. 2002-09-04 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-prefix-format) (tramp-postfix-host-format): New format strings. (tramp-prefix-regexp, tramp-method-regexp) (tramp-postfix-single-method-regexp) (tramp-postfix-multi-method-regexp) (tramp-postfix-multi-hop-regexp) (tramp-user-regexp, tramp-postfix-user-regexp) (tramp-host-regexp, tramp-postfix-host-regexp) (tramp-path-regexp): New atomar regular expressions. If corresponding format strings exist, derived from them. (tramp-file-name-structure) (tramp-multi-file-name-structure) (tramp-multi-file-name-hop-structure) (tramp-make-multi-tramp-file-format) (tramp-completion-mode) (tramp-completion-dissect-file-name) (tramp-parse-rhosts-group) (tramp-parse-shosts-group) (tramp-parse-hosts-group) (tramp-parse-passwd-group): Apply these expressions. (tramp-file-name-structure-unified) (tramp-file-name-structure-separate) (tramp-make-tramp-file-format-unified) (tramp-make-tramp-file-format-separate) (tramp-make-tramp-file-format) (tramp-make-tramp-file-user-nil-format-unified) (tramp-make-tramp-file-user-nil-format-separate) (tramp-make-tramp-file-user-nil-format) (tramp-multi-file-name-structure-unified) (tramp-multi-file-name-structure-separate) (tramp-multi-file-name-hop-structure-unified) (tramp-multi-file-name-hop-structure-separate) (tramp-make-multi-tramp-file-format-unified) (tramp-make-multi-tramp-file-format-separate): Removed. (tramp-make-tramp-file-name): Allow partial tramp file names. Generate tramp file format on-the-fly depending on parameters. Apply atomar format strings resp expressions. (tramp-get-completion-methods) (tramp-get-completion-user-host): Apply `tramp-make-tramp-file-name'. (tramp-parse-hosts-group): Take all host names and IP addresses into account. (tramp-bug): Remove `tramp-make-tramp-file-format'. 2002-09-01 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-methods): Add `tramp-completion-function' for "su" and "sudo". (tramp-get-completion-telnet): Implement it. (tramp-parse-hosts) (tramp-parse-hosts-group) (tramp-get-completion-su) (tramp-parse-passwd) (tramp-parse-passwd-group): New functions. 2002-08-31 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-mode): Check for `last-input-char'. (tramp-completion-file-name-handler-alist): Add handler for `file-exists-p. (tramp-completion-handle-file-exists-p): New function. (tramp-completion-handle-file-name-completion): Simplified. (tramp-completion-dissect-file-name): Regexp's reorganised. (tramp-completion-handle-file-name-all-completions): Call completion-function only if `user' or `host' is given. (tramp-get-completion-user-host): New function. (tramp-get-completion-rsh) (tramp-get-completion-ssh): Apply it. 2002-08-29 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-handler-alist): Add handler for `expand-file-name'. (tramp-completion-handle-expand-file-name): New function. 2002-08-26 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-mode): New function. (tramp-completion-handle-file-name-directory) (tramp-completion-handle-file-name-all-completions): Apply it. (tramp-methods): Remove double definition of `ssh1-old' and `ssh2-old'. (tramp-point-at-eol): New defalias. (tramp-parse-rhosts-group) (tramp-parse-shosts-group):: Apply it. 2002-08-25 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods) (tramp-get-completion-rsh) (tramp-get-completion-ssh): Add "[" for Xemacs. (tramp-completion-file-name-regexp-separate): Expression adapted. (tramp-completion-file-name-handler-alist): Add handler for `file-name-directory' and `file-name-nondirectory'. (tramp-completion-handle-file-name-directory) (tramp-completion-handle-file-name-nondirectory) (tramp-completion-run-real-handler): New functions. (tramp-completion-file-name-handler) (tramp-completion-handle-file-name-all-completions): Apply `tramp-completion-run-real-handler'. (tramp-parse-rhosts) (tramp-parse-shosts): Use `with-temp-buffer'. `result? renamed to `res' (otherwise side effects in XEmacs). 2002-08-24 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-regexp) (tramp-completion-file-name-handler-alist) (tramp-flatten-list) (tramp-completion-dissect-file-name) (tramp-get-completion-rsh) (tramp-parse-rhosts) (tramp-parse-rhosts-group) (tramp-get-completion-ssh): Doc string tuned. (tramp-methods): Doc string and custom type extended for `tramp-completion-function'. (tramp-completion-function): Variable added. Is it really used? Other variables like `tramp-completion-function' aren't used. (tramp-completion-file-name-handler-alist): Add handler for `file-name-completion'. (tramp-completion-handle-file-name-completion): New function. 2002-08-18 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-parse-rhosts) (tramp-parse-rhosts-group) (tramp-parse-shosts) (tramp-parse-shosts-group): New functions. 2002-08-17 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-dissect-file-name) (tramp-completion-dissect-file-name1): New functions. 2002-08-16 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-function) (tramp-get-completion-rsh) (tramp-get-completion-ssh) (tramp-get-completion-telnet): New functions. (tramp-methods): Add `tramp-completion-function' for all methods. 2002-08-15 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods): New function. (tramp-find-default-method): Allow host to be nil (like user). 2002-08-14 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate) (tramp-completion-file-name-regexp) (tramp-completion-file-name-handler-alist): New defcustoms. (tramp-completion-file-name-handler): New function. Add `tramp-completion-file-name-handler' to `file-name-handler-alist'. (tramp-run-real-handler): Add `tramp-completion-file-name-handler' to `inhibit-file-name-handlers'. (tramp-completion-handle-file-name-all-completions) (tramp-completion-handle-file-name-completion): New functions. 2002-08-12 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-invoke-ange-ftp): `tramp-disable-ange-ftp' must be called again after activating `ange-ftp'. (tramp-ange-ftp-file-name-p): Check for Xemacs. 2002-08-08 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-do-copy-or-rename-file): Don't pass KEEP-DATE to tramp-invoke-ange-ftp 'rename. (tramp-handle-write-region): Don't pass LOCKNAME and CONFIRM to tramp-invoke-ange-ftp 'write-region. (tramp-handle-set-file-modes): Change order of FILENAME and MODE passing to tramp-invoke-ange-ftp 'set-file-modes. (tramp-flatten-list): New function. Maybe this functionality does exist already elsewhere in the libraries. (tramp-invoke-ange-ftp): Apply `tramp-flatten-list' to parameter list in order to avoid nested lists, f.e. when invoked from `tramp-handle-dired-call-process'. 2002-09-05 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-chunksize): New kluge variable. (tramp-send-region): If tramp-chunksize is non-nil, send region in parts and sleep 0.1 seconds between chunks. 2002-09-03 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-insert-directory): Use `insert-buffer-substring' instead of `insert-buffer', which is not supposed to be used from Lisp. Remember old point in a variable instead of using `mark'. Suggestion from Stefan Monnier. (tramp-unified-filenames): New variable. Use it in default value of other filename variables. (file-expand-wildcards): Don't advise unless "[" and "]" are used in the filename format. 2002-09-01 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-methods): Remove duplicate definition of ssh1-old and ssh2-old.
author Kai Großjohann <kgrossjo@eu.uu.net>
date Sun, 22 Sep 2002 13:23:36 +0000
parents 82d113655734
children 20336ef6b20a
comparison
equal deleted inserted replaced
47575:4d9f899a5963 47576:b31c8ab7336a
6 @c %**end of header 6 @c %**end of header
7 7
8 @c This is *so* much nicer :) 8 @c This is *so* much nicer :)
9 @footnotestyle end 9 @footnotestyle end
10 10
11 @c In the Tramp CVS, the version number is auto-frobbed from the
12 @c Makefile, so you should edit the top-level Makefile to change
13 @c the version number.
14 @macro trampver{}
15 2.0.20
16 @end macro
11 17
12 @c Entries for @command{install-info} to use 18 @c Entries for @command{install-info} to use
13 @dircategory Emacs 19 @dircategory Emacs
14 @direntry 20 @direntry
15 * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol 21 * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
19 @c Macro to make formatting of the tramp program name consistent. 25 @c Macro to make formatting of the tramp program name consistent.
20 @macro tramp 26 @macro tramp
21 @sc{tramp} 27 @sc{tramp}
22 @end macro 28 @end macro
23 29
30 @c Distinguish between GNU Emacs and XEmacs. Derived from the
31 @c Makefile variable $(EMACS-ID). Valid values are `emacs' and `xemacs'.
32 @set emacs
33
34 @c Some flags which make the text independent on the (X)Emacs flavor.
35 @c GNU Emacs values.
36 @ifset emacs
37 @set emacs-name Emacs
38 @set emacs-dir emacs
39 @set ftp-package-name Ange-FTP
40 @set tramp-prefix /
41 @set tramp-prefix-single-hop
42 @set tramp-postfix :
43 @set tramp-postfix-single-hop :
44 @set tramp-postfix-multi-hop :
45 @end ifset
46
47 @c XEmacs counterparts.
48 @ifset xemacs
49 @set emacs-name XEmacs
50 @set emacs-dir xemacs
51 @set ftp-package-name EFS
52 @set tramp-prefix /[
53 @set tramp-prefix-single-hop [
54 @set tramp-postfix ]
55 @set tramp-postfix-single-hop /
56 @set tramp-postfix-multi-hop :
57 @end ifset
58
59 @c Macros for formatting a filename.
60 @c trampfn is for a full filename, trampfnmhp means method, host, path
61 @c were given, and so on.
62 @macro trampfn(method, user, host, path)
63 @value{tramp-prefix}@value{method}@value{user}@@@value{host}@value{tramp-postfix}@value{path}
64 @end macro
65
66 @tex
67
68 @titlepage
69 @title @tramp{} version @trampver{} User Manual
70
71 @author by Daniel Pittman
72 @author based on documentation by Kai Gro@ss{}johann
73 @page
74
75 @end titlepage
76 @page
77
78 @end tex
79
80 @ifnottex
81 @node Top, Overview, (dir), (dir)
82 @top @tramp{} version @trampver{} User Manual
83
84 This file documents @tramp{} version @trampver{}, a remote file
85 editing package for @value{emacs-name}.
86
87 @tramp{} stands for `Transparent Remote (file) Access, Multiple
88 Protocol'. This package provides remote file editing, similar to
89 @value{ftp-package-name}.
90
91 The difference is that @value{ftp-package-name} uses FTP to transfer
92 files between the local and the remote host, whereas @tramp{} uses a
93 combination of @command{rsh} and @command{rcp} or other work-alike
94 programs, such as @command{ssh}/@command{scp}.
95
96 You can find the latest version of this document on the web at
97 @uref{http://www.freesoftware.fsf.org/tramp/}.
98
99 @ifhtml
100 This manual is also available as a @uref{tramp_ja.html, Japanese
101 translation}.
102
103 The latest release of @tramp{} is available for
104 @uref{http://savannah.gnu.org/download/tramp/,
105 download}, or you may see @ref{Obtaining @tramp{}} for more details,
106 including the CVS server details.
107
108 @tramp{} also has a @uref{https://savannah.gnu.org/projects/tramp/,
109 Savannah Project Page}.
110 @end ifhtml
111
112 There is a mailing list for @tramp{}, available at
113 @email{tramp-devel@@mail.freesoftware.fsf.org}, and archived at
114 @uref{http://www.mail-archive.com/emacs-rcp@@ls6.cs.uni-dortmund.de/} as
115 well as the usual Savannah archives.
116
117 @end ifnottex
118
119 @menu
120 * Overview:: What @tramp{} can and cannot do.
121 * Copying:: The license for this documentation.
122
123 For the end user:
124 * Obtaining @tramp{}:: How to obtain @tramp{}.
125 * History:: History of @tramp{}.
126 * Installation:: Installing @tramp{} with your @value{emacs-name}.
127 * Configuration:: Configuring @tramp{} for use.
128 * Usage:: An overview of the operation of @tramp{}.
129 * Bug Reports:: Reporting Bugs and Problems.
130 * Frequently Asked Questions:: Questions and answers from the mailing list.
131
132 For the developer:
133 * Version Control:: The inner workings of remote version control.
134 * Files directories and paths:: How file names, directories and paths are mangled and managed.
135 * Issues:: Debatable Issues and What Was Decided.
136
137 @detailmenu
138 --- The Detailed Node Listing ---
139
140 Configuring @tramp{} for use
141
142 * Connection types:: Types of connections made to remote machines.
143 * Inline methods:: Inline methods.
144 * External transfer methods:: External transfer methods.
145 * Multi-hop Methods:: Connecting to a remote host using multiple hops.
146 * Default Method:: Selecting a default method.
147 * Customizing Methods:: Using Non-Standard Methods.
148 * Customizing Completion:: Selecting config files for user/host name completion.
149 * Remote Programs:: How @tramp{} finds and uses programs on the remote machine.
150 * Remote shell setup:: Remote shell setup hints.
151 * Windows setup hints:: Issues with Cygwin ssh.
152
153 Using @tramp
154
155 * Filename Syntax:: @tramp{} filename conventions.
156 * Multi-hop filename syntax:: Multi-hop filename conventions.
157 * Filename completion:: Filename completion.
158 * Dired:: Dired.
159
160 The inner workings of remote version control
161
162 * Version Controlled Files:: Determining if a file is under version control.
163 * Remote Commands:: Executing the version control commands on the remote machine.
164 * Changed workfiles:: Detecting if the working file has changed.
165 * Checking out files:: Bringing the workfile out of the repository.
166 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere.
167
168 Things related to Version Control that don't fit elsewhere
169
170 * Remote File Ownership:: How VC determines who owns a workfile.
171 * Back-end Versions:: How VC determines what release your RCS is.
172
173 How file names, directories and paths are mangled and managed.
174
175 * Path deconstruction:: Breaking a path into its components.
176
177 @end detailmenu
178 @end menu
179
180 @node Overview
181 @chapter An overview of @tramp
182 @cindex overview
183
184 After the installation of @tramp{} into your @value{emacs-name}, you
185 will be able to access files on remote machines as though they were
186 local. Access to the remote file system for editing files, version
187 control, and @command{dired} are transparently enabled.
188
189 Your access to the remote machine can be with the @command{rsh},
190 @command{rlogin}, @command{telnet} programs or with any similar
191 connection method. This connection must pass ASCII successfully to be
192 usable but need not be 8-bit clean.
193
194 The package provides support for @command{ssh} connections out of the
195 box, one of the more common uses of the package. This allows
196 relatively secure access to machines, especially if @command{ftp}
197 access is disabled.
198
199 The majority of activity carried out by @tramp{} requires only that
200 the remote login is possible and is carried out at the terminal. In
201 order to access remote files @tramp{} needs to transfer their content
202 to the local machine temporarily.
203
204 @tramp{} can transfer files between the machines in a variety of ways.
205 The details are easy to select, depending on your needs and the
206 machines in question.
207
208 The fastest transfer methods (for large files) rely on a remote file
209 transfer package such as @command{rcp}, @command{scp} or
210 @command{rsync}. The use of these methods is only possible if the
211 file copy command does not ask for a password for the remote machine.
212
213 If the remote copy methods are not suitable for you, @tramp{} also
214 supports the use of encoded transfers directly through the shell.
215 This requires that the @command{mimencode} or @command{uuencode} tools
216 are available on the remote machine. These methods are generally
217 faster for small files.
218
219 Within these limitations, @tramp{} is quite powerful. It is worth
220 noting that, as of the time of writing, it is far from a polished
221 end-user product. For a while yet you should expect to run into rough
222 edges and problems with the code now and then.
223
224 It is finished enough that the developers use it for day to day work but
225 the installation and setup can be a little difficult to master, as can
226 the terminology.
227
228 @tramp{} is still under active development and any problems you encounter,
229 trivial or major, should be reported to the @tramp{} developers.
230 @xref{Bug Reports}.
231
232
233 @subsubheading Behind the scenes
234 @cindex behind the scenes
235 @cindex details of operation
236 @cindex how it works
237
238 This section tries to explain what goes on behind the scenes when you
239 access a remote file through @tramp{}.
240
241 Suppose you type @kbd{C-x C-f} and enter part of an @tramp{} file name,
242 then hit @kbd{@key{TAB}} for completion. Suppose further that this is
243 the first time that @tramp{} is invoked for the host in question. Here's
244 what happens:
245
246 @itemize
247 @item
248 @tramp{} discovers that it needs a connection to the host. So it
249 invokes @samp{telnet @var{host}} or @samp{rsh @var{host} -l
250 @var{user}} or a similar tool to connect to the remote host.
251 Communication with this process happens through an
252 @value{emacs-name} buffer, that is, the output from the remote end
253 goes into a buffer.
254
255 @item
256 The remote host may prompt for a login name (for @command{telnet}). The
257 login name is given in the file name, so @tramp{} sends the login name and
258 a newline.
259
260 @item
261 The remote host may prompt for a password or pass phrase (for
262 @command{rsh} or for @command{telnet} after sending the login name).
263 @tramp{} displays the prompt in the minibuffer, asking you for the
264 password or pass phrase.
265
266 You enter the password or pass phrase. @tramp{} sends it to the remote
267 host, followed by a newline.
268
269 @item
270 @tramp{} now waits for the shell prompt or for a message that the login
271 failed.
272
273 If @tramp{} sees neither of them after a certain period of time (a minute,
274 say), then it issues an error message saying that it couldn't find the
275 remote shell prompt and shows you what the remote host has sent.
276
277 If @tramp{} sees a @samp{login failed} message, it tells you so,
278 aborts the login attempt and allows you to try again.
279
280 @item
281 Suppose that the login was successful and @tramp{} sees the shell prompt
282 from the remote host. Now @tramp{} invokes @command{/bin/sh} because
283 Bourne shells and C shells have different command
284 syntaxes.@footnote{Invoking @command{/bin/sh} will fail if your login
285 shell doesn't recognize @samp{exec /bin/sh} as a valid command.
286 Maybe you use the Scheme shell @command{scsh}@dots{}}
287
288 After the Bourne shell has come up, @tramp{} sends a few commands to
289 ensure a good working environment. It turns off echoing, it sets the
290 shell prompt, and a few other things.
291
292 @item
293 Now the remote shell is up and it good working order. Remember, what
294 was supposed to happen is that @tramp{} tries to find out what files exist
295 on the remote host so that it can do filename completion.
296
297 So, @tramp{} basically issues @command{cd} and @command{ls} commands and
298 also sometimes @command{echo} with globbing. Another command that is
299 often used is @command{test} to find out whether a file is writable or a
300 directory or the like. The output of each command is parsed for the
301 necessary operation.
302
303 @item
304 Suppose you are finished with filename completion, have entered @kbd{C-x
305 C-f}, a full file name and hit @kbd{@key{RET}}. Now comes the time to
306 transfer the file contents from the remote host to the local host so
307 that you can edit them.
308
309 See above for an explanation of how @tramp{} transfers the file contents.
310
311 For inline transfers, @tramp{} issues a command like @samp{mimencode -b
312 /path/to/remote/file}, waits until the output has accumulated in the
313 buffer that's used for communication, then decodes that output to
314 produce the file contents.
315
316 For out-of-band transfers, @tramp{} issues a command like the following:
317 @example
318 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
319 @end example
320 It then reads the local temporary file @file{/tmp/tramp.4711} into a
321 buffer and deletes the temporary file.
322
323 @item
324 You now edit the buffer contents, blithely unaware of what has happened
325 behind the scenes. (Unless you have read this section, that is.) When
326 you are finished, you type @kbd{C-x C-s} to save the buffer.
327
328 @item
329 Again, @tramp{} transfers the file contents to the remote host either
330 inline or out-of-band. This is the reverse of what happens when reading
331 the file.
332
333 @end itemize
334
335 I hope this has provided you with a basic overview of what happens
336 behind the scenes when you open a file with @tramp{}.
337
338
24 @c Copying permissions, et al 339 @c Copying permissions, et al
340 @node Copying
341 @chapter Copying.
342 @cindex copying
343
25 @copying 344 @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 345 Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software
30 Foundation, Inc. 346 Foundation, Inc.
31 347
32 @quotation 348 @quotation
33 Permission is granted to copy, distribute and/or modify this document 349 Permission is granted to copy, distribute and/or modify this document
48 license to the document, as described in section 6 of the license. 364 license to the document, as described in section 6 of the license.
49 @end quotation 365 @end quotation
50 @end copying 366 @end copying
51 367
52 368
53 @tex
54
55 @titlepage
56 @title @tramp{} User Manual
57
58 @author by Daniel Pittman
59 @author based on documentation by Kai Gro@ss{}johann
60 @page
61
62 @end titlepage
63 @page
64
65 @end tex
66
67 @ifnottex
68 @node Top, Overview, (dir), (dir)
69 @top @tramp{} User Manual
70
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}.
74
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}.
79
80 You can find the latest version of this document on the web at
81 @uref{http://www.freesoftware.fsf.org/tramp/}.
82
83 @ifhtml
84 This manual is also available as a @uref{tramp_ja.html, Japanese
85 translation}.
86
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.
91
92 @tramp{} also has a @uref{https://savannah.gnu.org/projects/tramp/,
93 Savannah Project Page}.
94 @end ifhtml
95
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.
100
101 @end ifnottex
102
103 @menu
104 * Overview:: What @tramp{} can and cannot do.
105
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.
114
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::
119
120 @detailmenu
121 --- The Detailed Node Listing ---
122
123 Configuring @tramp{} for use
124
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::
133
134 Using @tramp
135
136 * Filename Syntax:: @tramp{} filename conventions.
137 * Multi-hop filename syntax:: Multi-hop filename conventions
138 * Dired:: Dired and filename completion.
139
140 The inner workings of remote version control
141
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
147
148 Things related to Version Control that don't fit elsewhere
149
150 * Remote File Ownership:: How VC determines who owns a workfile.
151 * Back-end Versions:: How VC determines what release your RCS is.
152
153 How file names, directories and paths are mangled and managed.
154
155 * Path deconstruction:: Breaking a path into its components.
156
157 @end detailmenu
158 @end menu
159
160
161 @node Overview
162 @chapter An overview of @tramp
163 @cindex overview
164
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.
169
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.
174
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.
179
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.
184
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.
188
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.
193
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.
199
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.
204
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.
208
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}.
212
213
214 @subsubheading Behind the scenes
215 @cindex behind the scenes
216 @cindex details of operation
217 @cindex how it works
218
219 This section tries to explain what goes on behind the scenes when you
220 access a remote file through @tramp{}.
221
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:
226
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.
234
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.
239
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.
245
246 You enter the password or pass phrase. @tramp{} sends it to the remote
247 host, followed by a newline.
248
249 @item
250 @tramp{} now waits for the shell prompt or for a message that the login
251 failed.
252
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.
256
257 If @tramp{} sees a `login failed' message, it tells you so, aborts the
258 login attempt and allows you to try again.
259
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{}}
267
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.
271
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.
276
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.
282
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.
288
289 See above for an explanation of how @tramp{} transfers the file contents.
290
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.
295
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.
300
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.
305
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.
310
311 @end itemize
312
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{}.
315
316
317 @c For the end user 369 @c For the end user
318 @node Obtaining @tramp{} 370 @node Obtaining @tramp{}
319 @chapter Obtaining @tramp{}. 371 @chapter Obtaining @tramp{}.
320 @cindex obtaining Tramp 372 @cindex obtaining Tramp
321 373
331 For the especially brave, @tramp{} is available from CVS. The CVS version 383 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 384 is the latest version of the code and may contain incomplete features or
333 new issues. Use these versions at your own risk. 385 new issues. Use these versions at your own risk.
334 386
335 Instructions for obtaining the latest development version of @tramp{} 387 Instructions for obtaining the latest development version of @tramp{}
336 from CVS can be found by going to the Savannah project page at 388 from CVS can be found by going to the Savannah project page at the
337 @uref{http://savannah.gnu.org/projects/tramp/} and then clicking on the 389 following URL and then clicking on the CVS link in the navigation bar at
338 CVS link in the navigation bar at the top. Or follow the example 390 the top.
339 session below: 391
392 @noindent
393 @uref{http://savannah.gnu.org/projects/tramp/}
394
395 @noindent
396 Or follow the example session below:
340 397
341 @example 398 @example
342 ] @strong{cd ~/lisp} 399 ] @strong{cd ~/@value{emacs-dir}}
343 ] @strong{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/tramp login} 400 ] @strong{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/tramp login}
344 401
345 (Logging in to anoncvs@@subversions.gnu.org) 402 (Logging in to anoncvs@@subversions.gnu.org)
346 CVS password: @strong{(just hit RET here)} 403 CVS password: @strong{(just hit RET here)}
347 @dots{} 404 @dots{}
348 405
349 ] @strong{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/tramp co tramp} 406 ] @strong{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/tramp co tramp}
350 @end example 407 @end example
351 408
352 You should now have a directory @file{~/lisp/tramp} containing the latest 409 @noindent
410 You should now have a directory @file{~/@value{emacs-dir}/tramp} containing the latest
353 version of @tramp{}. You can fetch the latest updates from the repository 411 version of @tramp{}. You can fetch the latest updates from the repository
354 by issuing the command: 412 by issuing the command:
355 413
356 @example 414 @example
357 ] @strong{cd ~/lisp/tramp} 415 ] @strong{cd ~/@value{emacs-dir}/tramp}
358 ] @strong{cvs update -d} 416 ] @strong{cvs update -d}
359 @end example 417 @end example
360 418
361 419
362 @node History 420 @node History
376 added in April 2000 and the unification of @tramp{} and Ange-FTP 434 added in April 2000 and the unification of @tramp{} and Ange-FTP
377 filenames in July 2002. 435 filenames in July 2002.
378 436
379 437
380 @node Installation 438 @node Installation
381 @chapter Installing @tramp{} into Emacs or XEmacs 439 @chapter Installing @tramp{} into @value{emacs-name}.
382 @cindex installation 440 @cindex installation
383 441
384 If you use the version that comes with your Emacs or the XEmacs 442 If you use the version that comes with your @value{emacs-name}, the
385 package, the following information is not necessary. Installing 443 following information is not necessary. Installing @tramp{} into your
386 @tramp{} into your Emacs or XEmacs is a relatively easy process, at 444 @value{emacs-name} is a relatively easy process, at least compared
387 least compared to rebuilding your machine from scratch. ;) 445 to rebuilding your machine from scratch. ;)
388 446
389 Seriously though, the installation should be a fairly simple matter. 447 Seriously though, the installation should be a fairly simple matter.
390 448
391 The easiest way to proceed is as follows: 449 The easiest way to proceed is as follows:
392 450
393 @itemize 451 @itemize @bullet
394 @item 452 @item
395 Choose a directory, say @file{~/emacs/}. Change into that directory and 453 Choose a directory, say @file{~/@value{emacs-dir}/}. Change into that directory and
396 unpack the tarball. This will give you a directory 454 unpack the tarball. This will give you a directory
397 @file{~/emacs/tramp/} which contains subdirectories @file{lisp} for the 455 @file{~/@value{emacs-dir}/tramp/} which contains subdirectories @file{lisp} for the
398 Lisp code and @file{texi} for the documentation. 456 Lisp code and @file{texi} for the documentation.
399 457
400 @item 458 @item
401 Optionally byte-compile all files in the Lisp directory, 459 Optionally byte-compile all files in the Lisp directory,
402 @file{~/emacs/tramp/lisp/}, by issuing a command like the following from 460 @file{~/@value{emacs-dir}/tramp/lisp/}, by issuing a command like the following from
403 the top level directory @file{~/emacs/tramp/}: 461 the top level directory @file{~/@value{emacs-dir}/tramp/}:
462
404 @example 463 @example
405 make EMACS=emacs all # for Emacs users 464 make EMACS=@value{emacs-dir} all
406 make EMACS=xemacs all # for XEmacs users
407 @end example 465 @end example
408 466
409 @item 467 @item
410 NOTE: 468 NOTE: If you run into problems running the example @command{make}
411 @example 469 command, don't dispare. You can still byte compile the @file{*.el}
412 If you run into problems running the example @command{make} 470 files by opening @value{emacs-name} in @command{dired} (@command{C-x
413 commands, don't dispare. You can still byte compile the 471 d}) mode, at @file{~/@value{emacs-dir}/tramp/lisp}. Mark the lisp files with
414 @file{*.el} files by opening emacs in @command{dired} 472 @kbd{m}, then press @kbd{B} to byte compile your selections.
415 (@command{C-x d}) mode, at @file{~/tramp/lisp}. Mark the lisp 473
416 files with @kbd{m}, then press @kbd{B} to byte compile 474 Something similar can be done to create the info manual. Just change
417 your selections. 475 to directory @file{~/@value{emacs-dir}/tramp/texi} and load the
418 476 @file{tramp.texi} file in @value{emacs-name}. Then press @kbd{M-x
419 Something similar can be done to create the info manual. 477 makeinfo-buffer @key{RET}} to generate @file{tramp.info}.
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
424 478
425 @item 479 @item
426 Tell Emacs about the new Lisp directory and the @tramp{} package 480 Tell @value{emacs-name} about the new Lisp directory and the
427 with the following lines in @file{~/.emacs}: 481 @tramp{} package with the following lines in @file{~/.emacs}:
482
428 @lisp 483 @lisp
429 (add-to-list 'load-path "~/emacs/tramp/lisp/") 484 (add-to-list 'load-path "~/@value{emacs-dir}/tramp/lisp/")
430 (require 'tramp) 485 (require 'tramp)
431 @end lisp 486 @end lisp
432 487
433 @item 488 @item
434 To be able to read the Info documentation, create a file 489 To be able to read the Info documentation, create a file
435 @file{~/emacs/tramp/texi/dir} using for example the 490 @file{~/@value{emacs-dir}/tramp/texi/dir} using the
436 @command{install-info} command, and add the directory to the search 491 @command{install-info} command, and add the directory to the search
437 path for Info. 492 path for Info.
438 493
439 @item
440 NOTE: 494 NOTE:
495 On systems using the @cite{gnu} version of @command{install-info}, the
496 @command{install-info} syntax is very direct and simple. One can
497 change to directory @file{~/@value{emacs-dir}/tramp/texi} and type:
498
441 @example 499 @example
442 On systems using `gnu' @command{install-info}, the 500 install-info tramp.info dir
443 @command{install-info} syntax is very direct and simple. One can 501 @end example
444 cd to @file{~/emacs/tramp/texi} and type: 502
445 @kbd{install-info tramp.info dir}
446 and a @file{dir} file will be created with the @tramp{} 503 and a @file{dir} file will be created with the @tramp{}
447 entry. The info reader will know how to interpret it, but must 504 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 505 be told where to find it (see below). If you want anything fancier
449 you'll need to look through @kbd{man install-info}. 506 you'll need to look through @kbd{man install-info}.
450 507
451 Debian gnu/linux doesn't default to `gnu' @command{install-info} and 508 Debian gnu/linux doesn't default to @cite{gnu} @command{install-info}
452 uses its own version. This version does not create a @file{dir} file 509 and uses its own version. This version does not create a @file{dir}
453 for you from scratch. You must provide a skeleton dir file it 510 file for you from scratch. You must provide a skeleton @file{dir}
454 recognizes. One can be found in a default install at 511 file it recognizes. One can be found in a default installation of
455 @file{/usr/info/dir}. Copy the top of this file down to the first 512 @value{emacs-name} at @file{/usr/info/dir}. Copy the top of this file
456 occurrence of `* Menu' including that line plus one more blank line, 513 down to the first occurrence of @code{* Menu} including that line plus
457 to your working directory @file{texi/dir}, or use the sample provided 514 one more blank line, to your working directory
458 in the @file{texi} directory of this distribution. See 515 @file{~/@value{emacs-dir}/tramp/texi}, or use the sample
459 @file{texi/dir_sample} 516 @file{~/@value{emacs-dir}/tramp/texi/dir_sample}.
460 517
461 Once a @file{dir} file is in place, this command will make the entry. 518 Once a @file{dir} file is in place, this command will make the entry:
462 install-info --infodir=. tramp.info 519
463 If you want it in a specific category 520 @example
464 (see @kbd{man install-info} for further details) 521 install-info --infodir=. tramp.info
465 @end example 522 @end example
466 523
524 If you want it in a specific category see @kbd{man install-info} for
525 further details.
526
467 If the environment variable @env{INFOPATH} is set, add the directory 527 If the environment variable @env{INFOPATH} is set, add the directory
468 @file{~/emacs/tramp/texi/} to it. Else, add the directory to 528 @file{~/@value{emacs-dir}/tramp/texi/} to it. Else, add the directory to
529 @ifset emacs
469 @code{Info-default-directory-list}, as follows: 530 @code{Info-default-directory-list}, as follows:
531
470 @lisp 532 @lisp
471 (add-to-list 'Info-default-directory-list "~/emacs/tramp/texi/") 533 (add-to-list 'Info-default-directory-list "~/@value{emacs-dir}/tramp/texi/")
472 @end lisp 534 @end lisp
473 XEmacs 21 users should use @code{Info-directory-list} rather than 535 @end ifset
474 @code{Info-default-directory-list}. 536 @ifset xemacs
537 @code{Info-directory-list}, as follows:
538 @lisp
539 (add-to-list 'Info-directory-list "~/@value{emacs-dir}/tramp/texi/")
540 @end lisp
541 @end ifset
475 542
476 @end itemize 543 @end itemize
477 544
478 545 @ifset xemacs
479 For XEmacs users, the package @file{fsf-compat} must be installed. 546 For @value{emacs-name}, the package @file{fsf-compat} must be installed.
480 For details on package installation, see @ref{Packages, , ,xemacs}. 547 For details on package installation, see @ref{Packages, , ,xemacs}.
481 @ifhtml 548 @ifhtml
482 (If the previous link doesn't work, try the XEmacs documentation at 549 (If the previous link doesn't work, try the @value{emacs-name}
483 @uref{http://www.xemacs.org/Documentation/packageGuide.html,the XEmacs 550 documentation at
484 site}.) 551 @uref{http://www.xemacs.org/Documentation/packageGuide.html,the
552 @value{emacs-name} site}.)
485 @end ifhtml 553 @end ifhtml
554 @end ifset
486 555
487 @node Configuration 556 @node Configuration
488 @chapter Configuring @tramp{} for use 557 @chapter Configuring @tramp{} for use
489 @cindex configuration 558 @cindex configuration
490 559
491 @cindex default configuration 560 @cindex default configuration
492 @tramp{} is (normally) fully functional when it is initially 561 @tramp{} is (normally) fully functional when it is initially
493 installed. It is initially configured to use the @command{sh} program 562 installed. It is initially configured to use the @command{ssh} program
494 to connect to the remote host and to use base-64 encoding (on the 563 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 564 remote host, via @command{mimencode}, and on the local host via the
496 built-in support for base-64 encoding in Emacs). 565 built-in support for base-64 encoding in Emacs).
497 566
498 On some hosts, there are problems with opening a connection. These are 567 On some hosts, there are problems with opening a connection. These are
511 * Inline methods:: Inline methods. 580 * Inline methods:: Inline methods.
512 * External transfer methods:: External transfer methods. 581 * External transfer methods:: External transfer methods.
513 * Multi-hop Methods:: Connecting to a remote host using multiple hops. 582 * Multi-hop Methods:: Connecting to a remote host using multiple hops.
514 * Default Method:: Selecting a default method. 583 * Default Method:: Selecting a default method.
515 * Customizing Methods:: Using Non-Standard Methods. 584 * Customizing Methods:: Using Non-Standard Methods.
585 * Customizing Completion:: Selecting config files for user/host name completion.
516 * Remote Programs:: How @tramp{} finds and uses programs on the remote machine. 586 * Remote Programs:: How @tramp{} finds and uses programs on the remote machine.
517 * Remote shell setup:: Remote shell setup hints. 587 * Remote shell setup:: Remote shell setup hints.
518 * Windows setup hints:: Issues with Cygwin ssh. 588 * Windows setup hints:: Issues with Cygwin ssh.
519 @end menu 589 @end menu
520 590
539 @cindex out-of-band methods 609 @cindex out-of-band methods
540 @cindex methods, inline 610 @cindex methods, inline
541 @cindex methods, external transfer 611 @cindex methods, external transfer
542 @cindex methods, out-of-band 612 @cindex methods, out-of-band
543 Loading or saving a remote file requires that the content of the file 613 Loading or saving a remote file requires that the content of the file
544 be transferred between the two machines. The content of the file can be 614 be transfered between the two machines. The content of the file can be
545 transferred over the same connection used to log in to the remote 615 transfered over the same connection used to log in to the remote
546 machine or the file can be transferred through another connection using 616 machine or the file can be transfered through another connection using
547 a remote copy program such as @command{rcp}, @command{scp} or 617 a remote copy program such as @command{rcp}, @command{scp} or
548 @command{rsync}. The former are called @dfn{inline methods}, the 618 @command{rsync}. The former are called @dfn{inline methods}, the
549 latter are called @dfn{out-of-band methods} or @dfn{external transfer 619 latter are called @dfn{out-of-band methods} or @dfn{external transfer
550 methods} (@dfn{external methods} for short). 620 methods} (@dfn{external methods} for short).
551 621
641 711
642 There are also two variants, @option{sm-ssh1} and @option{sm-ssh2} 712 There are also two variants, @option{sm-ssh1} and @option{sm-ssh2}
643 that use the @command{ssh1} and @command{ssh2} commands explicitly. If 713 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. 714 you don't know what these are, you do not need these options.
645 715
646 All the methods based on @command{ssh} have an additional kludgey 716 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} 717 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 718 (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 719 means to connect to the given host but to also pass @code{-p 42} as
650 arguments to the @command{ssh} command. 720 arguments to the @command{ssh} command.
651 721
774 @cindex Cygwin (with smx method) 844 @cindex Cygwin (with smx method)
775 845
776 As you expect, this is similar to @option{sm}, only a little 846 As you expect, this is similar to @option{sm}, only a little
777 different. Whereas @option{sm} opens a normal interactive shell on 847 different. Whereas @option{sm} opens a normal interactive shell on
778 the remote host, this option uses @samp{ssh -t -t @var{host} -l 848 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 849 @var{user} /bin/sh} to open a connection. This is useful for users
780 where the normal login shell is set up to ask them a number of 850 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 851 questions when logging in. This procedure avoids these questions, and
782 just gives @tramp{} a more-or-less `standard' login shell to work 852 just gives @tramp{} a more-or-less `standard' login shell to work
783 with. 853 with.
784 854
899 the inline methods when you often open and close small files however. 969 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} 970 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 971 session can begin to absorb the advantage that the lack of encoding and
902 decoding presents. 972 decoding presents.
903 973
904 All the @command{ssh} based methods support the kludgey @samp{-p} 974 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 975 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 976 name. For example, the host name @file{host#42} tells Tramp to
907 specify @samp{-p 42} in the argument list for @command{ssh}. 977 specify @samp{-p 42} in the argument list for @command{ssh}.
908 978
909 979
1095 specifies a different port number for a certain host name. But it can 1165 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 1166 also be accomplished within Tramp, by adding a multi-hop method. For
1097 example: 1167 example:
1098 1168
1099 @lisp 1169 @lisp
1100 (add-to-list 'tramp-multi-connection-function-alist 1170 (add-to-list
1101 '("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n")) 1171 'tramp-multi-connection-function-alist
1172 '("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n"))
1102 @end lisp 1173 @end lisp
1103 1174
1104 Now you can use a @code{sshf} hop which connects to port 4400 instead of 1175 Now you can use an @code{sshf} hop which connects to port 4400 instead of
1105 the standard port. 1176 the standard port.
1106 1177
1107 1178
1108 @node Default Method 1179 @node Default Method
1109 @section Selecting a default method 1180 @section Selecting a default method
1173 1244
1174 For the time being, I'll refer you to the Lisp documentation of that 1245 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}}. 1246 variable, accessible with @kbd{C-h v tramp-methods @key{RET}}.
1176 1247
1177 1248
1249 @node Customizing Completion
1250 @section Selecting config files for user/host name completion
1251 @cindex customizing completion
1252 @cindex selecting config files
1253 @vindex tramp-completion-function-alist
1254
1255 The variable @code{tramp-completion-function-alist} is intended to
1256 customize, which files are taken into account for user and host name
1257 completion (@pxref{Filename completion}). For every method, it keeps
1258 a set of configuration files, accompanied by a Lisp function able to
1259 parse that file. Entries in @code{tramp-completion-function-alist}
1260 have the form (@var{method} @var{pair1} @var{pair2} ...).
1261
1262 Each @var{pair} is composed of (@var{function} @var{file}).
1263 @var{function} is responsible to extract user names and host names
1264 from @var{file} for completion. There are two functions which access
1265 this variable:
1266
1267 @defun tramp-get-completion-function method
1268 This function returns the list of completion functions for @var{method}.
1269
1270 Example:
1271 @example
1272 (tramp-get-completion-function "rsh")
1273
1274 @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
1275 (tramp-parse-rhosts "~/.rhosts"))
1276 @end example
1277 @end defun
1278
1279 @defun tramp-set-completion-function method function-list
1280 This function sets @var{function-list} as list of completion functions
1281 for @var{method}.
1282
1283 Example:
1284 @example
1285 (tramp-set-completion-function "ssh"
1286 '((tramp-parse-shosts "/etc/ssh_known_hosts")
1287 (tramp-parse-shosts "~/.ssh/known_hosts")))
1288
1289 @result{} ((tramp-parse-shosts "/etc/ssh_known_hosts")
1290 (tramp-parse-shosts "~/.ssh/known_hosts"))
1291 @end example
1292 @end defun
1293
1294 The following predefined functions parsing configuration files exists:
1295
1296 @table @asis
1297 @item @code{tramp-parse-rhosts}
1298 @findex tramp-parse-rhosts
1299
1300 This function parses files which are syntactical equivalent to
1301 @file{~/.rhosts}. It returns both host names and user names, if
1302 specified.
1303
1304 @item @code{tramp-parse-shosts}
1305 @findex tramp-parse-shosts
1306
1307 This function parses files which are syntactical equivalent to
1308 @file{/etc/ssh_known_hosts}. Since there are no user names specified
1309 in such files, it can return host names only.
1310
1311 @item @code{tramp-parse-hosts}
1312 @findex tramp-parse-hosts
1313
1314 A function dedicated to @file{/etc/hosts} style files. It returns
1315 host names only.
1316
1317 @item @code{tramp-parse-passwd}
1318 @findex tramp-parse-passwd
1319
1320 Finally a method which parses @file{/etc/passwd} like files.
1321 Obviously, it can return user names only.
1322 @end table
1323
1324 @ifset emacs
1325 A function which parses @file{~/.netrc"} file syntax doesn't exist in
1326 @tramp{}, because this task is delegated to
1327 @value{ftp-package-name}. Its customization should be used instead.
1328 @end ifset
1329
1330 If you want to keep your own data in a file, with your own structure,
1331 you might provide such a function as well. This function must meet
1332 the following conventions:
1333
1334 @defun my-tramp-parse file
1335 @var{file} must be either a file name on your host, or @code{nil}. The
1336 function must return a list of (@var{user} @var{host}), which are
1337 taken as candidates for user and host name completion.
1338
1339 Example:
1340 @example
1341 (my-tramp-parse "~/.my-tramp-hosts")
1342
1343 @result{} ((nil "toto") ("daniel" "melancholia"))
1344 @end example
1345 @end defun
1346
1347
1178 @node Remote Programs 1348 @node Remote Programs
1179 @section How @tramp{} finds and uses programs on the remote machine. 1349 @section How @tramp{} finds and uses programs on the remote machine.
1180 1350
1181 @tramp{} depends on a number of programs on the remote host in order to 1351 @tramp{} depends on a number of programs on the remote host in order to
1182 function, including @command{ls}, @command{test}, @command{find} and 1352 function, including @command{ls}, @command{test}, @command{find} and
1207 found. 1377 found.
1208 1378
1209 To add a directory to the remote search path, you could use code such 1379 To add a directory to the remote search path, you could use code such
1210 as: 1380 as:
1211 1381
1212 @example 1382 @lisp
1213 (require 'tramp) @i{; @tramp{} must be loaded before this} 1383 @i{;; We load @tramp{} to define the variable.}
1214 @i{; happens.} 1384 (require 'tramp)
1215 1385 @i{;; We have @command{perl} in "/usr/local/perl/bin"}
1216 @i{; We have @command{perl} in "/usr/local/perl/bin"}
1217 (add-to-list 'tramp-remote-path "/usr/local/perl/bin") 1386 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1218 @end example 1387 @end lisp
1388
1219 1389
1220 @node Remote shell setup 1390 @node Remote shell setup
1221 @comment node-name, next, previous, up 1391 @comment node-name, next, previous, up
1222 @section Remote shell setup hints 1392 @section Remote shell setup hints
1223 @cindex remote shell setup 1393 @cindex remote shell setup
1226 @cindex shell init files 1396 @cindex shell init files
1227 1397
1228 As explained in the @ref{Overview} section, @tramp{} connects to the 1398 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 1399 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 1400 log in, the shell executes its init files. Suppose your init file
1231 requires you to enter the birthdate of your mother; clearly @tramp{} 1401 requires you to enter the birth date of your mother; clearly @tramp{}
1232 does not know this and hence fails to log you in to that host. 1402 does not know this and hence fails to log you in to that host.
1233 1403
1234 There are different possible strategies for pursuing this problem. One 1404 There are different possible strategies for pursuing this problem. One
1235 strategy is to enable @tramp{} to deal with all possible situations. 1405 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 1406 This is a losing battle, since it is not possible to deal with
1268 following as the value for the variable: @code{"^[^>$][>$] *"}. Now 1438 following as the value for the variable: @code{"^[^>$][>$] *"}. Now
1269 suppose your shell prompt is @code{a <b> c $ }. In this case, Tramp 1439 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 1440 recognizes the @code{>} character as the end of the prompt, but it is
1271 not at the end of the buffer. 1441 not at the end of the buffer.
1272 1442
1443 @item @var{tramp-shell-prompt-pattern}
1444 @vindex tramp-shell-prompt-pattern
1445
1446 This regular expression is used by @tramp{} in the same way as
1447 @code{shell-prompt-pattern}, to match prompts from the remote shell.
1448 This second variable exists because the prompt from the remote shell
1449 might be different from the prompt from a local shell --- after all,
1450 the whole point of @tramp{} is to log in to remote hosts as a
1451 different user. The default value of
1452 @code{tramp-shell-prompt-pattern} is the same as the default value of
1453 @code{shell-prompt-pattern}, which is reported to work well in many
1454 circumstances.
1455
1273 @item @code{tset} and other questions 1456 @item @code{tset} and other questions
1274 @cindex Unix command tset 1457 @cindex Unix command tset
1275 @cindex tset Unix command 1458 @cindex tset Unix command
1276 1459
1277 Some people invoke the @code{tset} program from their shell startup 1460 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 1461 scripts which asks the user about the terminal type of the shell.
1279 some shells ask other questions when they are started. @tramp{} does 1462 Maybe some shells ask other questions when they are started. @tramp{}
1280 not know how to answer these questions. (A facility for enabling 1463 does not know how to answer these questions. There are two approaches
1281 @tramp{} to answer these questions is planned for some future version, 1464 for dealing with this problem. One approach is to take care that the
1282 but don't hold your breath.) 1465 shell does not ask any questions when invoked from @tramp{}. You can
1283 1466 do this by checking the @code{TERM} environment variable, it will be
1284 Therefore, you should take care that the shell does not ask any 1467 set to @code{dumb} when connecting.
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.
1288 1468
1289 @vindex tramp-terminal-type 1469 @vindex tramp-terminal-type
1290 The variable @code{tramp-terminal-type} can be used to change this value 1470 The variable @code{tramp-terminal-type} can be used to change this value
1291 @code{dumb}. 1471 to @code{dumb}.
1472
1473 The other approach is to teach @tramp{} about these questions. See
1474 the variables @code{tramp-actions-before-shell} and
1475 @code{tramp-multi-actions} (for multi-hop connections).
1292 1476
1293 @end table 1477 @end table
1294 1478
1295 1479
1296 @node Windows setup hints 1480 @node Windows setup hints
1315 will be able to access files on any remote machine that you can log in 1499 will be able to access files on any remote machine that you can log in
1316 to as though they were local. 1500 to as though they were local.
1317 1501
1318 Files are specified to @tramp{} using a formalized syntax specifying the 1502 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 1503 details of the system to connect to. This is similar to the syntax used
1320 by the @command{EFS} and @command{Ange-FTP} packages. 1504 by the @value{ftp-package-name} package.
1321 1505
1506 @cindex type-ahead
1507 Something that might happen which surprises you is that Emacs
1508 remembers all your keystrokes, so if you see a password prompt from
1509 Emacs, say, and hit @kbd{@key{RET}} twice instead of once, then the
1510 second keystroke will be processed by Emacs after @tramp{} has done
1511 its thing. Why, this type-ahead is normal behavior, you say. Right
1512 you are, but be aware that opening a remote file might take quite a
1513 while, maybe half a minute when a connection needs to be opened.
1514 Maybe after half a minute you have already forgotten that you hit that
1515 key!
1322 1516
1323 @menu 1517 @menu
1324 * Filename Syntax:: @tramp{} filename conventions. 1518 * Filename Syntax:: @tramp{} filename conventions.
1325 * Multi-hop filename syntax:: Multi-hop filename conventions 1519 * Multi-hop filename syntax:: Multi-hop filename conventions.
1326 * Dired:: Dired and filename completion. 1520 * Filename completion:: Filename completion.
1521 * Dired:: Dired.
1327 @end menu 1522 @end menu
1328 1523
1329 1524
1330 @node Filename Syntax 1525 @node Filename Syntax
1331 @section @tramp{} filename conventions 1526 @section @tramp{} filename conventions
1332 @cindex filename syntax 1527 @cindex filename syntax
1333 @cindex filename examples 1528 @cindex filename examples
1334 1529
1335 On Emacs, the Ange-FTP and Tramp filenames use a unified syntax. On 1530 To access the file @var{path} on the remote machine @var{machine} you
1336 XEmacs, EFS and Tramp use different formats for the filenames. 1531 would specify the filename
1337 Therefore, the following will describe the Emacs and XEmacs cases 1532 @file{@value{tramp-prefix}@var{machine}@value{tramp-postfix}@var{path}}.
1338 separately. 1533 This will connect to @var{machine} and transfer the file using the
1339 1534 default method. @xref{Default Method}.
1340 On Emacs, to access the file @var{path} on the remote machine 1535
1341 @var{machine} you would specify the filename 1536 Some examples of @tramp{} filenames are shown below.
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.)
1346
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.
1350 1537
1351 @table @file 1538 @table @file
1352 @item /melancholia:.emacs 1539 @item @value{tramp-prefix}melancholia@value{tramp-postfix}.emacs
1353 @itemx /[melancholia].emacs
1354 Edit the file @file{.emacs} in your home directory on the machine 1540 Edit the file @file{.emacs} in your home directory on the machine
1355 @code{melancholia}. 1541 @code{melancholia}.
1356 1542
1357 @item /melancholia.danann.net:.emacs 1543 @item @value{tramp-prefix}melancholia.danann.net@value{tramp-postfix}.emacs
1358 @itemx /[melancholia.danann.net].emacs
1359 This edits the same file, using the fully qualified domain name of 1544 This edits the same file, using the fully qualified domain name of
1360 the machine. 1545 the machine.
1361 1546
1362 @item /melancholia:~/.emacs 1547 @item @value{tramp-prefix}melancholia@value{tramp-postfix}~/.emacs
1363 @itemx /[melancholia]~/.emacs
1364 This also edits the same file --- the @file{~} is expanded to your 1548 This also edits the same file --- the @file{~} is expanded to your
1365 home directory on the remote machine, just like it is locally. 1549 home directory on the remote machine, just like it is locally.
1366 1550
1367 @item /melancholia:~daniel/.emacs 1551 @item @value{tramp-prefix}melancholia@value{tramp-postfix}~daniel/.emacs
1368 @itemx /[melancholia]~daniel/.emacs
1369 This edits the file @file{.emacs} in the home directory of the user 1552 This edits the file @file{.emacs} in the home directory of the user
1370 @code{daniel} on the machine @code{melancholia}. The @file{~<user>} 1553 @code{daniel} on the machine @code{melancholia}. The @file{~<user>}
1371 construct is expanded to the home directory of that user on the remote 1554 construct is expanded to the home directory of that user on the remote
1372 machine. 1555 machine.
1373 1556
1374 @item /melancholia:/etc/squid.conf 1557 @item @value{tramp-prefix}melancholia@value{tramp-postfix}/etc/squid.conf
1375 @itemx /[melancholia]/etc/squid.conf
1376 This edits the file @file{/etc/squid.conf} on the machine 1558 This edits the file @file{/etc/squid.conf} on the machine
1377 @code{melancholia}. 1559 @code{melancholia}.
1378 1560
1379 @end table 1561 @end table
1380 1562
1381 Unless you specify a different name to use, @tramp{} will use the current 1563 Unless you specify a different name to use, @tramp{} will use the
1382 local user name as the remote user name to log in with. If you need to 1564 current local user name as the remote user name to log in with. If you
1383 log in as a different user, you can specify the user name as part of the 1565 need to log in as a different user, you can specify the user name as
1384 filename. 1566 part of the filename.
1385 1567
1386 On Emacs, to log in to the remote machine as a specific user, you use 1568 To log in to the remote machine as a specific user, you use the syntax
1387 the syntax @file{/@var{user}@@@var{machine}:/path/to.file}. On 1569 @file{@value{tramp-prefix}@var{user}@@@var{machine}@value{tramp-postfix}/@var{path/to.file}}.
1388 XEmacs, use @file{/[@var{user}@@@var{machine}]/path/to.file}. That 1570 That means that connecting to @code{melancholia} as @code{daniel} and
1389 means that connecting to @code{melancholia} as @code{daniel} and
1390 editing @file{.emacs} in your home directory you would specify 1571 editing @file{.emacs} in your home directory you would specify
1391 @file{/daniel@@melancholia:.emacs} on Emacs and 1572 @file{@value{tramp-prefix}daniel@@melancholia@value{tramp-postfix}.emacs}.
1392 @file{/[daniel@@melancholia].emacs} on XEmacs.
1393
1394 1573
1395 It is also possible to specify other file transfer methods 1574 It is also possible to specify other file transfer methods
1396 (@pxref{Default Method}) as part of the filename. On Emacs, this is 1575 (@pxref{Default Method}) as part of the filename.
1397 done by puttig the method before the user and host name, as in 1576 @ifset emacs
1398 @file{/@var{method}:} (note the trailing colon). On XEmacs, it is 1577 This is done by putting the method before the user and host name, as
1399 done by replacing the initial @file{/[} with @file{/[<method>/}. 1578 in
1400 (Note the trailing slash!) The user, machine and file specification 1579 @file{@value{tramp-prefix}@var{method}@value{tramp-postfix-single-hop}}
1401 remain the same. 1580 (note the trailing colon).
1581 @end ifset
1582 @ifset xemacs
1583 This is done by replacing the initial
1584 @file{@value{tramp-prefix}} with
1585 @file{@value{tramp-prefix}<method>@value{tramp-postfix-single-hop}}.
1586 (Note the trailing slash!).
1587 @end ifset
1588 The user, machine and file specification remain the same.
1402 1589
1403 So, to connect to the machine @code{melancholia} as @code{daniel}, 1590 So, to connect to the machine @code{melancholia} as @code{daniel},
1404 using the @option{su} method to transfer files, and edit @file{.emacs} 1591 using the @option{su} method to transfer files, and edit @file{.emacs}
1405 in my home directory I would specify the filename 1592 in my home directory I would specify the filename
1406 @file{/su:daniel@@melancholia:.emacs} on Emacs and 1593 @file{@value{tramp-prefix}su@value{tramp-postfix-single-hop}daniel@@melancholia@value{tramp-postfix}.emacs}.
1407 @file{/[su/daniel@@melancholia].emacs} on XEmacs.
1408 1594
1409 1595
1410 @node Multi-hop filename syntax 1596 @node Multi-hop filename syntax
1411 @section Multi-hop filename conventions 1597 @section Multi-hop filename conventions
1412 @cindex filename syntax for multi-hop files 1598 @cindex filename syntax for multi-hop files
1413 @cindex multi-hop filename syntax 1599 @cindex multi-hop filename syntax
1414 1600
1415 The syntax of multi-hop file names is necessarily slightly different 1601 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 1602 than the syntax of other @tramp{} file names. Here's an example
1417 file name, first in Emacs syntax and then in XEmacs syntax: 1603 multi-hop file name, first in Emacs syntax and then in XEmacs syntax:
1418 1604
1419 @file{/multi:rsh:out@@gate:telnet:kai@@real.host:/path/to.file} 1605 @example
1420 @file{/[multi/rsh:out@@gate/telnet:kai@@real.host]/path/to.file} 1606 @value{tramp-prefix}multi@value{tramp-postfix-single-hop}rsh@value{tramp-postfix-multi-hop}out@@gate@value{tramp-postfix-single-hop}telnet@value{tramp-postfix-multi-hop}kai@@real.host@value{tramp-postfix}/path/to.file
1607 @end example
1421 1608
1422 This is quite a mouthful. So let's go through it step by step. The 1609 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 1610 file name consists of three parts.
1424 by colons, on XEmacs they are separated by slashes and square 1611 @ifset emacs
1425 brackets. The first part is @file{/multi:} (or @file{/[multi}), the 1612 The parts are separated by colons
1426 method specification. The second part is 1613 @end ifset
1427 @file{rsh:out@@gate:telnet:kai@@real.host} (or 1614 @ifset xemacs
1428 @file{rsh:out@@gate/telnet:kai@@real.host}) and specifies the hops. 1615 The parts are separated by slashes and square brackets.
1429 (Yes, on Emacs the second part may contain even more colons, so that's why 1616 @end ifset
1430 this file name has more than two colons in it.) The final part is 1617 The first part is @file{@value{tramp-prefix}multi}, the method
1431 @file{/path/to.file} and specifies the file name on the remote host. 1618 specification. The second part is
1619 @file{rsh@value{tramp-postfix-multi-hop}out@@gate@value{tramp-postfix-single-hop}telnet@value{tramp-postfix-multi-hop}kai@@real.host}
1620 and specifies the hops. The final part is @file{/path/to.file} and
1621 specifies the file name on the remote host.
1432 1622
1433 The first part and the final part should be clear. @ref{Multi-hop 1623 The first part and the final part should be clear. @ref{Multi-hop
1434 Methods}, for a list of alternatives for the method specification. 1624 Methods}, for a list of alternatives for the method specification.
1435 1625
1436 The second part can be subdivided again into components, so-called hops. 1626 The second part can be subdivided again into components, so-called
1437 In the above file name, there are two hops, @file{rsh:out@@gate} and 1627 hops. In the above file name, there are two hops,
1438 @file{telnet:kai@@real.host}. 1628 @file{rsh@value{tramp-postfix-multi-hop}out@@gate} and
1629 @file{telnet@value{tramp-postfix-multi-hop}kai@@real.host}.
1439 1630
1440 Each hop can @emph{again} be subdivided into (three) components, the 1631 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 1632 @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 1633 meaning of the second and third component should be clear, and the hop
1443 method says what program to use to perform that hop. 1634 method says what program to use to perform that hop.
1444 1635
1445 The first hop, @file{rsh:out@@gate}, says to use @command{rsh} to log in 1636 The first hop, @file{rsh@value{tramp-postfix-multi-hop}out@@gate},
1446 as user @code{out} to the host @code{gate}. Starting at that host, the 1637 says to use @command{rsh} to log in as user @code{out} to the host
1447 second hop, @file{telnet:kai@@real.host}, says to use @command{telnet} 1638 @code{gate}. Starting at that host, the second hop,
1448 to log in as user @code{kai} to host @code{real.host}. 1639 @file{telnet@value{tramp-postfix-multi-hop}kai@@real.host}, says to
1449 1640 use @command{telnet} to log in as user @code{kai} to host
1450 @xref{Multi-hop Methods}, for a list of possible hop method values. The 1641 @code{real.host}.
1451 variable @var{tramp-multi-connection-function-alist} contains the list of 1642
1452 possible hop methods and information on how to execute them, should you 1643 @xref{Multi-hop Methods}, for a list of possible hop method values.
1453 want to add your own. 1644 The variable @code{tramp-multi-connection-function-alist} contains the
1645 list of possible hop methods and information on how to execute them,
1646 should you want to add your own.
1647
1648
1649 @node Filename completion
1650 @section Filename completion
1651 @cindex filename completion
1652
1653 Filename completion works with @tramp{} for both completing methods,
1654 user names and machine names (except multi hop methods) as well as for
1655 files on remote machines.
1656
1657 If you, for example, type @kbd{C-x C-f @value{tramp-prefix}t
1658 @key{TAB}}, @tramp{} might give you as result the choice for
1659
1660 @example
1661 @ifset emacs
1662 @value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop} tmp/
1663 @value{tramp-prefix-single-hop}toto@value{tramp-postfix}
1664 @end ifset
1665 @ifset xemacs
1666 @value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop} @value{tramp-prefix-single-hop}toto@value{tramp-postfix}
1667 @end ifset
1668 @end example
1669
1670 @samp{@value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop}}
1671 is a possible completion for the respective method,
1672 @ifset emacs
1673 @samp{tmp/} stands for the directory @file{/tmp} on your local
1674 machine,
1675 @end ifset
1676 and @samp{@value{tramp-prefix-single-hop}toto@value{tramp-postfix}}
1677 might be a host @tramp has detected in your @file{~/.ssh/known_hosts}
1678 file (given you're using default method @option{ssh}).
1679
1680 If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to
1681 @samp{@value{tramp-prefix}telnet@value{tramp-postfix-single-hop}}.
1682 Next @kbd{@key{TAB}} brings you all machine names @tramp{} detects in
1683 your @file{/etc/hosts} file, let's say
1684
1685 @example
1686 @value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop}127.0.0.1@value{tramp-postfix} @value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop}192.168.0.1@value{tramp-postfix}
1687 @value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop}localhost@value{tramp-postfix} @value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop}melancholia.danann.net@value{tramp-postfix}
1688 @value{tramp-prefix-single-hop}telnet@value{tramp-postfix-single-hop}melancholia@value{tramp-postfix}
1689 @end example
1690
1691 Now you can choose the desired machine, and you can continue to
1692 complete file names on that machine.
1693
1694 As filename completion needs to fetch the listing of files from the
1695 remote machine, this feature is sometimes fairly slow. As @tramp{}
1696 does not yet cache the results of directory listing, there is no gain
1697 in performance the second time you complete filenames.
1698
1699 If the configuration files (@pxref{Customizing Completion}), which
1700 @tramp{} uses for analysis of completion, offer user names, those user
1701 names will be taken into account as well.
1454 1702
1455 1703
1456 @node Dired 1704 @node Dired
1457 @section Dired and filename completion 1705 @section Dired
1458 @cindex dired 1706 @cindex dired
1459 @cindex filename completion
1460 1707
1461 @tramp{} works transparently with dired, enabling you to use this powerful 1708 @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 1709 file management tool to manage files on any machine you have access to
1463 over the Internet. 1710 over the Internet.
1464
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.
1468
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.
1473 1711
1474 If you need to browse a directory tree, Dired is a better choice, at 1712 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 1713 present, than filename completion. Dired has its own cache mechanism
1476 and will only fetch the directory listing once. 1714 and will only fetch the directory listing once.
1477 1715
1514 1752
1515 @itemize @bullet 1753 @itemize @bullet
1516 @item 1754 @item
1517 Where can I get the latest @tramp{}? 1755 Where can I get the latest @tramp{}?
1518 1756
1519 @tramp{} is available at 1757 @tramp{} is available under the URL below.
1520 @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/tramp.tar.gz}. 1758
1521 There is also a Savannah project page, at 1759 @noindent
1522 @uref{https://savannah.gnu.org/projects/tramp/}. 1760 @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/tramp.tar.gz}
1523 1761
1762 @noindent
1763 There is also a Savannah project page.
1764
1765 @noindent
1766 @uref{https://savannah.gnu.org/projects/tramp/}
1524 1767
1525 @item 1768 @item
1526 Which systems does it work on? 1769 Which systems does it work on?
1527 1770
1528 The package has been used successfully on Emacs 20 and Emacs 21, as well 1771 The package has been used successfully on Emacs 20 and Emacs 21, as well
1553 Not all the older versions of @tramp{} supported XEmacs correctly. The 1796 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 1797 first thing to do is to make sure that you have the latest version of
1555 @tramp{} installed. 1798 @tramp{} installed.
1556 1799
1557 If you do, please try and find out exactly the conditions required for 1800 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 1801 the 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 1802 @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 1803 report would make it easier for the developers to work out what is
1561 wrong. 1804 going wrong.
1562 1805
1563 1806
1564 @item 1807 @item
1565 File name completion does not work with @tramp{} 1808 File name completion does not work with @tramp{}
1566 1809
1655 1898
1656 @c For the developer 1899 @c For the developer
1657 @node Version Control 1900 @node Version Control
1658 @chapter The inner workings of remote version control 1901 @chapter The inner workings of remote version control
1659 1902
1660 Unlike EFS and Ange-FTP, @tramp{} has full shell access to the remote 1903 Unlike @value{ftp-package-name}, @tramp{} has full shell access to the
1661 machine. This makes it possible to provide version control for files 1904 remote machine. This makes it possible to provide version control for
1662 accessed under @tramp{}. 1905 files accessed under @tramp{}.
1663 1906
1664 The actual version control binaries must be installed on the remote 1907 The actual version control binaries must be installed on the remote
1665 machine, accessible in the directories specified in 1908 machine, accessible in the directories specified in
1666 @var{tramp-remote-path}. 1909 @var{tramp-remote-path}.
1667 1910
1672 @menu 1915 @menu
1673 * Version Controlled Files:: Determining if a file is under version control. 1916 * Version Controlled Files:: Determining if a file is under version control.
1674 * Remote Commands:: Executing the version control commands on the remote machine. 1917 * Remote Commands:: Executing the version control commands on the remote machine.
1675 * Changed workfiles:: Detecting if the working file has changed. 1918 * Changed workfiles:: Detecting if the working file has changed.
1676 * Checking out files:: Bringing the workfile out of the repository. 1919 * Checking out files:: Bringing the workfile out of the repository.
1677 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere 1920 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere.
1678 @end menu 1921 @end menu
1679 1922
1680 1923
1681 @node Version Controlled Files 1924 @node Version Controlled Files
1682 @section Determining if a file is under version control 1925 @section Determining if a file is under version control
1878 @c host and then send commands to it. 2121 @c host and then send commands to it.
1879 @c * Mention that bookmarks are a cool feature to go along with Tramp. 2122 @c * Mention that bookmarks are a cool feature to go along with Tramp.
1880 @c * Make terminology "inline" vs "out-of-band" consistent. 2123 @c * Make terminology "inline" vs "out-of-band" consistent.
1881 @c It seems that "external" is also used instead of "out-of-band". 2124 @c It seems that "external" is also used instead of "out-of-band".
1882 2125
2126 @c * M. Albinus
2127 @c ** Use `filename' resp. `file name' consistently.
2128 @c ** Use `host' resp. `machine' consistently.
2129 @c ** Consistent small or capitalized words especially in menues.