summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Albinus <albinus@detlef>2010-01-28 22:13:01 +0100
committerMichael Albinus <albinus@detlef>2010-01-28 22:13:01 +0100
commitf95e14e904f14afd92094e9d527dc3cd7164ac41 (patch)
treeff8008098debf16f322163b9b490ee73c1e0c9e3
parente4a8e1b74917ab02487570b17fbfa53449d62926 (diff)
downloademacs-f95e14e904f14afd92094e9d527dc3cd7164ac41.tar.gz
* net/ange-ftp.el (ange-ftp-insert-directory): Handle the case,
FILENAME is not in `default-directory'. (Bug#5478) * net/tramp.el (tramp-handle-insert-directory): Simplify handling of SWITCHES. Handle the case, FILENAME is not in `default-directory'. (Bug#5478) (tramp-register-file-name-handlers): Add safe-magic property.
-rw-r--r--lisp/ChangeLog10
-rw-r--r--lisp/net/ange-ftp.el13
-rwxr-xr-xlisp/net/tramp.el35
3 files changed, 45 insertions, 13 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index fbac27409aa..4020daccc72 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,13 @@
+2010-01-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/ange-ftp.el (ange-ftp-insert-directory): Handle the case,
+ FILENAME is not in `default-directory'. (Bug#5478)
+
+ * net/tramp.el (tramp-handle-insert-directory): Simplify handling
+ of SWITCHES. Handle the case, FILENAME is not in
+ `default-directory'. (Bug#5478)
+ (tramp-register-file-name-handlers): Add safe-magic property.
+
2010-01-28 Chong Yidong <cyd@stupidchicken.com>
* arc-mode.el (archive-zip-extract): Quote the argument passed to
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index b045431bf78..98a3f557595 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -4542,7 +4542,18 @@ NEWNAME should be the name to give the new compressed or uncompressed file.")
(if (string-match (concat "^.+[^ ] " (regexp-quote filename)
"\\( -> .*\\)?[@/*=]?\n") dirlist)
(match-string 0 dirlist)
- "")))))))
+ "")))))
+
+ ;; The inserted file could be from somewhere else.
+ (when (and (not wildcard) (not full)
+ (search-backward
+ (if (zerop (length (file-name-nondirectory
+ (expand-file-name file))))
+ "."
+ (file-name-nondirectory file))
+ nil 'noerror))
+ (replace-match (file-relative-name (expand-file-name file)) t)
+ (goto-char (point-max)))))
(defun ange-ftp-dired-uncache (dir)
(if (ange-ftp-ftp-name (expand-file-name dir))
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index d411c69cb96..9e8522f3db0 100755
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -4062,26 +4062,25 @@ This is like `dired-recursive-delete-directory' for Tramp files."
(not (symbol-value 'ls-lisp-use-insert-directory-program)))
(tramp-run-real-handler
'insert-directory (list filename switches wildcard full-directory-p))
- (when (and (string-match "^--dired\\s-+" switches)
+ (when (stringp switches)
+ (setq switches (split-string switches)))
+ (when (and (member "--dired" switches)
(not (tramp-get-ls-command-with-dired v)))
- (setq switches (replace-match "" nil t switches)))
- (tramp-message
- v 4 "Inserting directory `ls %s %s', wildcard %s, fulldir %s"
- switches filename (if wildcard "yes" "no")
- (if full-directory-p "yes" "no"))
+ (setq switches (delete "--dired" switches)))
(when wildcard
(setq wildcard (tramp-run-real-handler
'file-name-nondirectory (list localname)))
(setq localname (tramp-run-real-handler
'file-name-directory (list localname))))
- (when (listp switches)
- (setq switches (mapconcat 'identity switches " ")))
(unless full-directory-p
- (setq switches (concat "-d " switches)))
+ (setq switches (add-to-list 'switches "-d" 'append)))
+ (setq switches (mapconcat 'tramp-shell-quote-argument switches " "))
(when wildcard
- (setq switches (concat switches " " wildcard)))
- (when (string-match "'" switches)
- (setq switches (replace-match "\\\\'" nil nil switches)))
+ (setq switches (concat switches " " wildcard)))
+ (tramp-message
+ v 4 "Inserting directory `ls %s %s', wildcard %s, fulldir %s"
+ switches filename (if wildcard "yes" "no")
+ (if full-directory-p "yes" "no"))
;; If `full-directory-p', we just say `ls -l FILENAME'.
;; Else we chdir to the parent directory, then say `ls -ld BASENAME'.
(if full-directory-p
@@ -4144,6 +4143,17 @@ This is like `dired-recursive-delete-directory' for Tramp files."
(while (looking-at "//")
(forward-line 1)
(delete-region (match-beginning 0) (point)))
+
+ ;; The inserted file could be from somewhere else.
+ (when (and (not wildcard) (not full-directory-p))
+ (goto-char (point-max))
+ (search-backward
+ (if (zerop (length (file-name-nondirectory filename)))
+ "."
+ (file-name-nondirectory filename))
+ beg 'noerror)
+ (replace-match (file-relative-name filename) t))
+
(goto-char (point-max))))))
(defun tramp-handle-unhandled-file-name-directory (filename)
@@ -5481,6 +5491,7 @@ Falls back to normal file name handler if no Tramp file name handler exists."
;; Add the handlers.
(add-to-list 'file-name-handler-alist
(cons tramp-file-name-regexp 'tramp-file-name-handler))
+ (put 'tramp-file-name-handler 'safe-magic t)
(add-to-list 'file-name-handler-alist
(cons tramp-completion-file-name-regexp
'tramp-completion-file-name-handler))