From: Glenn Morris Date: Sun, 23 Nov 2008 03:05:51 +0000 (+0000) Subject: (eshell-gather-process-output): X-Git-Tag: emacs-pretest-23.0.90~1616 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=403e4dc9896abde019ebb48c0303de5c9e1c44e6;p=emacs.git (eshell-gather-process-output): Set process-connection-type nil for all but the first element of a pipeline. (Bug#1388) --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a39021dce29..2f93e13e140 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2008-11-23 Glenn Morris + + * eshell/esh-cmd.el (eshell-in-pipeline-p): Add doc-string. + (eshell-do-pipelines): Add optional argument to distinguish recursive + calls. Use to set eshell-in-pipeline-p to 'first for the first command + in a pipeline. + + * eshell/esh-proc.el (eshell-gather-process-output): + Set process-connection-type nil for all but the first element of a + pipeline. (Bug#1388) + 2008-11-22 Juri Linkov * dired-aux.el (dired-isearch-filenames): Add new context-dependent diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index 25d9dd64663..39fea83cd8d 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -250,11 +250,27 @@ Used only on systems which do not support async subprocesses.") (cond ((fboundp 'start-process) (setq proc - (apply 'start-process - (file-name-nondirectory command) nil - ;; `start-process' can't deal with relative - ;; filenames - (append (list (expand-file-name command)) args))) + ;; Bug#1388. Some commands (eg bc) check isatty to decide + ;; whether they are being called interactively. + ;; A normal shell pipeline has: + ;; first: stdin tty , stdout pipe + ;; rest : stdin pipe, stdout pipe + ;; last : stdin pipe, stdout tty + ;; We have: + ;; first: stdin tty , stdout tty + ;; last : stdin pipe, stdout pipe + ;; In other words, the first and last elements have the + ;; wrong kind of stdout. (Perhaps this does not matter much...) + ;; FIXME which is better for the first element: + ;; tty/tty (as now), or pipe/pipe? + (let ((process-connection-type + (unless (and eshell-in-pipeline-p + (not (eq eshell-in-pipeline-p 'first))) + process-connection-type))) + (apply 'start-process + (file-name-nondirectory command) nil + ;; `start-process' can't deal with relative filenames + (append (list (expand-file-name command)) args)))) (eshell-record-process-object proc) (set-process-buffer proc (current-buffer)) (if (eshell-interactive-output-p)