]> git.eshelyaron.com Git - emacs.git/commitdiff
Better handling of "%" in Tramp user or host names
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 6 Dec 2024 10:56:05 +0000 (11:56 +0100)
committerEshel Yaron <me@eshelyaron.com>
Fri, 6 Dec 2024 15:42:55 +0000 (16:42 +0100)
* lisp/net/tramp.el (tramp-format-spec): New defun.
(tramp-dissect-file-name, tramp-compute-multi-hops)
(tramp-expand-args):
* lisp/net/tramp-cmds.el (tramp-default-rename-file): Use it.

(cherry picked from commit 9ddec89e422d0dd6e9069731b8f2dd2c90aa5607)

lisp/net/tramp-cmds.el
lisp/net/tramp.el

index 733c96fcfaaeef4034d114912e2d8aea462b1ce7..516cfef3c891c5ba017a6c54b3350db6254bc3e4 100644 (file)
@@ -366,7 +366,7 @@ function returns nil"
        (when (string-match-p (or (eval (car item) t) "") string)
          (setq tdra nil
                result
-               (format-spec
+               (tramp-format-spec
                 (cdr item) (format-spec-make ?m method ?u user ?h host)))))
       result)))
 
index 2b64c386e5cbbcd3da5594756d0ffdcaa7218fd9..0af6fe967ee2a9c410dcfa20036a77ded182e133 100644 (file)
@@ -1823,14 +1823,9 @@ default values are used."
                  user (tramp-find-user method user host)
                  host (tramp-find-host method user host))
            (when hop
-             ;; Replace placeholders.  The hop could contain "%"
-             ;; which is not intended as format character, for
-             ;; example in USER%DOMAIN or POD%NAMESPACE.
-             (setq hop
-                   (replace-regexp-in-string
-                    (rx "%" (group (= 2 alnum))) "%%\\1" hop)
-                   hop
-                   (format-spec hop (format-spec-make ?h host ?u user))))))
+             ;; Replace placeholders.
+             (setq
+              hop (tramp-format-spec hop (format-spec-make ?h host ?u user))))))
 
        ;; Return result.
        (prog1
@@ -2236,6 +2231,14 @@ letter into the file name.  This function removes it."
             (rx (regexp tramp-volume-letter-regexp) "/") "/" result))
       (if quoted (file-name-quote result 'top) result))))
 
+(defun tramp-format-spec (format specification)
+  "Implement `format-spec' in Tramp.
+FORMAT could contain \"%\" which is not intended as format character,
+for example in USER%DOMAIN or POD%NAMESPACE."
+  (format-spec
+   (replace-regexp-in-string (rx "%" (group (= 2 alnum))) "%%\\1" format)
+   specification))
+
 ;;; Config Manipulation Functions:
 
 (defconst tramp-dns-sd-service-regexp
@@ -5028,7 +5031,7 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.")
              (setq choices nil)
            ;; Replace placeholders.
            (setq proxy
-                 (format-spec
+                 (tramp-format-spec
                   proxy
                   (format-spec-make
                    ?u (or (tramp-file-name-user (car target-alist)) "")
@@ -5103,7 +5106,7 @@ a connection-local variable."
     (flatten-tree
      (mapcar
       (lambda (x)
-       (setq x (mapcar (lambda (y) (format-spec y spec)) x))
+       (setq x (mapcar (lambda (y) (tramp-format-spec y spec)) x))
        (unless (member "" x) x))
       args))))