changeset 107085:d7831d04952b

* dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call `dired-uncache' for every elemnt which is an absolute file name. * net/tramp.el (tramp-handle-dired-uncache): When DIR is not a directory, handle its directory component. (tramp-handle-file-remote-p): Let-bind `tramp-verbose' to 3; this function is called permanently and creates noise, otherwise. * net/tramp-imap.el (tramp-imap-handle-insert-directory): * net/tramp-smb.el (tramp-smb-handle-insert-directory): Handle the case, FILENAME is not in `default-directory'. (Bug#5478)
author Michael Albinus <michael.albinus@gmx.de>
date Thu, 04 Feb 2010 17:25:57 +0100
parents 316cee8951ad
children 1786f2e6a856
files lisp/ChangeLog lisp/dired.el lisp/net/tramp-imap.el lisp/net/tramp-smb.el lisp/net/tramp.el
diffstat 5 files changed, 56 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Feb 03 21:21:40 2010 -0800
+++ b/lisp/ChangeLog	Thu Feb 04 17:25:57 2010 +0100
@@ -1,3 +1,17 @@
+2010-02-04  Michael Albinus  <michael.albinus@gmx.de>
+
+	* dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
+	`dired-uncache' for every elemnt which is an absolute file name.
+
+	* net/tramp.el (tramp-handle-dired-uncache): When DIR is not a
+	directory, handle its directory component.
+	(tramp-handle-file-remote-p): Let-bind `tramp-verbose' to 3; this
+	function is called permanently and creates noise, otherwise.
+
+	* net/tramp-imap.el (tramp-imap-handle-insert-directory):
+	* net/tramp-smb.el (tramp-smb-handle-insert-directory):
+	Handle the case, FILENAME is not in `default-directory'.  (Bug#5478)
+
 2010-02-04  David Burger  <dburger@google.com>  (tiny change)
 
 	* macros.el (apply-macro-to-region-lines):
--- a/lisp/dired.el	Wed Feb 03 21:21:40 2010 -0800
+++ b/lisp/dired.el	Thu Feb 04 17:25:57 2010 +0100
@@ -1144,8 +1144,12 @@
     (setq mark-alist;; only after dired-remember-hidden since this unhides:
 	  (dired-remember-marks (point-min) (point-max)))
     ;; treat top level dir extra (it may contain wildcards)
-    (dired-uncache
-     (if (consp dired-directory) (car dired-directory) dired-directory))
+    (if (not (consp dired-directory))
+	(dired-uncache dired-directory)
+      (dired-uncache (car dired-directory))
+      (dolist (dir (cdr dired-directory))
+	(if (file-name-absolute-p dir)
+	    (dired-uncache dir))))
     ;; Run dired-after-readin-hook just once, below.
     (let ((dired-after-readin-hook nil))
       (dired-readin)
--- a/lisp/net/tramp-imap.el	Wed Feb 03 21:21:40 2010 -0800
+++ b/lisp/net/tramp-imap.el	Thu Feb 04 17:25:57 2010 +0100
@@ -472,14 +472,18 @@
 		(nth 6 x)))) ; date
 	     ;; For the file name, we set the `dired-filename'
 	     ;; property.  This allows to handle file names with
-	     ;; leading or trailing spaces as well.
+	     ;; leading or trailing spaces as well.  The inserted name
+	     ;; could be from somewhere else, so we use the relative
+	     ;; file name of `default-directory'.
 	     (let ((pos (point)))
-	       (insert (format "%s" (nth 0 x))) ; file name
-	       (put-text-property pos (point) 'dired-filename t))
-	     (insert "\n")
+	       (insert
+		(format
+		 "%s\n"
+		 (file-relative-name (expand-file-name (nth 0 x) filename))))
+	       (put-text-property pos (1- (point)) 'dired-filename t))
 	     (forward-line)
 	     (beginning-of-line)))
-	   entries)))))
+	 entries)))))
 
 (defun tramp-imap-handle-insert-file-contents
   (filename &optional visit beg end replace)
--- a/lisp/net/tramp-smb.el	Wed Feb 03 21:21:40 2010 -0800
+++ b/lisp/net/tramp-smb.el	Thu Feb 04 17:25:57 2010 +0100
@@ -716,7 +716,7 @@
 		    (when (tramp-smb-get-stat-capability v)
 		      (ignore-errors
 			(file-attributes
-			 (expand-file-name (nth 0 x)) 'string)))))
+			 (expand-file-name (nth 0 x) filename) 'string)))))
 	       (insert
 		(format
 		 "%10s %3d %-8s %-8s %8s %s "
@@ -732,9 +732,14 @@
 		      "%b %e %R"
 		    "%b %e  %Y")
 		  (nth 3 x)))) ; date
-	       ;; We mark the filename.
+	       ;; We mark the file name.  The inserted name could be
+	       ;; from somewhere else, so we use the relative file
+	       ;; name of `default-directory'.
 	       (let ((start (point)))
-		 (insert (format "%s\n" (nth 0 x))) ; file name
+		 (insert
+		  (format
+		   "%s\n"
+		   (file-relative-name (expand-file-name (nth 0 x) filename))))
 		 (put-text-property start (1- (point)) 'dired-filename t))
 	       (forward-line)
 	       (beginning-of-line))))
--- a/lisp/net/tramp.el	Wed Feb 03 21:21:40 2010 -0800
+++ b/lisp/net/tramp.el	Thu Feb 04 17:25:57 2010 +0100
@@ -4035,9 +4035,11 @@
 			(concat file ".z"))
 		       (t nil)))))))))
 
-(defun tramp-handle-dired-uncache (dir)
+(defun tramp-handle-dired-uncache (dir &optional dir-p)
   "Like `dired-uncache' for Tramp files."
-  (with-parsed-tramp-file-name dir nil
+  ;; DIR-P is valid for XEmacs only.
+  (with-parsed-tramp-file-name
+      (if (or dir-p (file-directory-p dir)) dir (file-name-directory dir)) nil
     (tramp-flush-file-property v localname)))
 
 ;; Pacify byte-compiler.  The function is needed on XEmacs only.  I'm
@@ -4663,20 +4665,21 @@
 
 (defun tramp-handle-file-remote-p (filename &optional identification connected)
   "Like `file-remote-p' for Tramp files."
-  (when (tramp-tramp-file-p filename)
-    (let* ((v (tramp-dissect-file-name filename))
-	   (p (tramp-get-connection-process v))
-	   (c (and p (processp p) (memq (process-status p) '(run open)))))
-      ;; We expand the file name only, if there is already a connection.
-      (with-parsed-tramp-file-name
-	  (if c (expand-file-name filename) filename) nil
-	(and (or (not connected) c)
-	     (cond
-	      ((eq identification 'method) method)
-	      ((eq identification 'user) user)
-	      ((eq identification 'host) host)
-	      ((eq identification 'localname) localname)
-	      (t (tramp-make-tramp-file-name method user host ""))))))))
+  (let ((tramp-verbose 3))
+    (when (tramp-tramp-file-p filename)
+      (let* ((v (tramp-dissect-file-name filename))
+	     (p (tramp-get-connection-process v))
+	     (c (and p (processp p) (memq (process-status p) '(run open)))))
+	;; We expand the file name only, if there is already a connection.
+	(with-parsed-tramp-file-name
+	    (if c (expand-file-name filename) filename) nil
+	  (and (or (not connected) c)
+	       (cond
+		((eq identification 'method) method)
+		((eq identification 'user) user)
+		((eq identification 'host) host)
+		((eq identification 'localname) localname)
+		(t (tramp-make-tramp-file-name method user host "")))))))))
 
 (defun tramp-find-file-name-coding-system-alist (filename tmpname)
   "Like `find-operation-coding-system' for Tramp filenames.