]> git.eshelyaron.com Git - emacs.git/commitdiff
Document file-name-quote, file-name-unquote and file-name-quoted-p
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 9 Dec 2016 09:03:05 +0000 (10:03 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 9 Dec 2016 09:03:05 +0000 (10:03 +0100)
* doc/lispref/files.texi (File Name Expansion):
* etc/NEWS: Mention file-name-quote, file-name-unquote and
file-name-quoted-p.

* lisp/files.el (file-name-non-special): Revert using
file-name-quote, file-name-unquote and file-name-quoted-p.

doc/lispref/files.texi
etc/NEWS
lisp/files.el

index 26db93cd8fd72f58d468938cb88cf68273f1bf08..906cd5626120028e5989f5111f8adf1a6f8161c5 100644 (file)
@@ -2402,6 +2402,47 @@ through the immediately preceding @samp{/}).
 
 @end defun
 
+  Sometimes, it is not desired to expand file names.  In such cases,
+the file name can be quoted to suppress the expansion, and to handle
+the file name literally.  Quoting happens by prefixing the file name
+with @samp{/:}.
+
+@defmac file-name-quote name
+This macro adds the quotation prefix @samp{/:} to the file @var{name}.
+For a local file @var{name}, it prefixes @var{name} with @samp{/:}.
+If @var{name} is a remote file name, the local part of @var{name} is
+quoted.  If @var{name} is already a quoted file name, @var{name} is
+returned unchanged.
+
+@example
+@group
+(substitute-in-file-name (file-name-quote "bar/~/foo"))
+     @result{} "/:bar/~/foo"
+@end group
+
+@group
+(substitute-in-file-name (file-name-quote "/ssh:host:bar/~/foo"))
+     @result{} "/ssh:host:/:bar/~/foo"
+@end group
+@end example
+
+The macro cannot be used to suppress file name handlers from magic
+file names (@pxref{Magic File Names}).
+@end defmac
+
+@defmac file-name-unquote name
+This macro removes the quotation prefix @samp{/:} from the file
+@var{name}, if any. If @var{name} is a remote file name, the local
+part of @var{name} is unquoted.
+@end defmac
+
+@defmac file-name-quoted-p name
+This macro returns non-@code{nil}, when @var{name} is quoted with the
+prefix @samp{/:}.  If @var{name} is a remote file name, the local part
+of @var{name} is checked.
+@end defmac
+
+
 @node Unique File Names
 @subsection Generating Unique File Names
 @cindex unique file names
index a62668a26251a4656689b874cc82199a2cc81b4e..614b61443089ff07816454e01cb531eb835e6113 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -748,6 +748,11 @@ can be used for creation of temporary files of remote or mounted directories.
 ** The new function 'file-local-name' can be used to specify arguments
 of remote processes.
 
++++
+** The new functions 'file-name-quote', 'file-name-unquote' and
+'file-name-quoted-p' can be used to quote / unquote file names with
+the prefix "/:".
+
 +++
 ** The new error 'file-missing', a subcategory of 'file-error', is now
 signaled instead of 'file-error' if a file operation acts on a file
index 6f6e8687f5258dedb5939f34d0783419145f5b59..790f6cedfd6978edfe8596227cd5108634430e69 100644 (file)
@@ -6923,19 +6923,24 @@ only these files will be asked to be saved."
     (save-match-data
       (while (consp file-arg-indices)
        (let ((pair (nthcdr (car file-arg-indices) arguments)))
-         (and (car pair) (setcar pair (file-name-unquote (car pair)))))
+         (and (car pair)
+              (string-match "\\`/:" (car pair))
+              (setcar pair
+                      (if (= (length (car pair)) 2)
+                          "/"
+                        (substring (car pair) 2)))))
        (setq file-arg-indices (cdr file-arg-indices))))
     (pcase method
       (`identity (car arguments))
-      (`add (file-name-quote (apply operation arguments)))
+      (`add (concat "/:" (apply operation arguments)))
       (`insert-file-contents
        (let ((visit (nth 1 arguments)))
          (unwind-protect
              (apply operation arguments)
            (when (and visit buffer-file-name)
-             (setq buffer-file-name (file-name-quote buffer-file-name))))))
+             (setq buffer-file-name (concat "/:" buffer-file-name))))))
       (`unquote-then-quote
-       (let ((buffer-file-name (file-name-unquote buffer-file-name)))
+       (let ((buffer-file-name (substring buffer-file-name 2)))
          (apply operation arguments)))
       (_
        (apply operation arguments)))))