diff options
| -rw-r--r-- | lisp/ChangeLog | 43 | ||||
| -rw-r--r-- | lisp/net/tramp-compat.el | 108 | ||||
| -rw-r--r-- | lisp/net/tramp-fish.el | 14 | ||||
| -rw-r--r-- | lisp/net/tramp.el | 151 | ||||
| -rw-r--r-- | lisp/net/trampver.el | 17 |
5 files changed, 187 insertions, 146 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e071cbc43bb..1177e458b83 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,46 @@ | |||
| 1 | 2010-04-10 Michael Albinus <michael.albinus@gmx.de> | ||
| 2 | |||
| 3 | Synchronize with Tramp repository. | ||
| 4 | |||
| 5 | * net/tramp.el (tramp-completion-function-alist) | ||
| 6 | (tramp-file-name-regexp, tramp-chunksize) | ||
| 7 | (tramp-local-coding-commands, tramp-remote-coding-commands): Fix | ||
| 8 | docstring. | ||
| 9 | (tramp-remote-process-environment): Use `format' instead of | ||
| 10 | `concat'. | ||
| 11 | (tramp-handle-directory-files-and-attributes) | ||
| 12 | (tramp-get-remote-path): Use `copy-tree'. | ||
| 13 | (tramp-handle-file-name-all-completions): Backward/ XEmacs | ||
| 14 | compatibility: Use `completion-ignore-case' if | ||
| 15 | `read-file-name-completion-ignore-case' does not exist. | ||
| 16 | (tramp-do-copy-or-rename-file-directly): Do not use | ||
| 17 | `tramp-handle-file-remote-p'. | ||
| 18 | (tramp-do-copy-or-rename-file-out-of-band): Use | ||
| 19 | `tramp-compat-delete-directory'. | ||
| 20 | (tramp-do-copy-or-rename-file-out-of-band) | ||
| 21 | (tramp-compute-multi-hops, tramp-maybe-open-connection): Use | ||
| 22 | `format-spec-make'. | ||
| 23 | (tramp-find-foreign-file-name-handler) | ||
| 24 | (tramp-advice-make-auto-save-file-name) | ||
| 25 | (tramp-set-auto-save-file-modes): Remove superfluous check for | ||
| 26 | `stringp'. This is done inside `tramp-tramp-file-p'. | ||
| 27 | (tramp-debug-outline-regexp): New defconst. | ||
| 28 | (tramp-get-debug-buffer): Use it. | ||
| 29 | (tramp-check-for-regexp): Use (forward-line 1). | ||
| 30 | (tramp-set-auto-save-file-modes): Adapt version check. | ||
| 31 | |||
| 32 | * net/tramp-compat.el (tramp-advice-file-expand-wildcards): Wrap | ||
| 33 | call of `featurep' for 2nd argument. | ||
| 34 | (tramp-compat-make-temp-file): Simplify fallback implementation. | ||
| 35 | (tramp-compat-copy-tree): Remove function. | ||
| 36 | (tramp-compat-delete-directory): Provide implementation for older | ||
| 37 | Emacsen. | ||
| 38 | |||
| 39 | * net/tramp-fish.el (tramp-fish-handle-directory-files-and-attributes): | ||
| 40 | Do not use `tramp-fish-handle-file-attributes. | ||
| 41 | |||
| 42 | * net/trampver.el: Update release number. | ||
| 43 | |||
| 1 | 2010-04-10 Glenn Morris <rgm@gnu.org> | 44 | 2010-04-10 Glenn Morris <rgm@gnu.org> |
| 2 | 45 | ||
| 3 | * progmodes/compile.el (compilation-save-buffers-predicate): | 46 | * progmodes/compile.el (compilation-save-buffers-predicate): |
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index 9bcbe21116d..2d8f7535db0 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el | |||
| @@ -22,9 +22,9 @@ | |||
| 22 | 22 | ||
| 23 | ;;; Commentary: | 23 | ;;; Commentary: |
| 24 | 24 | ||
| 25 | ;; Tramp's main Emacs version for development is GNU Emacs 23. This | 25 | ;; Tramp's main Emacs version for development is GNU Emacs 24. This |
| 26 | ;; package provides compatibility functions for GNU Emacs 21, GNU | 26 | ;; package provides compatibility functions for GNU Emacs 22, GNU |
| 27 | ;; Emacs 22 and XEmacs 21.4+. | 27 | ;; Emacs 23 and XEmacs 21.4+. |
| 28 | 28 | ||
| 29 | ;;; Code: | 29 | ;;; Code: |
| 30 | 30 | ||
| @@ -120,7 +120,7 @@ | |||
| 120 | (tramp-file-name-handler | 120 | (tramp-file-name-handler |
| 121 | 'file-remote-p file identification connected))))) | 121 | 'file-remote-p file identification connected))))) |
| 122 | 122 | ||
| 123 | ;; `process-file' exists since Emacs 22. | 123 | ;; `process-file' does not exist in XEmacs. |
| 124 | (unless (fboundp 'process-file) | 124 | (unless (fboundp 'process-file) |
| 125 | (defalias 'process-file | 125 | (defalias 'process-file |
| 126 | (lambda (program &optional infile buffer display &rest args) | 126 | (lambda (program &optional infile buffer display &rest args) |
| @@ -154,7 +154,9 @@ | |||
| 154 | ;; return the original filename if it can't expand anything. Let's | 154 | ;; return the original filename if it can't expand anything. Let's |
| 155 | ;; just hope that this doesn't break anything else. | 155 | ;; just hope that this doesn't break anything else. |
| 156 | ;; It is not needed anymore since GNU Emacs 23.2. | 156 | ;; It is not needed anymore since GNU Emacs 23.2. |
| 157 | (unless (or (featurep 'xemacs) (featurep 'files 'remote-wildcards)) | 157 | (unless (or (featurep 'xemacs) |
| 158 | ;; `featurep' has only one argument in XEmacs. | ||
| 159 | (funcall 'featurep 'files 'remote-wildcards)) | ||
| 158 | (defadvice file-expand-wildcards | 160 | (defadvice file-expand-wildcards |
| 159 | (around tramp-advice-file-expand-wildcards activate) | 161 | (around tramp-advice-file-expand-wildcards activate) |
| 160 | (let ((name (ad-get-arg 0))) | 162 | (let ((name (ad-get-arg 0))) |
| @@ -211,10 +213,9 @@ this is the function `temp-directory'." | |||
| 211 | "`temp-directory' is defined -- using /tmp.")) | 213 | "`temp-directory' is defined -- using /tmp.")) |
| 212 | (file-name-as-directory "/tmp")))) | 214 | (file-name-as-directory "/tmp")))) |
| 213 | 215 | ||
| 214 | ;; `make-temp-file' exists in Emacs only. The third parameter SUFFIX | 216 | ;; `make-temp-file' exists in Emacs only. On XEmacs, we use our own |
| 215 | ;; has been introduced with Emacs 22. We try it, if it fails, we fall | 217 | ;; implementation with `make-temp-name', creating the temporary file |
| 216 | ;; back to `make-temp-name', creating the temporary file immediately | 218 | ;; immediately in order to avoid a security hole. |
| 217 | ;; in order to avoid a security hole. | ||
| 218 | (defsubst tramp-compat-make-temp-file (filename &optional dir-flag) | 219 | (defsubst tramp-compat-make-temp-file (filename &optional dir-flag) |
| 219 | "Create a temporary file (compat function). | 220 | "Create a temporary file (compat function). |
| 220 | Add the extension of FILENAME, if existing." | 221 | Add the extension of FILENAME, if existing." |
| @@ -224,43 +225,34 @@ Add the extension of FILENAME, if existing." | |||
| 224 | (tramp-compat-temporary-file-directory))) | 225 | (tramp-compat-temporary-file-directory))) |
| 225 | (extension (file-name-extension filename t)) | 226 | (extension (file-name-extension filename t)) |
| 226 | result) | 227 | result) |
| 227 | (condition-case nil | 228 | (if (fboundp 'make-temp-file) |
| 228 | (setq result | 229 | (setq result |
| 229 | (funcall | 230 | (funcall |
| 230 | (symbol-function 'make-temp-file) prefix dir-flag extension)) | 231 | (symbol-function 'make-temp-file) prefix dir-flag extension)) |
| 231 | (error | 232 | ;; We use our own implementation, taken from files.el. |
| 232 | ;; We use our own implementation, taken from files.el. | 233 | (while |
| 233 | (while | 234 | (condition-case () |
| 234 | (condition-case () | 235 | (progn |
| 235 | (progn | 236 | (setq result (concat (make-temp-name prefix) extension)) |
| 236 | (setq result (concat (make-temp-name prefix) extension)) | 237 | (if dir-flag |
| 237 | (if dir-flag | 238 | (make-directory result) |
| 238 | (make-directory result) | 239 | (write-region "" nil result nil 'silent)) |
| 239 | (write-region | 240 | nil) |
| 240 | "" nil result nil 'silent nil | 241 | (file-already-exists t)) |
| 241 | ;; 7th parameter is MUSTBENEW in Emacs, and | 242 | ;; The file was somehow created by someone else between |
| 242 | ;; CODING-SYSTEM in XEmacs. It is not a security | 243 | ;; `make-temp-name' and `write-region', let's try again. |
| 243 | ;; hole in XEmacs if we cannot use this parameter, | 244 | nil)) |
| 244 | ;; because XEmacs uses a user-specific | ||
| 245 | ;; subdirectory with 0700 permissions. | ||
| 246 | (when (not (featurep 'xemacs)) 'excl))) | ||
| 247 | nil) | ||
| 248 | (file-already-exists t)) | ||
| 249 | ;; The file was somehow created by someone else between | ||
| 250 | ;; `make-temp-name' and `write-region', let's try again. | ||
| 251 | nil))) | ||
| 252 | result)) | 245 | result)) |
| 253 | 246 | ||
| 254 | ;; `most-positive-fixnum' arrived in Emacs 22. Before, and in XEmacs, | 247 | ;; `most-positive-fixnum' does not exist in XEmacs. |
| 255 | ;; it is a fixed value. | ||
| 256 | (defsubst tramp-compat-most-positive-fixnum () | 248 | (defsubst tramp-compat-most-positive-fixnum () |
| 257 | "Return largest positive integer value (compat function)." | 249 | "Return largest positive integer value (compat function)." |
| 258 | (cond | 250 | (cond |
| 259 | ((boundp 'most-positive-fixnum) (symbol-value 'most-positive-fixnum)) | 251 | ((boundp 'most-positive-fixnum) (symbol-value 'most-positive-fixnum)) |
| 260 | ;; Default value in XEmacs and Emacs 21. | 252 | ;; Default value in XEmacs. |
| 261 | (t 134217727))) | 253 | (t 134217727))) |
| 262 | 254 | ||
| 263 | ;; ID-FORMAT exists since Emacs 22. | 255 | ;; ID-FORMAT does not exists in XEmacs. |
| 264 | (defun tramp-compat-file-attributes (filename &optional id-format) | 256 | (defun tramp-compat-file-attributes (filename &optional id-format) |
| 265 | "Like `file-attributes' for Tramp files (compat function)." | 257 | "Like `file-attributes' for Tramp files (compat function)." |
| 266 | (cond | 258 | (cond |
| @@ -292,8 +284,8 @@ Add the extension of FILENAME, if existing." | |||
| 292 | (funcall | 284 | (funcall |
| 293 | (symbol-function 'copy-directory) directory newname keep-time parents) | 285 | (symbol-function 'copy-directory) directory newname keep-time parents) |
| 294 | 286 | ||
| 295 | ;; If default-directory is a remote directory, make sure we find | 287 | ;; If `default-directory' is a remote directory, make sure we find |
| 296 | ;; its copy-directory handler. | 288 | ;; its `copy-directory' handler. |
| 297 | (let ((handler (or (find-file-name-handler directory 'copy-directory) | 289 | (let ((handler (or (find-file-name-handler directory 'copy-directory) |
| 298 | (find-file-name-handler newname 'copy-directory)))) | 290 | (find-file-name-handler newname 'copy-directory)))) |
| 299 | (if handler | 291 | (if handler |
| @@ -325,32 +317,28 @@ Add the extension of FILENAME, if existing." | |||
| 325 | (if keep-time | 317 | (if keep-time |
| 326 | (set-file-times newname (nth 5 (file-attributes directory)))))))) | 318 | (set-file-times newname (nth 5 (file-attributes directory)))))))) |
| 327 | 319 | ||
| 328 | ;; `copy-tree' is a built-in function in XEmacs. In Emacs 21, it is | ||
| 329 | ;; an autoloaded function in cl-extra.el. Since Emacs 22, it is part | ||
| 330 | ;; of subr.el. There are problems when autoloading, therefore we test | ||
| 331 | ;; for `subrp' and `symbol-file'. Implementation is taken from Emacs 23. | ||
| 332 | (defun tramp-compat-copy-tree (tree) | ||
| 333 | "Make a copy of TREE (compat function)." | ||
| 334 | (if (or (subrp 'copy-tree) (symbol-file 'copy-tree)) | ||
| 335 | (funcall (symbol-function 'copy-tree) tree) | ||
| 336 | (let (result) | ||
| 337 | (while (consp tree) | ||
| 338 | (let ((newcar (car tree))) | ||
| 339 | (if (consp (car tree)) | ||
| 340 | (setq newcar (tramp-compat-copy-tree (car tree)))) | ||
| 341 | (push newcar result)) | ||
| 342 | (setq tree (cdr tree))) | ||
| 343 | (nconc (nreverse result) tree)))) | ||
| 344 | |||
| 345 | ;; RECURSIVE has been introduced with Emacs 23.2. | 320 | ;; RECURSIVE has been introduced with Emacs 23.2. |
| 346 | (defun tramp-compat-delete-directory (directory &optional recursive) | 321 | (defun tramp-compat-delete-directory (directory &optional recursive) |
| 347 | "Like `delete-directory' for Tramp files (compat function)." | 322 | "Like `delete-directory' for Tramp files (compat function)." |
| 348 | (if recursive | 323 | (if (null recursive) |
| 349 | (funcall (symbol-function 'delete-directory) directory recursive) | 324 | (delete-directory directory) |
| 350 | (delete-directory directory))) | 325 | (condition-case nil |
| 351 | 326 | (funcall (symbol-function 'delete-directory) directory recursive) | |
| 352 | ;; `number-sequence' has been introduced in Emacs 22. Implementation | 327 | ;; This Emacs version does not support the RECURSIVE flag. We |
| 353 | ;; is taken from Emacs 23. | 328 | ;; use the implementation from Emacs 23.2. |
| 329 | (error | ||
| 330 | (setq directory (directory-file-name (expand-file-name directory))) | ||
| 331 | (if (not (file-symlink-p directory)) | ||
| 332 | (mapc (lambda (file) | ||
| 333 | (if (eq t (car (file-attributes file))) | ||
| 334 | (tramp-compat-delete-directory file recursive) | ||
| 335 | (delete-file file))) | ||
| 336 | (directory-files | ||
| 337 | directory 'full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))) | ||
| 338 | (delete-directory directory))))) | ||
| 339 | |||
| 340 | ;; `number-sequence' does not exist in XEmacs. Implementation is | ||
| 341 | ;; taken from Emacs 23. | ||
| 354 | (defun tramp-compat-number-sequence (from &optional to inc) | 342 | (defun tramp-compat-number-sequence (from &optional to inc) |
| 355 | "Return a sequence of numbers from FROM to TO as a list (compat function)." | 343 | "Return a sequence of numbers from FROM to TO as a list (compat function)." |
| 356 | (if (or (subrp 'number-sequence) (symbol-file 'number-sequence)) | 344 | (if (or (subrp 'number-sequence) (symbol-file 'number-sequence)) |
diff --git a/lisp/net/tramp-fish.el b/lisp/net/tramp-fish.el index 582aeb4dd74..e3607fa114a 100644 --- a/lisp/net/tramp-fish.el +++ b/lisp/net/tramp-fish.el | |||
| @@ -341,10 +341,10 @@ pass to the OPERATION." | |||
| 341 | "Like `directory-files-and-attributes' for Tramp files." | 341 | "Like `directory-files-and-attributes' for Tramp files." |
| 342 | (mapcar | 342 | (mapcar |
| 343 | (lambda (x) | 343 | (lambda (x) |
| 344 | ;; We cannot call `file-attributes' for backward compatibility reasons. | 344 | (cons x |
| 345 | ;; Its optional parameter ID-FORMAT is introduced with Emacs 22. | 345 | (tramp-compat-file-attributes |
| 346 | (cons x (tramp-fish-handle-file-attributes | 346 | (if full x (expand-file-name x directory)) |
| 347 | (if full x (expand-file-name x directory)) id-format))) | 347 | id-format))) |
| 348 | (directory-files directory full match nosort))) | 348 | (directory-files directory full match nosort))) |
| 349 | 349 | ||
| 350 | (defun tramp-fish-handle-expand-file-name (name &optional dir) | 350 | (defun tramp-fish-handle-expand-file-name (name &optional dir) |
| @@ -1030,15 +1030,15 @@ SIZE MODE WEIRD)." | |||
| 1030 | ;; last line | 1030 | ;; last line |
| 1031 | ((looking-at "^$") | 1031 | ((looking-at "^$") |
| 1032 | (return))) | 1032 | (return))) |
| 1033 | ;; delete line | 1033 | ;; Delete line. |
| 1034 | (forward-line) | 1034 | (forward-line) |
| 1035 | (delete-region (point-min) (point)))) | 1035 | (delete-region (point-min) (point)))) |
| 1036 | 1036 | ||
| 1037 | ;; delete trailing empty line | 1037 | ;; Delete trailing empty line. |
| 1038 | (forward-line) | 1038 | (forward-line) |
| 1039 | (delete-region (point-min) (point)) | 1039 | (delete-region (point-min) (point)) |
| 1040 | 1040 | ||
| 1041 | ;; Return entry in file-attributes format | 1041 | ;; Return entry in `file-attributes' format. |
| 1042 | (list localname link -1 uid gid '(0 0) mtime '(0 0) size mode nil))) | 1042 | (list localname link -1 uid gid '(0 0) mtime '(0 0) size mode nil))) |
| 1043 | 1043 | ||
| 1044 | (defun tramp-fish-retrieve-data (vec) | 1044 | (defun tramp-fish-retrieve-data (vec) |
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index b025493b1a4..dc7c90581f9 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el | |||
| @@ -36,7 +36,7 @@ | |||
| 36 | ;; Notes: | 36 | ;; Notes: |
| 37 | ;; ----- | 37 | ;; ----- |
| 38 | ;; | 38 | ;; |
| 39 | ;; This package only works for Emacs 21.1 and higher, and for XEmacs 21.4 | 39 | ;; This package only works for Emacs 22.1 and higher, and for XEmacs 21.4 |
| 40 | ;; and higher. For XEmacs 21, you need the package `fsf-compat' for | 40 | ;; and higher. For XEmacs 21, you need the package `fsf-compat' for |
| 41 | ;; the `with-timeout' macro. | 41 | ;; the `with-timeout' macro. |
| 42 | ;; | 42 | ;; |
| @@ -79,7 +79,7 @@ | |||
| 79 | (when (featurep 'tramp-compat) | 79 | (when (featurep 'tramp-compat) |
| 80 | (unload-feature 'tramp-compat 'force)))) | 80 | (unload-feature 'tramp-compat 'force)))) |
| 81 | 81 | ||
| 82 | (require 'format-spec) ; from Gnus 5.8, also in tar ball | 82 | (require 'format-spec) |
| 83 | ;; As long as password.el is not part of (X)Emacs, it shouldn't | 83 | ;; As long as password.el is not part of (X)Emacs, it shouldn't |
| 84 | ;; be mandatory | 84 | ;; be mandatory |
| 85 | (if (featurep 'xemacs) | 85 | (if (featurep 'xemacs) |
| @@ -871,9 +871,9 @@ interpreted as a regular expression which always matches." | |||
| 871 | 871 | ||
| 872 | (defvar tramp-completion-function-alist nil | 872 | (defvar tramp-completion-function-alist nil |
| 873 | "*Alist of methods for remote files. | 873 | "*Alist of methods for remote files. |
| 874 | This is a list of entries of the form (NAME PAIR1 PAIR2 ...). | 874 | This is a list of entries of the form \(NAME PAIR1 PAIR2 ...\). |
| 875 | Each NAME stands for a remote access method. Each PAIR is of the form | 875 | Each NAME stands for a remote access method. Each PAIR is of the form |
| 876 | \(FUNCTION FILE). FUNCTION is responsible to extract user names and host | 876 | \(FUNCTION FILE\). FUNCTION is responsible to extract user names and host |
| 877 | names from FILE for completion. The following predefined FUNCTIONs exists: | 877 | names from FILE for completion. The following predefined FUNCTIONs exists: |
| 878 | 878 | ||
| 879 | * `tramp-parse-rhosts' for \"~/.rhosts\" like files, | 879 | * `tramp-parse-rhosts' for \"~/.rhosts\" like files, |
| @@ -1025,7 +1025,7 @@ as given in your `~/.profile'." | |||
| 1025 | 1025 | ||
| 1026 | (defcustom tramp-remote-process-environment | 1026 | (defcustom tramp-remote-process-environment |
| 1027 | `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_ALL=C" | 1027 | `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_ALL=C" |
| 1028 | ,(concat "TERM=" tramp-terminal-type) | 1028 | ,(format "TERM=%s" tramp-terminal-type) |
| 1029 | "EMACS=t" ;; Deprecated. | 1029 | "EMACS=t" ;; Deprecated. |
| 1030 | ,(format "INSIDE_EMACS=%s,tramp:%s" emacs-version tramp-version) | 1030 | ,(format "INSIDE_EMACS=%s,tramp:%s" emacs-version tramp-version) |
| 1031 | "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" | 1031 | "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" |
| @@ -1429,14 +1429,14 @@ See `tramp-file-name-structure' for more explanations.") | |||
| 1429 | (t (error "Wrong `tramp-syntax' defined"))) | 1429 | (t (error "Wrong `tramp-syntax' defined"))) |
| 1430 | "*Regular expression matching file names handled by Tramp. | 1430 | "*Regular expression matching file names handled by Tramp. |
| 1431 | This regexp should match Tramp file names but no other file names. | 1431 | This regexp should match Tramp file names but no other file names. |
| 1432 | \(When tramp.el is loaded, this regular expression is prepended to | 1432 | When tramp.el is loaded, this regular expression is prepended to |
| 1433 | `file-name-handler-alist', and that is searched sequentially. Thus, | 1433 | `file-name-handler-alist', and that is searched sequentially. Thus, |
| 1434 | if the Tramp entry appears rather early in the `file-name-handler-alist' | 1434 | if the Tramp entry appears rather early in the `file-name-handler-alist' |
| 1435 | and is a bit too general, then some files might be considered Tramp | 1435 | and is a bit too general, then some files might be considered Tramp |
| 1436 | files which are not really Tramp files. | 1436 | files which are not really Tramp files. |
| 1437 | 1437 | ||
| 1438 | Please note that the entry in `file-name-handler-alist' is made when | 1438 | Please note that the entry in `file-name-handler-alist' is made when |
| 1439 | this file (tramp.el) is loaded. This means that this variable must be set | 1439 | this file \(tramp.el\) is loaded. This means that this variable must be set |
| 1440 | before loading tramp.el. Alternatively, `file-name-handler-alist' can be | 1440 | before loading tramp.el. Alternatively, `file-name-handler-alist' can be |
| 1441 | updated after changing this variable. | 1441 | updated after changing this variable. |
| 1442 | 1442 | ||
| @@ -1566,18 +1566,18 @@ checked via the following code: | |||
| 1566 | 1566 | ||
| 1567 | In the Emacs normally running Tramp, evaluate the above code | 1567 | In the Emacs normally running Tramp, evaluate the above code |
| 1568 | \(replace \"xxx\" and \"yyy\" by the remote user and host name, | 1568 | \(replace \"xxx\" and \"yyy\" by the remote user and host name, |
| 1569 | respectively). You can do this, for example, by pasting it into | 1569 | respectively\). You can do this, for example, by pasting it into |
| 1570 | the `*scratch*' buffer and then hitting C-j with the cursor after the | 1570 | the `*scratch*' buffer and then hitting C-j with the cursor after the |
| 1571 | last closing parenthesis. Note that it works only if you have configured | 1571 | last closing parenthesis. Note that it works only if you have configured |
| 1572 | \"ssh\" to run without password query, see ssh-agent(1). | 1572 | \"ssh\" to run without password query, see ssh-agent\(1\). |
| 1573 | 1573 | ||
| 1574 | You will see the number of bytes sent successfully to the remote host. | 1574 | You will see the number of bytes sent successfully to the remote host. |
| 1575 | If that number exceeds 1000, you can stop the execution by hitting | 1575 | If that number exceeds 1000, you can stop the execution by hitting |
| 1576 | C-g, because your Emacs is likely clean. | 1576 | C-g, because your Emacs is likely clean. |
| 1577 | 1577 | ||
| 1578 | When it is necessary to set `tramp-chunksize', you might consider to | 1578 | When it is necessary to set `tramp-chunksize', you might consider to |
| 1579 | use an out-of-the-band method (like \"scp\") instead of an internal one | 1579 | use an out-of-the-band method \(like \"scp\"\) instead of an internal one |
| 1580 | \(like \"ssh\"), because setting `tramp-chunksize' to non-nil decreases | 1580 | \(like \"ssh\"\), because setting `tramp-chunksize' to non-nil decreases |
| 1581 | performance. | 1581 | performance. |
| 1582 | 1582 | ||
| 1583 | If your Emacs is buggy, the code stops and gives you an indication | 1583 | If your Emacs is buggy, the code stops and gives you an indication |
| @@ -3166,7 +3166,7 @@ value of `default-file-modes', without execute permissions." | |||
| 3166 | (when (file-directory-p directory) | 3166 | (when (file-directory-p directory) |
| 3167 | (setq directory (expand-file-name directory)) | 3167 | (setq directory (expand-file-name directory)) |
| 3168 | (let* ((temp | 3168 | (let* ((temp |
| 3169 | (tramp-compat-copy-tree | 3169 | (copy-tree |
| 3170 | (with-parsed-tramp-file-name directory nil | 3170 | (with-parsed-tramp-file-name directory nil |
| 3171 | (with-file-property | 3171 | (with-file-property |
| 3172 | v localname | 3172 | v localname |
| @@ -3297,7 +3297,12 @@ value of `default-file-modes', without execute permissions." | |||
| 3297 | (tramp-shell-quote-argument localname) | 3297 | (tramp-shell-quote-argument localname) |
| 3298 | (tramp-shell-quote-argument filename) | 3298 | (tramp-shell-quote-argument filename) |
| 3299 | (if (symbol-value | 3299 | (if (symbol-value |
| 3300 | 'read-file-name-completion-ignore-case) | 3300 | ;; `read-file-name-completion-ignore-case' |
| 3301 | ;; is introduced with Emacs 22.1. | ||
| 3302 | (if (boundp | ||
| 3303 | 'read-file-name-completion-ignore-case) | ||
| 3304 | 'read-file-name-completion-ignore-case | ||
| 3305 | 'completion-ignore-case)) | ||
| 3301 | 1 0))) | 3306 | 1 0))) |
| 3302 | 3307 | ||
| 3303 | (format (concat | 3308 | (format (concat |
| @@ -3382,7 +3387,6 @@ tramp-handle-file-name-all-completions: internal error accessing `%s': `%s'" | |||
| 3382 | "file-name-all-completions" | 3387 | "file-name-all-completions" |
| 3383 | result)))))))) | 3388 | result)))))))) |
| 3384 | 3389 | ||
| 3385 | ;; The following isn't needed for Emacs 20 but for 19.34? | ||
| 3386 | (defun tramp-handle-file-name-completion | 3390 | (defun tramp-handle-file-name-completion |
| 3387 | (filename directory &optional predicate) | 3391 | (filename directory &optional predicate) |
| 3388 | "Like `file-name-completion' for Tramp files." | 3392 | "Like `file-name-completion' for Tramp files." |
| @@ -3650,9 +3654,13 @@ the uid and gid from FILENAME." | |||
| 3650 | "Unknown operation `%s', must be `copy' or `rename'" | 3654 | "Unknown operation `%s', must be `copy' or `rename'" |
| 3651 | op)))) | 3655 | op)))) |
| 3652 | (localname1 | 3656 | (localname1 |
| 3653 | (if t1 (tramp-handle-file-remote-p filename 'localname) filename)) | 3657 | (if t1 |
| 3658 | (tramp-file-name-handler 'file-remote-p filename 'localname) | ||
| 3659 | filename)) | ||
| 3654 | (localname2 | 3660 | (localname2 |
| 3655 | (if t2 (tramp-handle-file-remote-p newname 'localname) newname)) | 3661 | (if t2 |
| 3662 | (tramp-file-name-handler 'file-remote-p newname 'localname) | ||
| 3663 | newname)) | ||
| 3656 | (prefix (file-remote-p (if t1 filename newname))) | 3664 | (prefix (file-remote-p (if t1 filename newname))) |
| 3657 | cmd-result) | 3665 | cmd-result) |
| 3658 | 3666 | ||
| @@ -3814,7 +3822,7 @@ The method used must be an out-of-band method." | |||
| 3814 | ;; Save exit. | 3822 | ;; Save exit. |
| 3815 | (condition-case nil | 3823 | (condition-case nil |
| 3816 | (if dir-flag | 3824 | (if dir-flag |
| 3817 | (delete-directory | 3825 | (tramp-compat-delete-directory |
| 3818 | (expand-file-name ".." tmpfile) 'recursive) | 3826 | (expand-file-name ".." tmpfile) 'recursive) |
| 3819 | (delete-file tmpfile)) | 3827 | (delete-file tmpfile)) |
| 3820 | (error)))) | 3828 | (error)))) |
| @@ -3841,10 +3849,11 @@ The method used must be an out-of-band method." | |||
| 3841 | port (or (and port (number-to-string port)) "")) | 3849 | port (or (and port (number-to-string port)) "")) |
| 3842 | 3850 | ||
| 3843 | ;; Compose copy command. | 3851 | ;; Compose copy command. |
| 3844 | (setq spec `((?h . ,host) (?u . ,user) (?p . ,port) | 3852 | (setq spec (format-spec-make |
| 3845 | (?t . ,(tramp-get-connection-property | 3853 | ?h host ?u user ?p port |
| 3846 | (tramp-get-connection-process v) "temp-file" "")) | 3854 | ?t (tramp-get-connection-property |
| 3847 | (?k . ,(if keep-date " " ""))) | 3855 | (tramp-get-connection-process v) "temp-file" "") |
| 3856 | ?k (if keep-date " " "")) | ||
| 3848 | copy-program (tramp-get-method-parameter | 3857 | copy-program (tramp-get-method-parameter |
| 3849 | method 'tramp-copy-program) | 3858 | method 'tramp-copy-program) |
| 3850 | copy-keep-date (tramp-get-method-parameter | 3859 | copy-keep-date (tramp-get-method-parameter |
| @@ -3934,7 +3943,7 @@ The method used must be an out-of-band method." | |||
| 3934 | (unless (eq op 'copy) | 3943 | (unless (eq op 'copy) |
| 3935 | (if (file-regular-p filename) | 3944 | (if (file-regular-p filename) |
| 3936 | (delete-file filename) | 3945 | (delete-file filename) |
| 3937 | (delete-directory filename 'recursive)))))) | 3946 | (tramp-compat-delete-directory filename 'recursive)))))) |
| 3938 | 3947 | ||
| 3939 | (defun tramp-handle-make-directory (dir &optional parents) | 3948 | (defun tramp-handle-make-directory (dir &optional parents) |
| 3940 | "Like `make-directory' for Tramp files." | 3949 | "Like `make-directory' for Tramp files." |
| @@ -4863,9 +4872,9 @@ coding system might not be determined. This function repairs it." | |||
| 4863 | "Like `find-backup-file-name' for Tramp files." | 4872 | "Like `find-backup-file-name' for Tramp files." |
| 4864 | (with-parsed-tramp-file-name filename nil | 4873 | (with-parsed-tramp-file-name filename nil |
| 4865 | ;; We set both variables. It doesn't matter whether it is | 4874 | ;; We set both variables. It doesn't matter whether it is |
| 4866 | ;; Emacs or XEmacs | 4875 | ;; Emacs or XEmacs. |
| 4867 | (let ((backup-directory-alist | 4876 | (let ((backup-directory-alist |
| 4868 | ;; Emacs case | 4877 | ;; Emacs case. |
| 4869 | (when (boundp 'backup-directory-alist) | 4878 | (when (boundp 'backup-directory-alist) |
| 4870 | (if (symbol-value 'tramp-backup-directory-alist) | 4879 | (if (symbol-value 'tramp-backup-directory-alist) |
| 4871 | (mapcar | 4880 | (mapcar |
| @@ -4881,7 +4890,7 @@ coding system might not be determined. This function repairs it." | |||
| 4881 | (symbol-value 'backup-directory-alist)))) | 4890 | (symbol-value 'backup-directory-alist)))) |
| 4882 | 4891 | ||
| 4883 | (bkup-backup-directory-info | 4892 | (bkup-backup-directory-info |
| 4884 | ;; XEmacs case | 4893 | ;; XEmacs case. |
| 4885 | (when (boundp 'bkup-backup-directory-info) | 4894 | (when (boundp 'bkup-backup-directory-info) |
| 4886 | (if (symbol-value 'tramp-bkup-backup-directory-info) | 4895 | (if (symbol-value 'tramp-bkup-backup-directory-info) |
| 4887 | (mapcar | 4896 | (mapcar |
| @@ -5295,7 +5304,7 @@ pass to the OPERATION." | |||
| 5295 | "Return file name related to OPERATION file primitive. | 5304 | "Return file name related to OPERATION file primitive. |
| 5296 | ARGS are the arguments OPERATION has been called with." | 5305 | ARGS are the arguments OPERATION has been called with." |
| 5297 | (cond | 5306 | (cond |
| 5298 | ; FILE resp DIRECTORY | 5307 | ;; FILE resp DIRECTORY. |
| 5299 | ((member operation | 5308 | ((member operation |
| 5300 | (list 'access-file 'byte-compiler-base-file-name 'delete-directory | 5309 | (list 'access-file 'byte-compiler-base-file-name 'delete-directory |
| 5301 | 'delete-file 'diff-latest-backup-file 'directory-file-name | 5310 | 'delete-file 'diff-latest-backup-file 'directory-file-name |
| @@ -5313,9 +5322,9 @@ ARGS are the arguments OPERATION has been called with." | |||
| 5313 | 'load 'make-directory 'make-directory-internal | 5322 | 'load 'make-directory 'make-directory-internal |
| 5314 | 'set-file-modes 'substitute-in-file-name | 5323 | 'set-file-modes 'substitute-in-file-name |
| 5315 | 'unhandled-file-name-directory 'vc-registered | 5324 | 'unhandled-file-name-directory 'vc-registered |
| 5316 | ; Emacs 22 only | 5325 | ;; Emacs 22+ only. |
| 5317 | 'set-file-times | 5326 | 'set-file-times |
| 5318 | ; XEmacs only | 5327 | ;; XEmacs only. |
| 5319 | 'abbreviate-file-name 'create-file-buffer | 5328 | 'abbreviate-file-name 'create-file-buffer |
| 5320 | 'dired-file-modtime 'dired-make-compressed-filename | 5329 | 'dired-file-modtime 'dired-make-compressed-filename |
| 5321 | 'dired-recursive-delete-directory 'dired-set-file-modtime | 5330 | 'dired-recursive-delete-directory 'dired-set-file-modtime |
| @@ -5325,14 +5334,14 @@ ARGS are the arguments OPERATION has been called with." | |||
| 5325 | (if (file-name-absolute-p (nth 0 args)) | 5334 | (if (file-name-absolute-p (nth 0 args)) |
| 5326 | (nth 0 args) | 5335 | (nth 0 args) |
| 5327 | (expand-file-name (nth 0 args)))) | 5336 | (expand-file-name (nth 0 args)))) |
| 5328 | ; FILE DIRECTORY resp FILE1 FILE2 | 5337 | ;; FILE DIRECTORY resp FILE1 FILE2. |
| 5329 | ((member operation | 5338 | ((member operation |
| 5330 | (list 'add-name-to-file 'copy-file 'expand-file-name | 5339 | (list 'add-name-to-file 'copy-file 'expand-file-name |
| 5331 | 'file-name-all-completions 'file-name-completion | 5340 | 'file-name-all-completions 'file-name-completion |
| 5332 | 'file-newer-than-file-p 'make-symbolic-link 'rename-file | 5341 | 'file-newer-than-file-p 'make-symbolic-link 'rename-file |
| 5333 | ; Emacs 23 only | 5342 | ;; Emacs 23+ only. |
| 5334 | 'copy-directory | 5343 | 'copy-directory |
| 5335 | ; XEmacs only | 5344 | ;; XEmacs only. |
| 5336 | 'dired-make-relative-symlink | 5345 | 'dired-make-relative-symlink |
| 5337 | 'vm-imap-move-mail 'vm-pop-move-mail 'vm-spool-move-mail)) | 5346 | 'vm-imap-move-mail 'vm-pop-move-mail 'vm-spool-move-mail)) |
| 5338 | (save-match-data | 5347 | (save-match-data |
| @@ -5340,39 +5349,39 @@ ARGS are the arguments OPERATION has been called with." | |||
| 5340 | ((string-match tramp-file-name-regexp (nth 0 args)) (nth 0 args)) | 5349 | ((string-match tramp-file-name-regexp (nth 0 args)) (nth 0 args)) |
| 5341 | ((string-match tramp-file-name-regexp (nth 1 args)) (nth 1 args)) | 5350 | ((string-match tramp-file-name-regexp (nth 1 args)) (nth 1 args)) |
| 5342 | (t (buffer-file-name (current-buffer)))))) | 5351 | (t (buffer-file-name (current-buffer)))))) |
| 5343 | ; START END FILE | 5352 | ;; START END FILE. |
| 5344 | ((eq operation 'write-region) | 5353 | ((eq operation 'write-region) |
| 5345 | (nth 2 args)) | 5354 | (nth 2 args)) |
| 5346 | ; BUF | 5355 | ;; BUFFER. |
| 5347 | ((member operation | 5356 | ((member operation |
| 5348 | (list 'set-visited-file-modtime 'verify-visited-file-modtime | 5357 | (list 'set-visited-file-modtime 'verify-visited-file-modtime |
| 5349 | ; since Emacs 22 only | 5358 | ;; Emacs 22+ only. |
| 5350 | 'make-auto-save-file-name | 5359 | 'make-auto-save-file-name |
| 5351 | ; XEmacs only | 5360 | ;; XEmacs only. |
| 5352 | 'backup-buffer)) | 5361 | 'backup-buffer)) |
| 5353 | (buffer-file-name | 5362 | (buffer-file-name |
| 5354 | (if (bufferp (nth 0 args)) (nth 0 args) (current-buffer)))) | 5363 | (if (bufferp (nth 0 args)) (nth 0 args) (current-buffer)))) |
| 5355 | ; COMMAND | 5364 | ;; COMMAND. |
| 5356 | ((member operation | 5365 | ((member operation |
| 5357 | (list ; not in Emacs 23 | 5366 | (list ;; not in Emacs 23+. |
| 5358 | 'dired-call-process | 5367 | 'dired-call-process |
| 5359 | ; Emacs only | 5368 | ;; Emacs only. |
| 5360 | 'shell-command | 5369 | 'shell-command |
| 5361 | ; since Emacs 22 only | 5370 | ;; Emacs 22+ only. |
| 5362 | 'process-file | 5371 | 'process-file |
| 5363 | ; since Emacs 23 only | 5372 | ;; Emacs 23+ only. |
| 5364 | 'start-file-process | 5373 | 'start-file-process |
| 5365 | ; XEmacs only | 5374 | ;; XEmacs only. |
| 5366 | 'dired-print-file 'dired-shell-call-process | 5375 | 'dired-print-file 'dired-shell-call-process |
| 5367 | ; nowhere yet | 5376 | ;; nowhere yet. |
| 5368 | 'executable-find 'start-process 'call-process)) | 5377 | 'executable-find 'start-process 'call-process)) |
| 5369 | default-directory) | 5378 | default-directory) |
| 5370 | ; unknown file primitive | 5379 | ;; Unknown file primitive. |
| 5371 | (t (error "unknown file I/O primitive: %s" operation)))) | 5380 | (t (error "unknown file I/O primitive: %s" operation)))) |
| 5372 | 5381 | ||
| 5373 | (defun tramp-find-foreign-file-name-handler (filename) | 5382 | (defun tramp-find-foreign-file-name-handler (filename) |
| 5374 | "Return foreign file name handler if exists." | 5383 | "Return foreign file name handler if exists." |
| 5375 | (when (and (stringp filename) (tramp-tramp-file-p filename)) | 5384 | (when (tramp-tramp-file-p filename) |
| 5376 | (let ((v (tramp-dissect-file-name filename t)) | 5385 | (let ((v (tramp-dissect-file-name filename t)) |
| 5377 | (handler tramp-foreign-file-name-handler-alist) | 5386 | (handler tramp-foreign-file-name-handler-alist) |
| 5378 | elt res) | 5387 | elt res) |
| @@ -6257,22 +6266,24 @@ from the default one." | |||
| 6257 | (format "*debug tramp/%s %s@%s*" method user host) | 6266 | (format "*debug tramp/%s %s@%s*" method user host) |
| 6258 | (format "*debug tramp/%s %s*" method host)))) | 6267 | (format "*debug tramp/%s %s*" method host)))) |
| 6259 | 6268 | ||
| 6269 | (defconst tramp-debug-outline-regexp | ||
| 6270 | "[0-9]+:[0-9]+:[0-9]+\\.[0-9]+ [a-z0-9-]+ (\\([0-9]+\\)) #") | ||
| 6271 | |||
| 6260 | (defun tramp-get-debug-buffer (vec) | 6272 | (defun tramp-get-debug-buffer (vec) |
| 6261 | "Get the debug buffer for VEC." | 6273 | "Get the debug buffer for VEC." |
| 6262 | (with-current-buffer | 6274 | (with-current-buffer |
| 6263 | (get-buffer-create (tramp-debug-buffer-name vec)) | 6275 | (get-buffer-create (tramp-debug-buffer-name vec)) |
| 6264 | (when (bobp) | 6276 | (when (bobp) |
| 6265 | (setq buffer-undo-list t) | 6277 | (setq buffer-undo-list t) |
| 6266 | ;; Activate outline-mode. This runs `text-mode-hook' and | 6278 | ;; Activate `outline-mode'. This runs `text-mode-hook' and |
| 6267 | ;; `outline-mode-hook'. We must prevent that local processes | 6279 | ;; `outline-mode-hook'. We must prevent that local processes |
| 6268 | ;; die. Yes: I've seen `flyspell-mode', which starts "ispell" | 6280 | ;; die. Yes: I've seen `flyspell-mode', which starts "ispell". |
| 6269 | ;; ... | 6281 | ;; Furthermore, `outline-regexp' must have the correct value |
| 6270 | (let ((default-directory (tramp-compat-temporary-file-directory))) | 6282 | ;; already, because it is used by `font-lock-compile-keywords'. |
| 6283 | (let ((default-directory (tramp-compat-temporary-file-directory)) | ||
| 6284 | (outline-regexp tramp-debug-outline-regexp)) | ||
| 6271 | (outline-mode)) | 6285 | (outline-mode)) |
| 6272 | (set (make-local-variable 'outline-regexp) | 6286 | (set (make-local-variable 'outline-regexp) tramp-debug-outline-regexp) |
| 6273 | "[0-9]+:[0-9]+:[0-9]+\\.[0-9]+ [a-z0-9-]+ (\\([0-9]+\\)) #") | ||
| 6274 | ; (set (make-local-variable 'outline-regexp) | ||
| 6275 | ; "[a-z.-]+:[0-9]+: [a-z0-9-]+ (\\([0-9]+\\)) #") | ||
| 6276 | (set (make-local-variable 'outline-level) 'tramp-outline-level)) | 6287 | (set (make-local-variable 'outline-level) 'tramp-outline-level)) |
| 6277 | (current-buffer))) | 6288 | (current-buffer))) |
| 6278 | 6289 | ||
| @@ -6307,7 +6318,7 @@ This function expects to be in the right *tramp* buffer." | |||
| 6307 | (setq result (concat "\\" progname)))) | 6318 | (setq result (concat "\\" progname)))) |
| 6308 | (unless result | 6319 | (unless result |
| 6309 | (when ignore-tilde | 6320 | (when ignore-tilde |
| 6310 | ;; Remove all ~/foo directories from dirlist. In Emacs 20, | 6321 | ;; Remove all ~/foo directories from dirlist. In XEmacs, |
| 6311 | ;; `remove' is in CL, and we want to avoid CL dependencies. | 6322 | ;; `remove' is in CL, and we want to avoid CL dependencies. |
| 6312 | (let (newdl d) | 6323 | (let (newdl d) |
| 6313 | (while dirlist | 6324 | (while dirlist |
| @@ -6624,7 +6635,7 @@ Erase echoed commands if exists." | |||
| 6624 | ;; Discard echo from remote output. | 6635 | ;; Discard echo from remote output. |
| 6625 | (tramp-set-connection-property proc "check-remote-echo" nil) | 6636 | (tramp-set-connection-property proc "check-remote-echo" nil) |
| 6626 | (tramp-message proc 5 "echo-mark found") | 6637 | (tramp-message proc 5 "echo-mark found") |
| 6627 | (forward-line) | 6638 | (forward-line 1) |
| 6628 | (delete-region begin (point)) | 6639 | (delete-region begin (point)) |
| 6629 | (goto-char (point-min))))) | 6640 | (goto-char (point-min))))) |
| 6630 | 6641 | ||
| @@ -6895,7 +6906,7 @@ process to set up. VEC specifies the connection." | |||
| 6895 | "List of local coding commands for inline transfer. | 6906 | "List of local coding commands for inline transfer. |
| 6896 | Each item is a list that looks like this: | 6907 | Each item is a list that looks like this: |
| 6897 | 6908 | ||
| 6898 | \(FORMAT ENCODING DECODING) | 6909 | \(FORMAT ENCODING DECODING\) |
| 6899 | 6910 | ||
| 6900 | FORMAT is symbol describing the encoding/decoding format. It can be | 6911 | FORMAT is symbol describing the encoding/decoding format. It can be |
| 6901 | `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing. | 6912 | `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing. |
| @@ -6928,7 +6939,7 @@ with the encoded or decoded results, respectively.") | |||
| 6928 | "List of remote coding commands for inline transfer. | 6939 | "List of remote coding commands for inline transfer. |
| 6929 | Each item is a list that looks like this: | 6940 | Each item is a list that looks like this: |
| 6930 | 6941 | ||
| 6931 | \(FORMAT ENCODING DECODING) | 6942 | \(FORMAT ENCODING DECODING\) |
| 6932 | 6943 | ||
| 6933 | FORMAT is symbol describing the encoding/decoding format. It can be | 6944 | FORMAT is symbol describing the encoding/decoding format. It can be |
| 6934 | `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing. | 6945 | `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing. |
| @@ -7089,8 +7100,9 @@ Gateway hops are already opened." | |||
| 7089 | (setq proxy | 7100 | (setq proxy |
| 7090 | (format-spec | 7101 | (format-spec |
| 7091 | proxy | 7102 | proxy |
| 7092 | `((?u . ,(or (tramp-file-name-user (car target-alist)) "")) | 7103 | (format-spec-make |
| 7093 | (?h . ,(or (tramp-file-name-host (car target-alist)) ""))))) | 7104 | ?u (or (tramp-file-name-user (car target-alist)) "") |
| 7105 | ?h (or (tramp-file-name-host (car target-alist)) "")))) | ||
| 7094 | (with-parsed-tramp-file-name proxy l | 7106 | (with-parsed-tramp-file-name proxy l |
| 7095 | ;; Add the hop. | 7107 | ;; Add the hop. |
| 7096 | (add-to-list 'target-alist l) | 7108 | (add-to-list 'target-alist l) |
| @@ -7308,8 +7320,7 @@ connection if a previous connection has died for some reason." | |||
| 7308 | l-host (or l-host "") | 7320 | l-host (or l-host "") |
| 7309 | l-user (or l-user "") | 7321 | l-user (or l-user "") |
| 7310 | l-port (or l-port "") | 7322 | l-port (or l-port "") |
| 7311 | spec `((?h . ,l-host) (?u . ,l-user) (?p . ,l-port) | 7323 | spec (format-spec-make ?h l-host ?u l-user ?p l-port ?t tmpfile) |
| 7312 | (?t . ,tmpfile)) | ||
| 7313 | command | 7324 | command |
| 7314 | (concat | 7325 | (concat |
| 7315 | ;; We do not want to see the trailing local prompt in | 7326 | ;; We do not want to see the trailing local prompt in |
| @@ -7981,7 +7992,7 @@ necessary only. This function will be used in file name completion." | |||
| 7981 | (tramp-get-connection-process vec) | 7992 | (tramp-get-connection-process vec) |
| 7982 | vec) | 7993 | vec) |
| 7983 | "remote-path" | 7994 | "remote-path" |
| 7984 | (let* ((remote-path (tramp-compat-copy-tree tramp-remote-path)) | 7995 | (let* ((remote-path (copy-tree tramp-remote-path)) |
| 7985 | (elt1 (memq 'tramp-default-remote-path remote-path)) | 7996 | (elt1 (memq 'tramp-default-remote-path remote-path)) |
| 7986 | (elt2 (memq 'tramp-own-remote-path remote-path)) | 7997 | (elt2 (memq 'tramp-own-remote-path remote-path)) |
| 7987 | (default-remote-path | 7998 | (default-remote-path |
| @@ -8280,7 +8291,7 @@ If the `tramp-methods' entry does not exist, return NIL." | |||
| 8280 | (defadvice make-auto-save-file-name | 8291 | (defadvice make-auto-save-file-name |
| 8281 | (around tramp-advice-make-auto-save-file-name () activate) | 8292 | (around tramp-advice-make-auto-save-file-name () activate) |
| 8282 | "Invoke `tramp-handle-make-auto-save-file-name' for Tramp files." | 8293 | "Invoke `tramp-handle-make-auto-save-file-name' for Tramp files." |
| 8283 | (if (and (buffer-file-name) (tramp-tramp-file-p (buffer-file-name))) | 8294 | (if (tramp-tramp-file-p (buffer-file-name)) |
| 8284 | ;; We cannot call `tramp-handle-make-auto-save-file-name' | 8295 | ;; We cannot call `tramp-handle-make-auto-save-file-name' |
| 8285 | ;; directly, because this would bypass the locking mechanism. | 8296 | ;; directly, because this would bypass the locking mechanism. |
| 8286 | (setq ad-return-value | 8297 | (setq ad-return-value |
| @@ -8294,14 +8305,13 @@ If the `tramp-methods' entry does not exist, return NIL." | |||
| 8294 | 'around 'tramp-advice-make-auto-save-file-name) | 8305 | 'around 'tramp-advice-make-auto-save-file-name) |
| 8295 | (ad-activate 'make-auto-save-file-name)))) | 8306 | (ad-activate 'make-auto-save-file-name)))) |
| 8296 | 8307 | ||
| 8297 | ;; In Emacs < 22 and XEmacs < 21.5 autosaved remote files have | 8308 | ;; In XEmacs < 21.5, autosaved remote files have permission 0666 minus |
| 8298 | ;; permission 0666 minus umask. This is a security threat. | 8309 | ;; umask. This is a security threat. |
| 8299 | 8310 | ||
| 8300 | (defun tramp-set-auto-save-file-modes () | 8311 | (defun tramp-set-auto-save-file-modes () |
| 8301 | "Set permissions of autosaved remote files to the original permissions." | 8312 | "Set permissions of autosaved remote files to the original permissions." |
| 8302 | (let ((bfn (buffer-file-name))) | 8313 | (let ((bfn (buffer-file-name))) |
| 8303 | (when (and (stringp bfn) | 8314 | (when (and (tramp-tramp-file-p bfn) |
| 8304 | (tramp-tramp-file-p bfn) | ||
| 8305 | (buffer-modified-p) | 8315 | (buffer-modified-p) |
| 8306 | (stringp buffer-auto-save-file-name) | 8316 | (stringp buffer-auto-save-file-name) |
| 8307 | (not (equal bfn buffer-auto-save-file-name))) | 8317 | (not (equal bfn buffer-auto-save-file-name))) |
| @@ -8313,10 +8323,9 @@ If the `tramp-methods' entry does not exist, return NIL." | |||
| 8313 | (set-file-modes buffer-auto-save-file-name | 8323 | (set-file-modes buffer-auto-save-file-name |
| 8314 | (or (file-modes bfn) (tramp-octal-to-decimal "0600")))))) | 8324 | (or (file-modes bfn) (tramp-octal-to-decimal "0600")))))) |
| 8315 | 8325 | ||
| 8316 | (unless (or (> emacs-major-version 21) | 8326 | (unless (and (featurep 'xemacs) |
| 8317 | (and (featurep 'xemacs) | 8327 | (= emacs-major-version 21) |
| 8318 | (= emacs-major-version 21) | 8328 | (> emacs-minor-version 4)) |
| 8319 | (> emacs-minor-version 4))) | ||
| 8320 | (add-hook 'auto-save-hook 'tramp-set-auto-save-file-modes) | 8329 | (add-hook 'auto-save-hook 'tramp-set-auto-save-file-modes) |
| 8321 | (add-hook 'tramp-unload-hook | 8330 | (add-hook 'tramp-unload-hook |
| 8322 | (lambda () | 8331 | (lambda () |
| @@ -8625,7 +8634,7 @@ Only works for Bourne-like shells." | |||
| 8625 | ;; expects only English messages? (Juri Linkov) | 8634 | ;; expects only English messages? (Juri Linkov) |
| 8626 | ;; * Make shadowfile.el grok Tramp filenames. (Bug#4526, Bug#4846) | 8635 | ;; * Make shadowfile.el grok Tramp filenames. (Bug#4526, Bug#4846) |
| 8627 | ;; * Do not handle files with drive letter as remote. (Bug#5447) | 8636 | ;; * Do not handle files with drive letter as remote. (Bug#5447) |
| 8628 | ;; * Load Tramp subpackages only when needed. (Bug#1529, Bug#5448) | 8637 | ;; * Load Tramp subpackages only when needed. (Bug#1529, Bug#5448, Bug#5705) |
| 8629 | ;; * Try telnet+curl as new method. It might be useful for busybox, | 8638 | ;; * Try telnet+curl as new method. It might be useful for busybox, |
| 8630 | ;; without built-in uuencode/uudecode. | 8639 | ;; without built-in uuencode/uudecode. |
| 8631 | ;; * Let `shell-dynamic-complete-*' and `comint-dynamic-complete' work | 8640 | ;; * Let `shell-dynamic-complete-*' and `comint-dynamic-complete' work |
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el index c5387a26722..471a344b860 100644 --- a/lisp/net/trampver.el +++ b/lisp/net/trampver.el | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | ;;; trampver.el --- Transparent Remote Access, Multiple Protocol | 1 | ;;; trampver.el --- Transparent Remote Access, Multiple Protocol |
| 2 | ;;; lisp/trampver.el. Generated from trampver.el.in by configure. | 2 | ;;; lisp/trampver.el. Generated from trampver.el.in by configure. |
| 3 | 3 | ||
| 4 | ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, | 4 | ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, |
| 5 | ;; 2009, 2010 Free Software Foundation, Inc. | 5 | ;; 2010 Free Software Foundation, Inc. |
| 6 | 6 | ||
| 7 | ;; Author: Kai Großjohann <kai.grossjohann@gmx.net> | 7 | ;; Author: Kai Großjohann <kai.grossjohann@gmx.net> |
| 8 | ;; Keywords: comm, processes | 8 | ;; Keywords: comm, processes |
| @@ -24,19 +24,20 @@ | |||
| 24 | 24 | ||
| 25 | ;;; Code: | 25 | ;;; Code: |
| 26 | 26 | ||
| 27 | ;; In the Tramp CVS repository, the version numer and the bug report address | 27 | ;; In the Tramp CVS repository, the version number and the bug report |
| 28 | ;; are auto-frobbed from configure.ac, so you should edit that file and run | 28 | ;; address are auto-frobbed from configure.ac, so you should edit that |
| 29 | ;; "autoconf && ./configure" to change them. (X)Emacs version check is defined | 29 | ;; file and run "autoconf && ./configure" to change them. (X)Emacs |
| 30 | ;; in macro AC_EMACS_INFO of aclocal.m4; should be changed only there. | 30 | ;; version check is defined in macro AC_EMACS_INFO of aclocal.m4; |
| 31 | ;; should be changed only there. | ||
| 31 | 32 | ||
| 32 | (defconst tramp-version "2.1.18-23.2" | 33 | (defconst tramp-version "2.1.19-pre" |
| 33 | "This version of Tramp.") | 34 | "This version of Tramp.") |
| 34 | 35 | ||
| 35 | (defconst tramp-bug-report-address "tramp-devel@gnu.org" | 36 | (defconst tramp-bug-report-address "tramp-devel@gnu.org" |
| 36 | "Email address to send bug reports to.") | 37 | "Email address to send bug reports to.") |
| 37 | 38 | ||
| 38 | ;; Check for (X)Emacs version. | 39 | ;; Check for (X)Emacs version. |
| 39 | (let ((x (if (or (< emacs-major-version 21) (and (featurep 'xemacs) (= emacs-major-version 21) (< emacs-minor-version 4))) (format "Tramp 2.1.18-pre is not fit for %s" (when (string-match "^.*$" (emacs-version)) (match-string 0 (emacs-version)))) "ok"))) | 40 | (let ((x (if (or (>= emacs-major-version 22) (and (featurep 'xemacs) (= emacs-major-version 21) (>= emacs-minor-version 4))) "ok" (format "Tramp 2.1.19-pre is not fit for %s" (when (string-match "^.*$" (emacs-version)) (match-string 0 (emacs-version))))))) |
| 40 | (unless (string-match "\\`ok\\'" x) (error "%s" x))) | 41 | (unless (string-match "\\`ok\\'" x) (error "%s" x))) |
| 41 | 42 | ||
| 42 | (provide 'trampver) | 43 | (provide 'trampver) |