branch: externals/compat
commit 933cf6b365161744e1f791cb852274cd38e62b85
Author: Philip Kaludercic <[email protected]>
Commit: Philip Kaludercic <[email protected]>
Add file-name-quote
---
MANUAL | 1 +
compat-26.el | 10 ++++++++++
compat-tests.el | 11 +++++++++++
3 files changed, 22 insertions(+)
diff --git a/MANUAL b/MANUAL
index 307311ecd1..373e220bd9 100644
--- a/MANUAL
+++ b/MANUAL
@@ -231,6 +231,7 @@ provided by Compat by default:
- Macro: and-let* :: Defined in ~subr-x.el~.
- Function: file-local-name :: See [[info:elisp#Magic File Names][(elisp)
Magic File Names]].
- Function: file-name-quoted-p :: See [[info:elisp#File Name
Expansion][(elisp) File Name Expansion]].
+- Function: file-name-quote :: See [[info:elisp#File Name Expansion][(elisp)
File Name Expansion]].
These functions are prefixed with ~compat~ prefix, and are only loaded
when ~compat-26~ is required:
diff --git a/compat-26.el b/compat-26.el
index e8c8ca8d7c..d3c8b5c6c4 100644
--- a/compat-26.el
+++ b/compat-26.el
@@ -362,6 +362,16 @@ If NAME is a remote file name and TOP is nil, check the
local part of NAME."
(let ((file-name-handler-alist (unless top file-name-handler-alist)))
(string-prefix-p "/:" (compat--file-local-name name))))
+(compat-defun file-name-quote (name &optional top)
+ "Add the quotation prefix \"/:\" to file NAME.
+If NAME is a remote file name and TOP is nil, the local part of
+NAME is quoted. If NAME is already a quoted file name, NAME is
+returned unchanged."
+ (let ((file-name-handler-alist (unless top file-name-handler-alist)))
+ (if (compat--file-name-quoted-p name top)
+ name
+ (concat (file-remote-p name) "/:" (compat--file-local-name name)))))
+
;;* UNTESTED
(compat-defun temporary-file-directory ()
"The directory for writing temporary files.
diff --git a/compat-tests.el b/compat-tests.el
index 1ae907a644..c4089831bd 100644
--- a/compat-tests.el
+++ b/compat-tests.el
@@ -1588,5 +1588,16 @@ being compared against."
(ought t "/ssh::/:a")
(ought nil "/ssh:/:a"))
+(compat-deftest file-name-quote
+ (ought "/:" "")
+ (ought "/::" ":")
+ (ought "/:/" "/")
+ (ought "/:" "/:")
+ (ought "/:a" "a")
+ (ought "/::a" ":a")
+ (ought "/:/a" "/a")
+ (ought "/:a" "/:a")
+ (ought (concat "/ssh:" (system-name) ":/:a") "/ssh::a"))
+
(provide 'compat-tests)
;;; compat-tests.el ends here