diff options
Diffstat (limited to 'lisp/net/tramp.el')
| -rw-r--r-- | lisp/net/tramp.el | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 48dcd5edd11..4b5bd472632 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el | |||
| @@ -2133,9 +2133,13 @@ preventing reentrant calls of Tramp.") | |||
| 2133 | Together with `tramp-locked', this implements a locking mechanism | 2133 | Together with `tramp-locked', this implements a locking mechanism |
| 2134 | preventing reentrant calls of Tramp.") | 2134 | preventing reentrant calls of Tramp.") |
| 2135 | 2135 | ||
| 2136 | ;; Avoid recursive loading of tramp.el. | 2136 | ;; Avoid recursive loading of tramp.el. If `non-essential' is |
| 2137 | ;; non-nil, we must load tramp.el, in order to get the real definition | ||
| 2138 | ;; of `tramp-completion-file-name-handler'. | ||
| 2137 | ;;;###autoload(defun tramp-completion-file-name-handler (operation &rest args) | 2139 | ;;;###autoload(defun tramp-completion-file-name-handler (operation &rest args) |
| 2138 | ;;;###autoload (tramp-completion-run-real-handler operation args)) | 2140 | ;;;###autoload (if (and (boundp 'non-essential) (symbol-value 'non-essential)) |
| 2141 | ;;;###autoload (apply 'tramp-autoload-file-name-handler operation args) | ||
| 2142 | ;;;###autoload (tramp-completion-run-real-handler operation args))) | ||
| 2139 | 2143 | ||
| 2140 | (defun tramp-completion-file-name-handler (operation &rest args) | 2144 | (defun tramp-completion-file-name-handler (operation &rest args) |
| 2141 | "Invoke Tramp file name completion handler. | 2145 | "Invoke Tramp file name completion handler. |
| @@ -2165,9 +2169,11 @@ Falls back to normal file name handler if no Tramp file name handler exists." | |||
| 2165 | (progn (defun tramp-autoload-file-name-handler (operation &rest args) | 2169 | (progn (defun tramp-autoload-file-name-handler (operation &rest args) |
| 2166 | "Load Tramp file name handler, and perform OPERATION." | 2170 | "Load Tramp file name handler, and perform OPERATION." |
| 2167 | ;; Avoid recursive loading of tramp.el. | 2171 | ;; Avoid recursive loading of tramp.el. |
| 2168 | (let ((default-directory temporary-file-directory)) | 2172 | (if (let ((default-directory temporary-file-directory)) |
| 2169 | (load "tramp" nil t)) | 2173 | (and (null load-in-progress) (load "tramp" 'noerror 'nomessage))) |
| 2170 | (apply operation args))) | 2174 | (apply operation args) |
| 2175 | ;; tramp.el not available for loading, fall back. | ||
| 2176 | (tramp-completion-run-real-handler operation args)))) | ||
| 2171 | 2177 | ||
| 2172 | ;; `tramp-autoload-file-name-handler' must be registered before | 2178 | ;; `tramp-autoload-file-name-handler' must be registered before |
| 2173 | ;; evaluation of site-start and init files, because there might exist | 2179 | ;; evaluation of site-start and init files, because there might exist |
| @@ -2307,11 +2313,10 @@ not in completion mode." | |||
| 2307 | (progn | 2313 | (progn |
| 2308 | ;; If DIR is not given, use `default-directory' or "/". | 2314 | ;; If DIR is not given, use `default-directory' or "/". |
| 2309 | (setq dir (or dir default-directory "/")) | 2315 | (setq dir (or dir default-directory "/")) |
| 2310 | ;; Unless NAME is absolute, concat DIR and NAME. | 2316 | (cond |
| 2311 | (unless (file-name-absolute-p name) | 2317 | ((file-name-absolute-p name) name) |
| 2312 | (setq name (concat (file-name-as-directory dir) name))) | 2318 | ((zerop (length name)) dir) |
| 2313 | ;; Return NAME. | 2319 | (t (concat (file-name-as-directory dir) name)))) |
| 2314 | name) | ||
| 2315 | 2320 | ||
| 2316 | (tramp-completion-run-real-handler | 2321 | (tramp-completion-run-real-handler |
| 2317 | 'expand-file-name (list name dir)))) | 2322 | 'expand-file-name (list name dir)))) |