summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/eshell/esh-proc.el1
-rw-r--r--lisp/files.el5
-rw-r--r--lisp/simple.el16
3 files changed, 15 insertions, 7 deletions
diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el
index 3735f30c304..384846c7a3c 100644
--- a/lisp/eshell/esh-proc.el
+++ b/lisp/eshell/esh-proc.el
@@ -282,7 +282,6 @@ See `eshell-needs-pipe'."
(let ((process-connection-type
(unless (eshell-needs-pipe-p command)
process-connection-type))
- ;; `start-process' can't deal with relative filenames.
(command (file-local-name (expand-file-name command))))
(apply 'start-file-process
(file-name-nondirectory command) nil command args)))
diff --git a/lisp/files.el b/lisp/files.el
index fb09c96c47e..0dd597efe11 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1173,7 +1173,10 @@ consecutive checks. For example:
(defun file-local-name (file)
"Return the local name component of FILE.
-It returns a file name which can be used directly as argument of
+This function removes from FILE the specification of the remote host
+and the method of accessing the host, leaving only the part that
+identifies FILE locally on the remote system.
+The returned file name can be used directly as argument of
`process-file', `start-file-process', or `shell-command'."
(or (file-remote-p file 'localname) file))
diff --git a/lisp/simple.el b/lisp/simple.el
index 0281464c61f..241f5ece3d0 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -3892,11 +3892,14 @@ interactively, this is t."
(shell-command command t))))
(defun process-file (program &optional infile buffer display &rest args)
- "Process files synchronously in a separate process.
+ "Process files synchronously in a separate process that runs PROGRAM.
Similar to `call-process', but may invoke a file name handler based on
`default-directory'. The current working directory of the
subprocess is `default-directory'.
+If PROGRAM is a remote file name, it should be processed
+by `file-local-name' before passing it to this function.
+
File names in INFILE and BUFFER are handled normally, but file
names in ARGS should be relative to `default-directory', as they
are passed to the process verbatim. (This is a difference to
@@ -3941,12 +3944,15 @@ Similar to `start-process', but may invoke a file name handler based on
This handler ought to run PROGRAM, perhaps on the local host,
perhaps on a remote host that corresponds to `default-directory'.
-In the latter case, the local part of `default-directory' becomes
-the working directory of the process.
+In the latter case, the local part of `default-directory', the one
+produced from it by `file-local-name', becomes the working directory
+of the process on the remote host.
PROGRAM and PROGRAM-ARGS might be file names. They are not
-objects of file name handler invocation. File name handlers might not
-support pty association, if PROGRAM is nil."
+objects of file name handler invocation, so they need to be obtained
+by calling `file-local-name', in case they are remote file names.
+
+File name handlers might not support pty association, if PROGRAM is nil."
(let ((fh (find-file-name-handler default-directory 'start-file-process)))
(if fh (apply fh 'start-file-process name buffer program program-args)
(apply 'start-process name buffer program program-args))))