emacs-diffs
[Top][All Lists]
Advanced

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

emacs-29 dc8b336d025: * lisp/files.el (file-name-non-special): Handle qu


From: Michael Albinus
Subject: emacs-29 dc8b336d025: * lisp/files.el (file-name-non-special): Handle quoted tilde.
Date: Sat, 14 Oct 2023 03:34:53 -0400 (EDT)

branch: emacs-29
commit dc8b336d0254d751ffcb2466a20a650ca9c5f86a
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>

    * lisp/files.el (file-name-non-special): Handle quoted tilde.
    
    (Bug#65685)
    
    * test/lisp/files-tests.el
    (files-tests-file-name-non-special-expand-file-name-tilde):
    New test.
---
 lisp/files.el            | 11 +++++++++--
 test/lisp/files-tests.el | 17 +++++++++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/lisp/files.el b/lisp/files.el
index b72f141c0ee..8b5cb4964cc 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -8185,13 +8185,12 @@ arguments as the running Emacs)."
        ;; Get a list of the indices of the args that are file names.
        (file-arg-indices
         (cdr (or (assq operation
-                       '(;; The first eight are special because they
+                       '(;; The first seven are special because they
                          ;; return a file name.  We want to include
                          ;; the /: in the return value.  So just
                          ;; avoid stripping it in the first place.
                           (abbreviate-file-name)
                           (directory-file-name)
-                          (expand-file-name)
                           (file-name-as-directory)
                           (file-name-directory)
                           (file-name-sans-versions)
@@ -8200,6 +8199,10 @@ arguments as the running Emacs)."
                          ;; `identity' means just return the first
                          ;; arg not stripped of its quoting.
                          (substitute-in-file-name identity)
+                          ;; `expand-file-name' shall do special case
+                          ;; for the first argument starting with
+                          ;; "/:~".  (Bug#65685)
+                          (expand-file-name expand-file-name)
                          ;; `add' means add "/:" to the result.
                          (file-truename add 0)
                           ;;`insert-file-contents' needs special handling.
@@ -8255,6 +8258,10 @@ arguments as the running Emacs)."
     (let ((tramp-mode (and tramp-mode (eq method 'local-copy))))
       (pcase method
         ('identity (car arguments))
+        ('expand-file-name
+         (when (string-prefix-p "/:~" (car arguments))
+           (setcar arguments (file-name-unquote (car arguments) t)))
+         (apply operation arguments))
         ('add (file-name-quote (apply operation arguments) t))
         ('buffer-file-name
          (let ((buffer-file-name (file-name-unquote buffer-file-name t)))
diff --git a/test/lisp/files-tests.el b/test/lisp/files-tests.el
index aadb60e1de7..8f6495a293c 100644
--- a/test/lisp/files-tests.el
+++ b/test/lisp/files-tests.el
@@ -662,6 +662,23 @@ unquoted file names."
   (files-tests--with-temp-non-special-and-file-name-handler (tmpfile nospecial)
     (should (equal (expand-file-name nospecial) nospecial))))
 
+(ert-deftest files-tests-file-name-non-special-expand-file-name-tilde ()
+  (let ((process-environment
+         (cons (format "HOME=%s" temporary-file-directory) 
process-environment))
+        abbreviated-home-dir)
+    (files-tests--with-temp-non-special (tmpfile nospecial)
+      (let (file-name-handler-alist)
+        (setq nospecial (file-name-quote (abbreviate-file-name tmpfile))))
+      (should (equal (expand-file-name nospecial)
+                     (expand-file-name (file-name-unquote nospecial t)))))
+    (files-tests--with-temp-non-special-and-file-name-handler (tmpfile 
nospecial)
+      (let (file-name-handler-alist)
+        (setq nospecial (file-name-quote (abbreviate-file-name tmpfile))))
+      (should-not
+       (equal (expand-file-name nospecial)
+              ;; The file name handler deletes the ".special" extension.
+              (expand-file-name (file-name-unquote nospecial t)))))))
+
 (ert-deftest files-tests-file-name-non-special-file-accessible-directory-p ()
   (files-tests--with-temp-non-special (tmpdir nospecial-dir t)
     (should (file-accessible-directory-p nospecial-dir)))



reply via email to

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