emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master e9ac4b4: Handle quoted file names in Tramp


From: Michael Albinus
Subject: [Emacs-diffs] master e9ac4b4: Handle quoted file names in Tramp
Date: Fri, 2 Dec 2016 10:38:39 +0000 (UTC)

branch: master
commit e9ac4b4c82a5698e9399deea2d6450890b8baf64
Author: Michael Albinus <address@hidden>
Commit: Michael Albinus <address@hidden>

    Handle quoted file names in Tramp
    
    * lisp/net/tramp.el (tramp-file-name-handler): Handle also the
    case the file name is quoted.  This is not trapped by the
    reassigned `tramp-file-name-regexp' anymore.
---
 lisp/net/tramp.el |  102 ++++++++++++++++++++++++++---------------------------
 1 file changed, 51 insertions(+), 51 deletions(-)

diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index af08cf7..956cf15 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -2021,20 +2021,19 @@ ARGS are the arguments OPERATION has been called with."
 (defun tramp-file-name-handler (operation &rest args)
   "Invoke Tramp file name handler.
 Falls back to normal file name handler if no Tramp file name handler exists."
-  (if tramp-mode
-      (save-match-data
-       (let* ((filename
-               (tramp-replace-environment-variables
-                (apply 'tramp-file-name-for-operation operation args)))
-              (completion (tramp-completion-mode-p))
-              (foreign
-               (tramp-find-foreign-file-name-handler
-                filename operation completion))
-              result)
-         (with-parsed-tramp-file-name filename nil
-           ;; Call the backend function.
-           (if foreign
-               (tramp-condition-case-unless-debug err
+  (let ((filename (apply 'tramp-file-name-for-operation operation args)))
+    (if (and tramp-mode (tramp-tramp-file-p filename))
+       (save-match-data
+         (let* ((filename (tramp-replace-environment-variables filename))
+                (completion (tramp-completion-mode-p))
+                (foreign
+                 (tramp-find-foreign-file-name-handler
+                  filename operation completion))
+                result)
+           (with-parsed-tramp-file-name filename nil
+             ;; Call the backend function.
+             (if foreign
+                 (tramp-condition-case-unless-debug err
                    (let ((sf (symbol-function foreign)))
                      ;; Some packages set the default directory to a
                      ;; remote path, before respective Tramp packages
@@ -2072,43 +2071,44 @@ Falls back to normal file name handler if no Tramp file 
name handler exists."
                          (tramp-run-real-handler operation args)))
                       (t result)))
 
-                 ;; Trace that somebody has interrupted the operation.
-                 ((debug quit)
-                  (let (tramp-message-show-message)
-                    (tramp-message
-                     v 1 "Interrupt received in operation %s"
-                     (cons operation args)))
-                  ;; Propagate the quit signal.
-                  (signal (car err) (cdr err)))
-
-                 ;; When we are in completion mode, some failed
-                 ;; operations shall return at least a default value
-                 ;; in order to give the user a chance to correct the
-                 ;; file name in the minibuffer.
-                 ;; In order to get a full backtrace, one could apply
-                 ;;   (setq tramp-debug-on-error t)
-                 (error
-                  (cond
-                   ((and completion (zerop (length localname))
-                         (memq operation '(file-exists-p file-directory-p)))
-                    t)
-                   ((and completion (zerop (length localname))
-                         (memq operation
-                               '(expand-file-name file-name-as-directory)))
-                    filename)
-                   ;; Propagate the error.
-                   (t (signal (car err) (cdr err))))))
-
-             ;; Nothing to do for us.  However, since we are in
-             ;; `tramp-mode', we must suppress the volume letter on
-             ;; MS Windows.
-             (setq result (tramp-run-real-handler operation args))
-             (if (stringp result)
-                 (tramp-drop-volume-letter result)
-               result)))))
-
-    ;; When `tramp-mode' is not enabled, we don't do anything.
-    (tramp-run-real-handler operation args)))
+                   ;; Trace that somebody has interrupted the operation.
+                   ((debug quit)
+                    (let (tramp-message-show-message)
+                      (tramp-message
+                       v 1 "Interrupt received in operation %s"
+                       (cons operation args)))
+                    ;; Propagate the quit signal.
+                    (signal (car err) (cdr err)))
+
+                   ;; When we are in completion mode, some failed
+                   ;; operations shall return at least a default
+                   ;; value in order to give the user a chance to
+                   ;; correct the file name in the minibuffer.
+                   ;; In order to get a full backtrace, one could apply
+                   ;;   (setq tramp-debug-on-error t)
+                   (error
+                    (cond
+                     ((and completion (zerop (length localname))
+                           (memq operation '(file-exists-p file-directory-p)))
+                      t)
+                     ((and completion (zerop (length localname))
+                           (memq operation
+                                 '(expand-file-name file-name-as-directory)))
+                      filename)
+                     ;; Propagate the error.
+                     (t (signal (car err) (cdr err))))))
+
+               ;; Nothing to do for us.  However, since we are in
+               ;; `tramp-mode', we must suppress the volume letter on
+               ;; MS Windows.
+               (setq result (tramp-run-real-handler operation args))
+               (if (stringp result)
+                   (tramp-drop-volume-letter result)
+                 result)))))
+
+      ;; When `tramp-mode' is not enabled, or the file name is quoted,
+      ;; we don't do anything.
+      (tramp-run-real-handler operation args))))
 
 ;; In Emacs, there is some concurrency due to timers.  If a timer
 ;; interrupts Tramp and wishes to use the same connection buffer as



reply via email to

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