Permalink
Browse files

(eshell-gather-process-output):

Set process-connection-type nil for all but the first element of a
pipeline.  (Bug#1388)
  • Loading branch information...
gm authored and jwiegley committed Nov 23, 2008
1 parent f751e9e commit abe7f8516a6d5b1185933f919a5b029a24a42f81
Showing with 21 additions and 5 deletions.
  1. +21 −5 esh-proc.el
View
@@ -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)

0 comments on commit abe7f85

Please sign in to comment.