[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 138c825: Make autoloading Tramp more robust
From: |
Michael Albinus |
Subject: |
[Emacs-diffs] master 138c825: Make autoloading Tramp more robust |
Date: |
Tue, 16 May 2017 09:55:15 -0400 (EDT) |
branch: master
commit 138c8256f41f242341c7d146c99f4e6fa267a638
Author: Michael Albinus <address@hidden>
Commit: Michael Albinus <address@hidden>
Make autoloading Tramp more robust
* lisp/net/tramp.el (tramp-file-name-for-operation):
Use `default-directory' where appropriate.
(tramp-file-name-handler): Do not autoload.
(tramp-autoload-file-name-handler): Reintroduce function.
(tramp-register-autoload-file-name-handlers): Use it.
---
lisp/net/tramp.el | 99 ++++++++++++++++++++++++++++++++-----------------------
1 file changed, 57 insertions(+), 42 deletions(-)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 99cb7d1..5b1e478 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -1996,7 +1996,7 @@ ARGS are the arguments OPERATION has been called with."
file-name-case-insensitive-p))
(if (file-name-absolute-p (nth 0 args))
(nth 0 args)
- (expand-file-name (nth 0 args))))
+ default-directory))
;; FILE DIRECTORY resp FILE1 FILE2.
((member operation
'(add-name-to-file copy-directory copy-file expand-file-name
@@ -2008,10 +2008,12 @@ ARGS are the arguments OPERATION has been called with."
(cond
((tramp-tramp-file-p (nth 0 args)) (nth 0 args))
((tramp-tramp-file-p (nth 1 args)) (nth 1 args))
- (t (buffer-file-name (current-buffer))))))
+ (t default-directory))))
;; START END FILE.
((eq operation 'write-region)
- (nth 2 args))
+ (if (file-name-absolute-p (nth 2 args))
+ (nth 2 args)
+ default-directory))
;; BUFFER.
((member operation
'(make-auto-save-file-name
@@ -2058,13 +2060,6 @@ ARGS are the arguments OPERATION has been called with."
`(let ((debug-on-error tramp-debug-on-error))
(tramp-compat-condition-case-unless-debug ,var ,bodyform ,@handlers)))
-;; This is to avoid recursive load.
-;;;###autoload(defun tramp-file-name-handler (operation &rest args)
-;;;###autoload "Load Tramp file name handler, and perform OPERATION."
-;;;###autoload (let ((default-directory temporary-file-directory))
-;;;###autoload (load "tramp" nil t))
-;;;###autoload (apply operation args))
-
;; Main function.
(defun tramp-file-name-handler (operation &rest args)
"Invoke Tramp file name handler.
@@ -2193,15 +2188,23 @@ Falls back to normal file name handler if no Tramp file
name handler exists."
(save-match-data (apply (cdr fn) args))
(tramp-run-real-handler operation args))))
-;; `tramp-file-name-handler' must be registered before evaluation of
-;; site-start and init files, because there might exist remote files
-;; already, f.e. files kept via recentf-mode.
+;;;###autoload
+(progn (defun tramp-autoload-file-name-handler (operation &rest args)
+ "Load Tramp file name handler, and perform OPERATION."
+ (let ((default-directory temporary-file-directory))
+ (load "tramp" 'noerror 'nomessage))
+ (apply operation args)))
+
+;; `tramp-autoload-file-name-handler' must be registered before
+;; evaluation of site-start and init files, because there might exist
+;; remote files already, f.e. files kept via recentf-mode.
;;;###autoload
(progn (defun tramp-register-autoload-file-name-handlers ()
"Add Tramp file name handlers to `file-name-handler-alist' during autoload."
(add-to-list 'file-name-handler-alist
- (cons tramp-initial-file-name-regexp 'tramp-file-name-handler))
- (put 'tramp-file-name-handler 'safe-magic t)
+ (cons tramp-initial-file-name-regexp
+ 'tramp-autoload-file-name-handler))
+ (put 'tramp-autoload-file-name-handler 'safe-magic t)
(add-to-list 'file-name-handler-alist
(cons tramp-initial-completion-file-name-regexp
@@ -2220,7 +2223,6 @@ Falls back to normal file name handler if no Tramp file
name handler exists."
;; if `tramp-syntax' has been changed.
(dolist (fnh '(tramp-file-name-handler
tramp-completion-file-name-handler
- ;; This is autoloaded in Emacs 24 & 25.
tramp-autoload-file-name-handler))
(let ((a1 (rassq fnh file-name-handler-alist)))
(setq file-name-handler-alist (delq a1 file-name-handler-alist))))
@@ -2438,42 +2440,55 @@ They are collected by
`tramp-completion-dissect-file-name1'."
(tramp-postfix-ipv6-format))))
;; "/method" "/[method"
(tramp-completion-file-name-structure1
- (list (concat (tramp-prefix-regexp) "\\(" (tramp-method-regexp) x-nil
"\\)$")
- 1 nil nil nil))
+ (list
+ (concat
+ (tramp-prefix-regexp)
+ "\\(" (tramp-method-regexp) x-nil "\\)$")
+ 1 nil nil nil))
;; "/method:user" "/[method/user"
(tramp-completion-file-name-structure2
- (list (concat (tramp-prefix-regexp)
- "\\(" (tramp-method-regexp) "\\)"
(tramp-postfix-method-regexp)
- "\\(" tramp-user-regexp x-nil "\\)$")
- 1 2 nil nil))
+ (list
+ (concat
+ (tramp-prefix-regexp)
+ "\\(" (tramp-method-regexp) "\\)" (tramp-postfix-method-regexp)
+ "\\(" tramp-user-regexp x-nil "\\)$")
+ 1 2 nil nil))
;; "/method:host" "/[method/host"
(tramp-completion-file-name-structure3
- (list (concat (tramp-prefix-regexp)
- "\\(" (tramp-method-regexp) "\\)"
(tramp-postfix-method-regexp)
- "\\(" tramp-host-regexp x-nil "\\)$")
- 1 nil 2 nil))
+ (list
+ (concat
+ (tramp-prefix-regexp)
+ "\\(" (tramp-method-regexp) "\\)" (tramp-postfix-method-regexp)
+ "\\(" tramp-host-regexp x-nil "\\)$")
+ 1 nil 2 nil))
;; "/method:[ipv6" "/[method/ipv6"
(tramp-completion-file-name-structure4
- (list (concat (tramp-prefix-regexp)
- "\\(" (tramp-method-regexp) "\\)"
(tramp-postfix-method-regexp)
- (tramp-prefix-ipv6-regexp)
- "\\(" tramp-completion-ipv6-regexp x-nil "\\)$")
- 1 nil 2 nil))
+ (list
+ (concat
+ (tramp-prefix-regexp)
+ "\\(" (tramp-method-regexp) "\\)" (tramp-postfix-method-regexp)
+ (tramp-prefix-ipv6-regexp)
+ "\\(" tramp-completion-ipv6-regexp x-nil "\\)$")
+ 1 nil 2 nil))
;; "/method:address@hidden" "/[method/address@hidden"
(tramp-completion-file-name-structure5
- (list (concat (tramp-prefix-regexp)
- "\\(" (tramp-method-regexp) "\\)"
(tramp-postfix-method-regexp)
- "\\(" tramp-user-regexp "\\)"
tramp-postfix-user-regexp
- "\\(" tramp-host-regexp x-nil "\\)$")
- 1 2 3 nil))
+ (list
+ (concat
+ (tramp-prefix-regexp)
+ "\\(" (tramp-method-regexp) "\\)" (tramp-postfix-method-regexp)
+ "\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp
+ "\\(" tramp-host-regexp x-nil "\\)$")
+ 1 2 3 nil))
;; "/method:address@hidden" "/[method/address@hidden"
(tramp-completion-file-name-structure6
- (list (concat (tramp-prefix-regexp)
- "\\(" (tramp-method-regexp) "\\)"
(tramp-postfix-method-regexp)
- "\\(" tramp-user-regexp "\\)"
tramp-postfix-user-regexp
- (tramp-prefix-ipv6-regexp)
- "\\(" tramp-completion-ipv6-regexp x-nil "\\)$")
- 1 2 3 nil)))
+ (list
+ (concat
+ (tramp-prefix-regexp)
+ "\\(" (tramp-method-regexp) "\\)" (tramp-postfix-method-regexp)
+ "\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp
+ (tramp-prefix-ipv6-regexp)
+ "\\(" tramp-completion-ipv6-regexp x-nil "\\)$")
+ 1 2 3 nil)))
(delq
nil
(mapcar
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 138c825: Make autoloading Tramp more robust,
Michael Albinus <=