changeset 53459:4b85f31aef7c

(ido-nonreadable-directory-p): New defun to check for nonreadable directory without activating tramp to avoid problems with checking incomplete tramp paths. (ido-set-current-directory, ido-file-internal) (ido-file-name-all-completions1): Use it.
author Kim F. Storm <storm@cua.dk>
date Wed, 31 Dec 2003 00:00:12 +0000
parents 7922c045221b
children 6f8ae3624b9e
files lisp/ido.el
diffstat 1 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ido.el	Tue Dec 30 23:59:39 2003 +0000
+++ b/lisp/ido.el	Wed Dec 31 00:00:12 2003 +0000
@@ -1397,6 +1397,15 @@
 	(substring s 0 l)
       s)))
 
+(defun ido-nonreadable-directory-p (dir)
+  ;; Return t if dir is a directory, but not readable
+  ;; Do not check for non-readable directories via tramp, as this causes a premature
+  ;; connect on incomplete tramp paths (after entring just method:).
+  (let ((ido-enable-tramp-completion nil))
+    (and (ido-final-slash dir)
+	 (file-directory-p dir)
+	 (not (file-readable-p dir)))))
+
 (defun ido-set-current-directory (dir &optional subdir no-merge)
   ;; Set ido's current directory to DIR or DIR/SUBDIR
   (setq dir (ido-final-slash dir t))
@@ -1410,7 +1419,7 @@
     (setq ido-current-directory dir)
     (if (get-buffer ido-completion-buffer)
 	(kill-buffer ido-completion-buffer))
-    (setq ido-directory-nonreadable (not (file-readable-p dir)))
+    (setq ido-directory-nonreadable (ido-nonreadable-directory-p dir))
     t))
 
 (defun ido-set-current-home (&optional dir)
@@ -1867,7 +1876,7 @@
   (unless item
     (setq item 'file))
   (let* ((ido-current-directory (ido-expand-directory default))
-	 (ido-directory-nonreadable (not (file-readable-p ido-current-directory)))
+	 (ido-directory-nonreadable (ido-nonreadable-directory-p ido-current-directory))
 	 filename)
 
     (cond
@@ -2706,7 +2715,7 @@
 
 (defun ido-file-name-all-completions1 (dir)
   (cond
-   ((not (file-readable-p dir)) '())
+   ((ido-nonreadable-directory-p dir) '())
    ((and ido-enable-tramp-completion
 	 (string-match "\\`/\\([^/:]+:\\([^/:@]+@\\)?\\)\\'" dir))