Mercurial > hg > xemacs-beta
changeset 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 | c6b1500299a7 |
children | b6c506c30f93 |
files | lisp/ChangeLog lisp/process.el man/ChangeLog man/lispref/processes.texi tests/ChangeLog tests/automated/process-tests.el |
diffstat | 6 files changed, 66 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue Sep 18 08:58:28 2012 +0200 +++ b/lisp/ChangeLog Sat Oct 13 01:09:35 2012 +0200 @@ -1,3 +1,7 @@ +2012-10-13 Mats Lidell <matsl@xemacs.org> + + * process.el (call-process-shell-command): New function from GNU. + 2012-09-18 Mats Lidell <matsl@xemacs.org> * window-xemacs.el (recenter-positions): New defcustom.
--- 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,
--- a/man/ChangeLog Tue Sep 18 08:58:28 2012 +0200 +++ b/man/ChangeLog Sat Oct 13 01:09:35 2012 +0200 @@ -1,3 +1,8 @@ +2012-10-13 Mats Lidell <matsl@xemacs.org> + + * lispref/processes.texi (Synchronous Processes): New function + call-process-shell-command. + 2012-09-18 Mats Lidell <matsl@xemacs.org> * lispref/windows.texi (Vertical Scrolling): Added
--- a/man/lispref/processes.texi Tue Sep 18 08:58:28 2012 +0200 +++ b/man/lispref/processes.texi Sat Oct 13 01:09:35 2012 +0200 @@ -309,6 +309,13 @@ @end smallexample @end defun +@defun call-process-shell-command command &optional infile destination display &rest args +This function executes the shell command @var{command} synchronously. +The final arguments @var{args} are additional arguments to add at the +end of @var{command}. The other arguments are handled as in +@code{call-process}. +@end defun + @node MS-DOS Subprocesses @section MS-DOS Subprocesses
--- a/tests/ChangeLog Tue Sep 18 08:58:28 2012 +0200 +++ b/tests/ChangeLog Sat Oct 13 01:09:35 2012 +0200 @@ -1,3 +1,8 @@ +2012-10-13 Mats Lidell <matsl@xemacs.org> + + * automated/process-tests.el: Simple test cases for + call-process-shell-command. + 2012-09-02 Aidan Kehoe <kehoea@parhasard.net> * automated/regexp-tests.el:
--- a/tests/automated/process-tests.el Tue Sep 18 08:58:28 2012 +0200 +++ b/tests/automated/process-tests.el Sat Oct 13 01:09:35 2012 +0200 @@ -1,4 +1,4 @@ -;; Copyright (C) 2011 Free Software Foundation, Inc. +;; Copyright (C) 2011, 2012 Free Software Foundation, Inc. ;; Author: Mats Lidell <matsl@xemacs.org> ;; Maintainer: @@ -67,4 +67,18 @@ (with-current-buffer "Output buffer" (goto-char (point-min)) (Assert (looking-at "foobar"))) -) + ) + +;; call-process-shell-command +(when (equal system-type 'linux) + (setenv "LANG" "C") + + ;; Output one line + (Assert (= 0 (call-process-shell-command "echo hello"))) + + ;; Output to stderr but no error buffer + (Assert (= 0 (call-process-shell-command "echo -e \"barefoot\nfoobar\n\" 1>&2" nil "Output buffer"))) + (with-current-buffer "Output buffer" + (goto-char (point-min)) + (Assert (looking-at "barefoot\n"))) + )