From 9ee5e81e952dc9bb9111b348f30b939399bed5bd Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Thu, 7 Jun 2007 20:14:45 +0000 Subject: [PATCH] Sync with Tramp 2.0.56. --- lisp/ChangeLog | 31 ++++++ lisp/net/tramp-ftp.el | 10 +- lisp/net/tramp-smb.el | 7 +- lisp/net/tramp-util.el | 1 - lisp/net/tramp-uu.el | 3 +- lisp/net/tramp-vc.el | 2 - lisp/net/tramp.el | 207 +++++++++++++++++++++++------------------ lisp/net/trampver.el | 2 +- man/ChangeLog | 7 ++ man/tramp.texi | 6 +- man/trampver.texi | 2 +- 11 files changed, 168 insertions(+), 110 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e298874025e..79fb349d949 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,34 @@ +2007-06-07 Michael Albinus + + Sync with Tramp 2.0.56. + + * net/tramp.el: + * net/tramp-ftp.el: + * net/tramp-smb.el: + * net/tramp-util.el: + * net/tramp-vc.el: + Don't load cl.el, because that pollutes the namespace. Replace cl + macros by their implementations where necessary. Requested by + Richard Stallman . + + * net/tramp.el (top): Make `set-buffer-multibyte' an alias if it + doesn't exist. + (with-parsed-tramp-file-name): Protect debug spec during compilation. + (tramp-handle-insert-directory): Check (featurep 'ls-lisp). + (tramp-file-name-p, tramp-file-name-multi-method) + (tramp-file-name-method, tramp-file-name-user) + (tramp-file-name-host, tramp-file-name-localname): New defuns, + replacing defstruct `tramp-file-name'. + (tramp-handle-file-remote-p, tramp-completion-dissect-file-name1) + (tramp-dissect-file-name, tramp-dissect-multi-file-name): + Apply `vector' instead of `make-tramp-file-name'. + (tramp-handle-make-auto-save-file-name): + Apply `tramp-temporary-file-directory' for compatibility reasons. + (tramp-completion-mode): Use `natnump' instead of `wholenump' + because of XEmacs. + (tramp-completion-mode): `last-input-event' is nil when XEmacs is + started. + 2007-06-07 David Kastrup * dired.el (dired-recursive-deletes, dired-recursive-copies): diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el index 2749a6858c0..d33873d1689 100644 --- a/lisp/net/tramp-ftp.el +++ b/lisp/net/tramp-ftp.el @@ -1,6 +1,7 @@ ;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP -*- coding: iso-8859-1; -*- -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, +;; 2007 Free Software Foundation, Inc. ;; Author: Michael Albinus ;; Keywords: comm, processes @@ -31,12 +32,7 @@ (require 'tramp) -(eval-when-compile - (require 'cl) - (require 'custom) - ;; Emacs 19.34 compatibility hack -- is this needed? - (or (>= emacs-major-version 20) - (load "cl-seq"))) +(eval-when-compile (require 'custom)) ;; Disable Ange-FTP from file-name-handler-alist. ;; To handle EFS, the following functions need to be dealt with: diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 5d5d441193d..7382bdef63b 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -31,12 +31,7 @@ (require 'tramp) ;; Pacify byte-compiler -(eval-when-compile - (require 'cl) - (require 'custom) - ;; Emacs 19.34 compatibility hack -- is this needed? - (or (>= emacs-major-version 20) - (load "cl-seq"))) +(eval-when-compile (require 'custom)) ;; Avoid byte-compiler warnings if the byte-compiler supports this. ;; Currently, XEmacs supports this. diff --git a/lisp/net/tramp-util.el b/lisp/net/tramp-util.el index 81857ae4225..4895edf019b 100644 --- a/lisp/net/tramp-util.el +++ b/lisp/net/tramp-util.el @@ -29,7 +29,6 @@ ;;; Code: -(eval-when-compile (require 'cl)) (require 'compile) (require 'tramp) (add-hook 'tramp-util-unload-hook diff --git a/lisp/net/tramp-uu.el b/lisp/net/tramp-uu.el index ce047489260..32bb9857f7f 100644 --- a/lisp/net/tramp-uu.el +++ b/lisp/net/tramp-uu.el @@ -1,7 +1,8 @@ ;;; -*- coding: iso-2022-7bit; -*- ;;; tramp-uu.el --- uuencode in Lisp -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, +;; 2007 Free Software Foundation, Inc. ;; Author: Kai Gro,A_(Bjohann ;; Keywords: comm, terminals diff --git a/lisp/net/tramp-vc.el b/lisp/net/tramp-vc.el index eda98364a98..cc5566d6354 100644 --- a/lisp/net/tramp-vc.el +++ b/lisp/net/tramp-vc.el @@ -31,8 +31,6 @@ ;;; Code: -(eval-when-compile - (require 'cl)) (require 'vc) ;; Old VC defines vc-rcs-release in vc.el, new VC requires extra module. (unless (boundp 'vc-rcs-release) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 20ac73d0f75..f85620ee323 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -151,11 +151,7 @@ Otherwise, use a separate filename syntax for Tramp.") (when (featurep 'tramp-smb) (unload-feature 'tramp-smb 'force))))))) -(require 'cl) (require 'custom) -;; Emacs 19.34 compatibility hack -- is this needed? -(or (>= emacs-major-version 20) - (load "cl-seq")) (unless (boundp 'custom-print-functions) (defvar custom-print-functions nil)) ; not autoloaded before Emacs 20.4 @@ -175,6 +171,11 @@ Otherwise, use a separate filename syntax for Tramp.") (when (boundp 'byte-compile-not-obsolete-var) (setq byte-compile-not-obsolete-var 'directory-sep-char))) +;; `set-buffer-multibyte' comes from Emacs Leim. +(eval-and-compile + (unless (fboundp 'set-buffer-multibyte) + (defalias 'set-buffer-multibyte 'ignore))) + ;;; User Customizable Internal Variables: (defgroup tramp nil @@ -2077,7 +2078,9 @@ If VAR is nil, then we bind `v' to the structure and `multi-method', (put 'with-parsed-tramp-file-name 'lisp-indent-function 2) ;; Enable debugging. -(def-edebug-spec with-parsed-tramp-file-name (form symbolp body)) +(eval-and-compile + (when (featurep 'edebug) + (def-edebug-spec with-parsed-tramp-file-name (form symbolp body)))) ;; Highlight as keyword. (when (functionp 'font-lock-add-keywords) (funcall 'font-lock-add-keywords @@ -2384,10 +2387,10 @@ target of the symlink differ." "Integer constant overflow in reader") (string-match "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'" - (caddr err))) - (let* ((big (read (substring (caddr err) 0 + (car (cddr err)))) + (let* ((big (read (substring (car (cddr err)) 0 (match-beginning 1)))) - (small (read (match-string 1 (caddr err)))) + (small (read (match-string 1 (car (cddr err))))) (twiddle (/ small 65536))) (cons (+ big twiddle) (- small (* twiddle 65536)))))))) @@ -2807,7 +2810,7 @@ of." object))) (cell root)) (while (cdr cell) - (if (and match (not (string-match match (caadr cell)))) + (if (and match (not (string-match match (car (cadr cell))))) ;; Remove from list (setcdr cell (cddr cell)) ;; Include in list @@ -3426,10 +3429,10 @@ This is like `dired-recursive-delete-directory' for tramp files." (defun tramp-handle-insert-directory (filename switches &optional wildcard full-directory-p) "Like `insert-directory' for tramp files." - (if (and (boundp 'ls-lisp-use-insert-directory-program) + (if (and (featurep 'ls-lisp) (not (symbol-value 'ls-lisp-use-insert-directory-program))) - (tramp-run-real-handler 'insert-directory - (list filename switches wildcard full-directory-p)) + (tramp-run-real-handler + 'insert-directory (list filename switches wildcard full-directory-p)) ;; For the moment, we assume that the remote "ls" program does not ;; grok "--dired". In the future, we should detect this on ;; connection setup. @@ -3869,12 +3872,7 @@ This will break if COMMAND prints a newline, followed by the value of "Like `file-remote-p' for tramp files." (when (tramp-tramp-file-p filename) (with-parsed-tramp-file-name filename nil - (make-tramp-file-name - :multi-method multi-method - :method method - :user user - :host host - :localname "")))) + (vector multi-method method user host "")))) (defun tramp-handle-insert-file-contents (filename &optional visit beg end replace) @@ -3919,7 +3917,7 @@ This will break if COMMAND prints a newline, followed by the value of (when (boundp 'last-coding-system-used) (set 'last-coding-system-used coding-system-used)) (list (expand-file-name filename) - (second result)))))) + (cadr result)))))) (defun tramp-handle-find-backup-file-name (filename) @@ -3978,7 +3976,8 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file." (when (and (string-match (car x) buffer-file-name) (not (car (cddr x)))) (setq tramp-auto-save-directory - (or tramp-auto-save-directory temporary-file-directory)))) + (or tramp-auto-save-directory + (tramp-temporary-file-directory))))) (symbol-value 'auto-save-file-name-transforms))) ;; Create directory. (when tramp-auto-save-directory @@ -4566,7 +4565,7 @@ Falls back to normal file name handler if no tramp file name handler exists." (member (match-string 1 file) (mapcar 'car tramp-methods))) ((or (equal last-input-event 'tab) ;; Emacs - (and (wholenump last-input-event) + (and (natnump last-input-event) (or ;; ?\t has event-modifier 'control (char-equal last-input-event ?\t) @@ -4575,6 +4574,10 @@ Falls back to normal file name handler if no tramp file name handler exists." (char-equal last-input-event ?\ ))))) ;; XEmacs (and (featurep 'xemacs) + ;; `last-input-event' might be nil. + (not (null last-input-event)) + ;; `last-input-event' may have no character approximation. + (funcall (symbol-function 'event-to-character) last-input-event) (or ;; ?\t has event-modifier 'control (char-equal @@ -4771,24 +4774,14 @@ remote host and localname (filename on remote host)." (match-string (nth 1 structure) name))) (if (and method (member method tramp-multi-methods)) ;; Not handled (yet). - (make-tramp-file-name - :multi-method method - :method nil - :user nil - :host nil - :localname nil) + (vector method nil nil nil nil) (let ((user (and (nth 2 structure) (match-string (nth 2 structure) name))) (host (and (nth 3 structure) (match-string (nth 3 structure) name))) (localname (and (nth 4 structure) (match-string (nth 4 structure) name)))) - (make-tramp-file-name - :multi-method nil - :method method - :user user - :host host - :localname localname))))))) + (vector nil method user host localname))))))) ;; This function returns all possible method completions, adding the ;; trailing method delimeter. @@ -5191,7 +5184,7 @@ USER the array of user names, HOST the array of host names." (aref user i) (aref host i)) (format "%s@%s:" (aref method i) (aref host i))) string-list)) - (incf i)) + (setq i (1+ i))) (format "*%s/%s %s*" prefix multi-method (apply 'concat (reverse string-list))))) @@ -5928,7 +5921,7 @@ log in as u2 to h2." ;; is done here. (funcall multi-func p m u h command) (erase-buffer) - (incf i))) + (setq i (1+ i)))) (tramp-open-connection-setup-interactive-shell p multi-method method user host) (tramp-post-connection multi-method method user host))))) @@ -6824,7 +6817,8 @@ If `tramp-discard-garbage' is nil, just erase buffer." (defun tramp-mode-string-to-int (mode-string) "Converts a ten-letter `drwxrwxrwx'-style mode string into mode bits." - (let* ((mode-chars (string-to-vector mode-string)) + (let* (case-fold-search + (mode-chars (string-to-vector mode-string)) (owner-read (aref mode-chars 1)) (owner-write (aref mode-chars 2)) (owner-execute-or-setid (aref mode-chars 3)) @@ -6836,45 +6830,61 @@ If `tramp-discard-garbage' is nil, just erase buffer." (other-execute-or-sticky (aref mode-chars 9))) (save-match-data (logior - (case owner-read - (?r (tramp-octal-to-decimal "00400")) (?- 0) - (t (error "Second char `%c' must be one of `r-'" owner-read))) - (case owner-write - (?w (tramp-octal-to-decimal "00200")) (?- 0) - (t (error "Third char `%c' must be one of `w-'" owner-write))) - (case owner-execute-or-setid - (?x (tramp-octal-to-decimal "00100")) - (?S (tramp-octal-to-decimal "04000")) - (?s (tramp-octal-to-decimal "04100")) - (?- 0) - (t (error "Fourth char `%c' must be one of `xsS-'" - owner-execute-or-setid))) - (case group-read - (?r (tramp-octal-to-decimal "00040")) (?- 0) - (t (error "Fifth char `%c' must be one of `r-'" group-read))) - (case group-write - (?w (tramp-octal-to-decimal "00020")) (?- 0) - (t (error "Sixth char `%c' must be one of `w-'" group-write))) - (case group-execute-or-setid - (?x (tramp-octal-to-decimal "00010")) - (?S (tramp-octal-to-decimal "02000")) - (?s (tramp-octal-to-decimal "02010")) - (?- 0) - (t (error "Seventh char `%c' must be one of `xsS-'" - group-execute-or-setid))) - (case other-read - (?r (tramp-octal-to-decimal "00004")) (?- 0) - (t (error "Eighth char `%c' must be one of `r-'" other-read))) - (case other-write - (?w (tramp-octal-to-decimal "00002")) (?- 0) + (cond + ((char-equal owner-read ?r) (tramp-octal-to-decimal "00400")) + ((char-equal owner-read ?-) 0) + (t (error "Second char `%c' must be one of `r-'" owner-read))) + (cond + ((char-equal owner-write ?w) (tramp-octal-to-decimal "00200")) + ((char-equal owner-write ?-) 0) + (t (error "Third char `%c' must be one of `w-'" owner-write))) + (cond + ((char-equal owner-execute-or-setid ?x) + (tramp-octal-to-decimal "00100")) + ((char-equal owner-execute-or-setid ?S) + (tramp-octal-to-decimal "04000")) + ((char-equal owner-execute-or-setid ?s) + (tramp-octal-to-decimal "04100")) + ((char-equal owner-execute-or-setid ?-) 0) + (t (error "Fourth char `%c' must be one of `xsS-'" + owner-execute-or-setid))) + (cond + ((char-equal group-read ?r) (tramp-octal-to-decimal "00040")) + ((char-equal group-read ?-) 0) + (t (error "Fifth char `%c' must be one of `r-'" group-read))) + (cond + ((char-equal group-write ?w) (tramp-octal-to-decimal "00020")) + ((char-equal group-write ?-) 0) + (t (error "Sixth char `%c' must be one of `w-'" group-write))) + (cond + ((char-equal group-execute-or-setid ?x) + (tramp-octal-to-decimal "00010")) + ((char-equal group-execute-or-setid ?S) + (tramp-octal-to-decimal "02000")) + ((char-equal group-execute-or-setid ?s) + (tramp-octal-to-decimal "02010")) + ((char-equal group-execute-or-setid ?-) 0) + (t (error "Seventh char `%c' must be one of `xsS-'" + group-execute-or-setid))) + (cond + ((char-equal other-read ?r) + (tramp-octal-to-decimal "00004")) + ((char-equal other-read ?-) 0) + (t (error "Eighth char `%c' must be one of `r-'" other-read))) + (cond + ((char-equal other-write ?w) (tramp-octal-to-decimal "00002")) + ((char-equal other-write ?-) 0) (t (error "Nineth char `%c' must be one of `w-'" other-write))) - (case other-execute-or-sticky - (?x (tramp-octal-to-decimal "00001")) - (?T (tramp-octal-to-decimal "01000")) - (?t (tramp-octal-to-decimal "01001")) - (?- 0) - (t (error "Tenth char `%c' must be one of `xtT-'" - other-execute-or-sticky))))))) + (cond + ((char-equal other-execute-or-sticky ?x) + (tramp-octal-to-decimal "00001")) + ((char-equal other-execute-or-sticky ?T) + (tramp-octal-to-decimal "01000")) + ((char-equal other-execute-or-sticky ?t) + (tramp-octal-to-decimal "01001")) + ((char-equal other-execute-or-sticky ?-) 0) + (t (error "Tenth char `%c' must be one of `xtT-'" + other-execute-or-sticky))))))) (defun tramp-convert-file-attributes (multi-method method user host attr) "Convert file-attributes ATTR generated by perl script or ls. @@ -6977,7 +6987,29 @@ Not actually used. Use `(format \"%o\" i)' instead?" ;; internal data structure. Convenience functions for internal ;; data structure. -(defstruct tramp-file-name multi-method method user host localname) +(defun tramp-file-name-p (obj) + "Check whether TRAMP-FILE-NAME is a Tramp object." + (and (vectorp obj) (= 5 (length obj)))) + +(defun tramp-file-name-multi-method (obj) + "Return MULTI-METHOD component of TRAMP-FILE-NAME." + (and (tramp-file-name-p obj) (aref obj 0))) + +(defun tramp-file-name-method (obj) + "Return METHOD component of TRAMP-FILE-NAME." + (and (tramp-file-name-p obj) (aref obj 1))) + +(defun tramp-file-name-user (obj) + "Return USER component of TRAMP-FILE-NAME." + (and (tramp-file-name-p obj) (aref obj 2))) + +(defun tramp-file-name-host (obj) + "Return HOST component of TRAMP-FILE-NAME." + (and (tramp-file-name-p obj) (aref obj 3))) + +(defun tramp-file-name-localname (obj) + "Return LOCALNAME component of TRAMP-FILE-NAME." + (and (tramp-file-name-p obj) (aref obj 4))) (defun tramp-tramp-file-p (name) "Return t iff NAME is a tramp file." @@ -7010,12 +7042,7 @@ localname (file name on remote host)." (let ((user (match-string (nth 2 tramp-file-name-structure) name)) (host (match-string (nth 3 tramp-file-name-structure) name)) (localname (match-string (nth 4 tramp-file-name-structure) name))) - (make-tramp-file-name - :multi-method nil - :method method - :user (or user nil) - :host host - :localname localname)))))) + (vector nil method (or user nil) host localname)))))) (defun tramp-find-default-method (user host) "Look up the right method to use in `tramp-default-method-alist'." @@ -7055,7 +7082,7 @@ If both MULTI-METHOD and METHOD are nil, do a lookup in (setq method (match-string method-index name)) (setq hops (match-string hops-index name)) (setq len (/ (length (match-data t)) 2)) - (when (< localname-index 0) (incf localname-index len)) + (when (< localname-index 0) (setq localname-index (+ localname-index len))) (setq localname (match-string localname-index name)) (let ((index 0)) (while (string-match hop-regexp hops index) @@ -7066,12 +7093,12 @@ If both MULTI-METHOD and METHOD are nil, do a lookup in (cons (match-string hop-user-index hops) hop-users)) (setq hop-hosts (cons (match-string hop-host-index hops) hop-hosts)))) - (make-tramp-file-name - :multi-method method - :method (apply 'vector (reverse hop-methods)) - :user (apply 'vector (reverse hop-users)) - :host (apply 'vector (reverse hop-hosts)) - :localname localname))) + (vector + method + (apply 'vector (reverse hop-methods)) + (apply 'vector (reverse hop-users)) + (apply 'vector (reverse hop-hosts)) + localname))) (defun tramp-make-tramp-file-name (multi-method method user host localname) "Constructs a tramp file name from METHOD, USER, HOST and LOCALNAME." @@ -7103,7 +7130,7 @@ If both MULTI-METHOD and METHOD are nil, do a lookup in (let ((m (aref method i)) (u (aref user i)) (h (aref host i))) (setq hops (concat hops (format-spec hop-format `((?m . ,m) (?u . ,u) (?h . ,h))))) - (incf i))) + (setq i (1+ i)))) (concat prefix hops localname))) (defun tramp-make-copy-program-file-name (user host localname) @@ -7218,7 +7245,7 @@ as default." (assoc (tramp-find-method multi-method method user host) tramp-methods)))) (if entry - (second entry) + (cadr entry) (symbol-value param)))) diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el index 04f7bc754f2..485c58afa65 100644 --- a/lisp/net/trampver.el +++ b/lisp/net/trampver.el @@ -30,7 +30,7 @@ ;; are auto-frobbed from configure.ac, so you should edit that file and run ;; "autoconf && ./configure" to change them. -(defconst tramp-version "2.0.55" +(defconst tramp-version "2.0.56" "This version of Tramp.") (defconst tramp-bug-report-address "tramp-devel@gnu.org" diff --git a/man/ChangeLog b/man/ChangeLog index f9459bfcc2d..98faf2482b1 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,10 @@ +2007-06-07 Michael Albinus + + Sync with Tramp 2.0.56. + + * tramp.texi (Frequently Asked Questions): Improve ~/.zshrc + settings. Reported by Ted Zlatanov . + 2007-06-07 Alan Mackenzie * display.texi (Optional Mode Line): Document the new form of diff --git a/man/tramp.texi b/man/tramp.texi index 7acef2663e4..67b0647787c 100644 --- a/man/tramp.texi +++ b/man/tramp.texi @@ -2051,7 +2051,11 @@ setting the regular expression detecting the prompt. A special problem is the zsh, which uses left-hand side and right-hand side prompts in parallel. Therefore, it is necessary to disable the zsh line editor on the remote host. You shall add to @file{~/.zshrc} -the following command: @command{[ $TERM = "dumb" ] && unsetopt zle}. +the following command: + +@example +[ $TERM = "dumb" ] && unsetopt zle && PS1='$ ' +@end example @item @value{tramp} doesn't transfer strings with more than 500 characters diff --git a/man/trampver.texi b/man/trampver.texi index c512de4c74b..6c770dc8ad1 100644 --- a/man/trampver.texi +++ b/man/trampver.texi @@ -9,7 +9,7 @@ @c In the Tramp CVS, the version number is auto-frobbed from @c configure.ac, so you should edit that file and run @c "autoconf && ./configure" to change the version number. -@set trampver 2.0.55 +@set trampver 2.0.56 @c Other flags from configuration @set prefix /usr/local -- 2.39.2