I got TRAMP 2.0.25 to work under NT Emacs 21.2.1 using the latest installation of the Cygwin tools (1.3.12-2) using Cygwin's ssh, scp, and ssh-agent. The remote host was running Debian GNU/Linux. I haven't been brave enough to try a Cygwin-to-Cygwin configuration yet -- I think Cygwin-to-UNIX is more common anyway. Also, I didn't try getting the "telnet" method to work, on the theory that using scp is more common.
Here's what I had to do to make it work: 1. In my .emacs startup file, I do: (require 'tramp) (setq tramp-default-method "scpx") This is required when using TRAMP under NT Emacs as described in the manual. to load up TRAMP. I have load-path set appropriately. 2. Next, my .emacs file executes this horror: (let ((shell-file-name "c:/apps/cygwin/bin/bash.exe")) (shell-command "echo /tmp/ssh-*/agent.* 2>/dev/null" " *temp*")) (save-excursion (set-buffer " *temp*") (end-of-line) (if (> (buffer-size) 5) (setenv "SSH_AUTH_SOCK" (buffer-substring (point-min) (point))) (ding) (message "my-general.el: WARNING: ssh-agent is not running!") (sit-for 3))) The above mess is to cope with what I think is a fairly common situation -- namely, where the user launches NT Emacs using a shortcut on the desktop but starts ssh-agent from a bash shell also launched from the desktop. Since Emacs is not a descendant of ssh-agent, it does not inherit the SSH_AUTH_SOCK environment variable (and neither does scp). My solution (above) is a total hack. It malfunctions if the echo command outputs more than one pathname, which happens if you have old ssh-agent socket directories lying around. If TRAMP had were to call a hook at just the right moment, I could write some Elisp to find the most recent ssh-agent socket file and setenv the SSH_AUTH_SOCK environment variable within Emacs. Maybe the general solution is to create a tramp-methods key named tramp-pre-rcp-hook, which is run just before tramp-rcp-program executes? 3. Next, I had to make the following change to lisp/tramp.el. *************** *** 3113,3118 **** --- 3113,3119 ---- "Like `insert-file-contents' for tramp files." (barf-if-buffer-read-only) (setq filename (expand-file-name filename)) + (setq buffer-file-name filename) (with-parsed-tramp-file-name filename nil (when (tramp-ange-ftp-file-name-p multi-method method user host) (tramp-invoke-ange-ftp 'insert-file-contents This may not be the right thing to do, but it prevents a wrong-type-argument error from vc-file-not-found-hook and from find-file-noselect-1 when they each evaluate (file-truename buffer-file-name) with buffer-file-name set to nil. 4. Next, I had to make the following change to lisp/tramp.el. *** 3024,3030 **** (unless (file-exists-p filename) (error "Cannot make local copy of non-existing file `%s'" filename)) ! (setq tmpfil (tramp-make-temp-file)) (cond (rcp-program ;; Use rcp-like program for file transfer. (tramp-message-for-buffer --- 3024,3030 ---- (unless (file-exists-p filename) (error "Cannot make local copy of non-existing file `%s'" filename)) ! (setq tmpfil (substring (tramp-make-temp-file) 2)) (cond (rcp-program ;; Use rcp-like program for file transfer. (tramp-message-for-buffer This is to cope with the fact that, by default, NT Emacs has temporary-file-directory set to C:/DOCUME~1/username/LOCALS~1/Temp/, which is unacceptable to Cygwin's scp as the second argument, because scp interprets the "c:" as a hostname! The substring call chops off the "C:", leaving tmpfil set to a value that is acceptable to both Cygwin's scp and NT Emacs (and, more importantly, means the same thing to both of them). This change doesn't pass the "smell test" to me, but it probably works 99% of the time. I haven't thought of a more general solution yet. I hope this helps. -- Francis Litterio [EMAIL PROTECTED] http://world.std.com/~franl/ GPG and PGP public keys available on keyservers. _______________________________________________ Tramp-devel mailing list [EMAIL PROTECTED] http://mail.freesoftware.fsf.org/mailman/listinfo/tramp-devel