Merge from origin/emacs-29

dc8b336d02 * lisp/files.el (file-name-non-special): Handle quoted ti...
This commit is contained in:
Michael Albinus 2023-10-14 09:38:17 +02:00
commit 1677a65554
2 changed files with 26 additions and 2 deletions

View file

@ -8318,13 +8318,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)
@ -8333,6 +8332,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.
@ -8388,6 +8391,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)))

View file

@ -683,6 +683,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)))