Function: tramp-sh-handle-process-file
tramp-sh-handle-process-file is a byte-compiled function defined in
tramp-sh.el.gz.
Signature
(tramp-sh-handle-process-file PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS)
Documentation
Like process-file for Tramp files.
Source Code
;; Defined in /usr/src/emacs/lisp/net/tramp-sh.el.gz
(defun tramp-sh-handle-process-file
(program &optional infile destination display &rest args)
"Like `process-file' for Tramp files."
(tramp-skeleton-process-file program infile destination display args
(let (env uenv)
;; Compute command.
(setq command (mapconcat #'tramp-shell-quote-argument
(cons program args) " "))
;; We use as environment the difference to toplevel `process-environment'.
(dolist (elt process-environment)
(or (tramp-local-environment-variable-p elt)
(if (string-search "=" elt)
(setq env (append env `(,elt)))
(setq uenv (cons elt uenv)))))
(setq env (setenv-internal env "INSIDE_EMACS" (tramp-inside-emacs) 'keep))
(when env
(setq command
(format
"env %s %s"
(mapconcat #'tramp-shell-quote-argument env " ") command)))
(when uenv
(setq command
(format
"unset %s && %s"
(mapconcat #'tramp-shell-quote-argument uenv " ") command)))
(when input (setq command (format "%s <%s" command input)))
(when stderr (setq command (format "%s 2>%s" command stderr)))
;; Send the command. It might not return in time, so we protect
;; it. Call it in a subshell, in order to preserve working
;; directory.
(condition-case nil
(unwind-protect
(setq ret (tramp-send-command-and-check
v (format
"cd %s && %s"
(tramp-shell-quote-argument localname) command)
t t t))
(unless (natnump ret) (setq ret 1))
;; We should add the output anyway.
(when outbuf
(with-current-buffer outbuf
(insert
(tramp-get-buffer-string (tramp-get-connection-buffer v))))
(when (and display (get-buffer-window outbuf t)) (redisplay))))
;; When the user did interrupt, we should do it also. We use
;; return code -1 as marker.
(quit
(kill-buffer (tramp-get-connection-buffer v))
(setq ret -1))
;; Handle errors.
(error
(kill-buffer (tramp-get-connection-buffer v))
(setq ret 1)))
;; Handle signals.
(when (and process-file-return-signal-string
(natnump ret) (>= ret 128))
(setq ret (nth (- ret 128) (tramp-sh-get-signal-strings v)))))))