Mercurial > hg > xemacs-beta
diff lisp/process.el @ 5687:965a9ddc915a
Introduce call-process-shell-command from GNU.
Thanks GNU. Used in recent versions of org-mode.
2012-10-13 Mats Lidell <matsl@xemacs.org>
* process.el (call-process-shell-command): New function from GNU.
2012-10-13 Mats Lidell <matsl@xemacs.org>
* lispref/processes.texi (Synchronous Processes): New function
call-process-shell-command.
2012-10-13 Mats Lidell <matsl@xemacs.org>
* automated/process-tests.el: Simple test cases for
call-process-shell-command.
author | Mats Lidell <matsl@xemacs.org> |
---|---|
date | Sat, 13 Oct 2012 01:09:35 +0200 |
parents | cc6f0266bc36 |
children | f6af091ac654 |
line wrap: on
line diff
--- a/lisp/process.el Tue Sep 18 08:58:28 2012 +0200 +++ b/lisp/process.el Sat Oct 13 01:09:35 2012 +0200 @@ -1,6 +1,6 @@ ;;; process.el --- commands for subprocesses; split out of simple.el -;; Copyright (C) 1985-7, 1993,4, 1997, 2011 Free Software Foundation, Inc. +;; Copyright (C) 1985-7, 1993,4, 1997, 2011, 2012 Free Software Foundation, Inc. ;; Copyright (C) 1995, 2000, 2001, 2002 Ben Wing. ;; Author: Ben Wing @@ -81,6 +81,34 @@ (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." + ;; We used to use `exec' to replace the shell with the command, + ;; but that failed to handle (...) and semicolon, etc. + (call-process shell-file-name + infile buffer display + shell-command-switch + (mapconcat 'identity (cons command args) " "))) + (defun process-synchronize-point (proc) "Set the point(s) in buffer and stderr-buffer according to the process mark." ;; We need this because the documentation says to insert *BEFORE* point,