emacs-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]