]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle quoted tilde in Tramp
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 13 Oct 2023 14:09:51 +0000 (16:09 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 13 Oct 2023 14:09:51 +0000 (16:09 +0200)
* lisp/net/tramp.el (tramp-handle-expand-file-name):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name):
* lisp/net/tramp-sh.el (tramp-sh-handle-expand-file-name):
* lisp/net/tramp-smb.el (tramp-smb-handle-expand-file-name):
* lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-expand-file-name):
Handle quoted tilde.  (Bug#65685)

* test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name-tilde):
New test.

lisp/net/tramp-gvfs.el
lisp/net/tramp-sh.el
lisp/net/tramp-smb.el
lisp/net/tramp-sudoedit.el
lisp/net/tramp.el
test/lisp/net/tramp-tests.el

index 46342042880d81c96fc27d5aa5fbbe69d87b292a..07390b50df246f61f34120a3e024348fc4143931 100644 (file)
@@ -1176,10 +1176,13 @@ file names."
       (tramp-run-real-handler #'expand-file-name (list name))
     ;; Dissect NAME.
     (with-parsed-tramp-file-name name nil
+      ;; Tilde expansion shall be possible also for quoted localname.
+      (when (string-prefix-p "~" (file-name-unquote localname))
+       (setq localname (file-name-unquote localname)))
       ;; If there is a default location, expand tilde.
       (when (string-match
             (tramp-compat-rx bos "~" (group (* (not "/"))) (group (* nonl)) eos)
-             localname)
+            localname)
        (let ((uname (match-string 1 localname))
              (fname (match-string 2 localname))
              hname)
index 59d5c00515feb960cec6d9fad8ea471d9a122f6a..74b1638f120d6a802ccf9aed000763210c27bc59 100644 (file)
@@ -2831,6 +2831,9 @@ the result will be a local, non-Tramp, file name."
           (tramp-run-real-handler #'expand-file-name (list name)))
        (unless (tramp-run-real-handler #'file-name-absolute-p (list localname))
          (setq localname (concat "~/" localname)))
+        ;; Tilde expansion shall be possible also for quoted localname.
+       (when (string-prefix-p "~" (file-name-unquote localname))
+         (setq localname (file-name-unquote localname)))
        ;; Tilde expansion if necessary.  This needs a shell which
        ;; groks tilde expansion!  The function `tramp-find-shell' is
        ;; supposed to find such a shell on the remote host.  Please
index 7249fa266acbe99b68ac8ec524b2d1ade4ceecb4..0ba24352a3dd1b5f8030d945ed1753c44f69e6f4 100644 (file)
@@ -731,6 +731,9 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
       (tramp-run-real-handler #'expand-file-name (list name))
     ;; Dissect NAME.
     (with-parsed-tramp-file-name name nil
+      ;; Tilde expansion shall be possible also for quoted localname.
+      (when (string-prefix-p "~" (file-name-unquote localname))
+       (setq localname (file-name-unquote localname)))
       ;; Tilde expansion if necessary.
       (when (string-match
             (tramp-compat-rx bos "~" (group (* (not "/"))) (group (* nonl)) eos)
index d167bf13b14f22fec90335db1b739cb635faf973..9939d93ba35cd2be1b0bdad2f4d1c153c650cd3b 100644 (file)
@@ -380,6 +380,9 @@ the result will be a local, non-Tramp, file name."
       ;; but to the root home directory.
       (when (tramp-string-empty-or-nil-p localname)
        (setq localname "~"))
+      ;; Tilde expansion shall be possible also for quoted localname.
+      (when (string-prefix-p "~" (file-name-unquote localname))
+       (setq localname (file-name-unquote localname)))
       (unless (file-name-absolute-p localname)
        (setq localname (format "~%s/%s" user localname)))
       (when (string-match
index 02051736cc50525b1606c4dd5f68dbd8b7ea6597..d1b38cfeb936bfd9a253f2a45cdda17cc125e042 100644 (file)
@@ -3982,6 +3982,9 @@ Let-bind it when necessary.")
     (with-parsed-tramp-file-name name nil
       (unless (tramp-run-real-handler #'file-name-absolute-p (list localname))
        (setq localname (concat "/" localname)))
+      ;; Tilde expansion shall be possible also for quoted localname.
+      (when (string-prefix-p "~" (file-name-unquote localname))
+       (setq localname (file-name-unquote localname)))
       ;; Expand tilde.  Usually, the methods applying this handler do
       ;; not support tilde expansion.  But users could declare a
       ;; respective connection property.  (Bug#53847)
index 0648fe9e80f26ccb46bc4bfa39d85cfb7ac7e56e..e74837b926add20f766fd9b96b9770e6b97bc962 100644 (file)
@@ -2335,6 +2335,17 @@ Also see `ignore'."
       (should (string-equal (expand-file-name local dir) dir))
       (should (string-equal (expand-file-name (concat dir local)) dir)))))
 
+;; The following test is inspired by Bug#65685.
+(ert-deftest tramp-test05-expand-file-name-tilde ()
+  "Check `expand-file-name'."
+  (skip-unless (tramp--test-enabled))
+  (skip-unless (not (tramp--test-ange-ftp-p)))
+
+  (let ((dir (file-remote-p ert-remote-temporary-file-directory))
+       (tramp-tolerate-tilde t))
+    (should (string-equal (expand-file-name (concat dir "~"))
+                         (expand-file-name (concat dir "/:~"))))))
+
 (ert-deftest tramp-test06-directory-file-name ()
   "Check `directory-file-name'.
 This checks also `file-name-as-directory', `file-name-directory',