]> code.delx.au - gnu-emacs/commitdiff
* net/tramp.el (tramp-default-method): We still need to check for
authorMichael Albinus <michael.albinus@gmx.de>
Wed, 20 Dec 2006 21:29:46 +0000 (21:29 +0000)
committerMichael Albinus <michael.albinus@gmx.de>
Wed, 20 Dec 2006 21:29:46 +0000 (21:29 +0000)
`executable-find', because it is not bound under Emacs 20.

lisp/ChangeLog
lisp/net/tramp.el

index 9549676f15572193de830d4c563bc5182a4ffb14..9fea5555845df6af880de2809a09caa033db8e40 100644 (file)
@@ -1,9 +1,8 @@
 2006-12-20  Michael Albinus  <michael.albinus@gmx.de>
 
-       * net/ange-ftp.el (ange-ftp-file-name-completion): Handle optional
-       parameter PREDICATE.
-
-       * lisp/tramp.el (tramp-handle-file-name-completion)
+       * net/tramp.el (tramp-default-method): We still need to check for
+       `executable-find', because it is not bound under Emacs 20.
+       (tramp-handle-file-name-completion)
        (tramp-completion-handle-file-name-completion): Handle optional
        parameter PREDICATE.
        (tramp-find-default-method): Add code for default values.
index 3cdcfd740840999f19538ac4ef124ee5a44520b6..000b0922b5016291c8a716627d805fd7196f6aac 100644 (file)
@@ -684,32 +684,41 @@ various functions for details."
   :type '(repeat (list string function string)))
 
 (defcustom tramp-default-method
-  (cond
-   ;; An external copy method seems to be preferred, because it is
-   ;; much more performant for large files, and it hasn't too serious
-   ;; delays for small files.  But it must be ensured that there
-   ;; aren't permanent password queries.  Either a password agent like
-   ;; "ssh-agent" or "Pageant" shall run, or the optional password.el
-   ;; package shall be active for password caching.
-   ((executable-find "pscp")
-    ;; PuTTY is installed.
-    (if        (or (fboundp 'password-read)
-           ;; Pageant is running.
-           (and (fboundp 'w32-window-exists-p)
-                (funcall (symbol-function 'w32-window-exists-p)
-                         "Pageant" "Pageant")))
-       "pscp"
-      "plink"))
-   ;; There is an ssh installation.
-   ((executable-find "scp")
-    (if        (or (fboundp 'password-read)
-           ;; ssh-agent is running.
-           (getenv "SSH_AUTH_SOCK")
-           (getenv "SSH_AGENT_PID"))
-       "scp"
-      "ssh"))
-   ;; Fallback.
-   (t "ftp"))
+  ;; An external copy method seems to be preferred, because it is much
+  ;; more performant for large files, and it hasn't too serious delays
+  ;; for small files.  But it must be ensured that there aren't
+  ;; permanent password queries.  Either a password agent like
+  ;; "ssh-agent" or "Pageant" shall run, or the optional password.el
+  ;; package shall be active for password caching.  "scpc" would be
+  ;; another good choice because of the "ControlMaster" option, but
+  ;; this is a more modern alternative in OpenSSH 4, which cannot be
+  ;; taken as default.
+  (let ((e-f (and (fboundp 'executable-find)
+                 (symbol-function 'executable-find))))
+    (cond
+     ;; PuTTY is installed.
+     ((and e-f (funcall e-f "pscp"))
+      (if (or (fboundp 'password-read)
+             ;; Pageant is running.
+             (and (fboundp 'w32-window-exists-p)
+                  (funcall (symbol-function 'w32-window-exists-p)
+                           "Pageant" "Pageant")))
+         "pscp"
+       "plink"))
+     ;; There is an ssh installation.
+     ((and e-f (funcall e-f "scp"))
+      (if (or (fboundp 'password-read)
+             ;; ssh-agent is running.
+             (getenv "SSH_AUTH_SOCK")
+             (getenv "SSH_AGENT_PID"))
+         "scp"
+       "ssh"))
+     ;; Under Emacs 20, `executable-find' does not exists.  So we
+     ;; couldn't check whether there is an ssh implementation.  Let's
+     ;; hope the best.
+     ((not e-f) "ssh")
+     ;; Fallback.
+     (t "ftp")))
   "*Default method to use for transferring files.
 See `tramp-methods' for possibilities.
 Also see `tramp-default-method-alist'."
@@ -2863,12 +2872,11 @@ of."
     (error
      "tramp-handle-file-name-completion invoked on non-tramp directory `%s'"
      directory))
-  (with-parsed-tramp-file-name directory nil
-    (try-completion
-     filename
-     (mapcar (lambda (x) (cons x nil))
-            (file-name-all-completions filename directory))
-     predicate)))
+  (try-completion
+   filename
+   (mapcar 'list (file-name-all-completions filename directory))
+   (when predicate
+     (lambda (x) (funcall predicate (expand-file-name (car x) directory))))))
 
 ;; cp, mv and ln
 
@@ -4635,7 +4643,8 @@ Falls back to normal file name handler if no tramp file name handler exists."
   (try-completion
    filename
    (mapcar 'list (file-name-all-completions filename directory))
-   predicate))
+   (when predicate
+     (lambda (x) (funcall predicate (expand-file-name (car x) directory))))))
 
 ;; I misuse a little bit the tramp-file-name structure in order to handle
 ;; completion possibilities for partial methods / user names / host names.