From: Miles Bader <miles@gnu.org>
Date: Fri, 5 Oct 2001 12:30:20 +0000 (+0000)
Subject: (call-process-shell-command): New function.
X-Git-Tag: ttn-vms-21-2-B4~19719
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=93aca633e14ebd09a0056c8e62e7e55721124619;p=emacs.git

(call-process-shell-command): New function.
---

diff --git a/lisp/subr.el b/lisp/subr.el
index 309338c4577..5e52728cb3a 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1062,6 +1062,38 @@ Wildcards and redirection are handled as usual in the shell."
    (t
     (start-process name buffer shell-file-name shell-command-switch
 		   (mapconcat 'identity args " ")))))
+
+(defun call-process-shell-command (command &optional infile buffer display
+					   &rest args)
+  "Execute the shell command COMMAND synchronously in separate process.
+The remaining arguments are optional.
+The program's input comes from file INFILE (nil means `/dev/null').
+Insert output in BUFFER before point; t means current buffer;
+ nil for BUFFER means discard it; 0 means discard and don't wait.
+BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case,
+REAL-BUFFER says what to do with standard output, as above,
+while STDERR-FILE says what to do with standard error in the child.
+STDERR-FILE may be nil (discard standard error output),
+t (mix it with ordinary output), or a file name string.
+
+Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
+Remaining arguments are strings passed as additional arguments for COMMAND.
+Wildcards and redirection are handled as usual in the shell.
+
+If BUFFER is 0, `call-process-shell-command' returns immediately with value nil.
+Otherwise it waits for COMMAND to terminate and returns a numeric exit
+status or a signal description string.
+If you quit, the process is killed with SIGINT, or SIGKILL if you quit again."
+  (cond
+   ((eq system-type 'vax-vms)
+    (apply 'call-process command infile buffer display args))
+   ;; We used to use `exec' to replace the shell with the command,
+   ;; but that failed to handle (...) and semicolon, etc.
+   (t
+    (call-process shell-file-name
+		  infile buffer display
+		  shell-command-switch
+		  (mapconcat 'identity (cons command args) " ")))))
 
 (defmacro with-current-buffer (buffer &rest body)
   "Execute the forms in BODY with BUFFER as the current buffer.