Mercurial > emacs
changeset 100055:40edc7692997
(eshell-needs-pipe): New variable.
(eshell-needs-pipe-p): New function.
(eshell-gather-process-output): Set process-connection-type according to
eshell-needs-pipe-p. (Bug#1388)
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Sun, 30 Nov 2008 01:28:01 +0000 |
parents | 01f0a0822eb9 |
children | 961732603114 |
files | lisp/ChangeLog lisp/eshell/esh-proc.el |
diffstat | 2 files changed, 34 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sun Nov 30 01:01:18 2008 +0000 +++ b/lisp/ChangeLog Sun Nov 30 01:28:01 2008 +0000 @@ -1,3 +1,10 @@ +2008-11-30 Glenn Morris <rgm@gnu.org> + + * eshell/esh-proc.el (eshell-needs-pipe): New variable. + (eshell-needs-pipe-p): New function. + (eshell-gather-process-output): Set process-connection-type according to + eshell-needs-pipe-p. (Bug#1388) + 2008-11-30 Juanma Barranquero <lekktu@gmail.com> * calendar/diary-lib.el (diary-cyclic): Doc fix.
--- a/lisp/eshell/esh-proc.el Sun Nov 30 01:01:18 2008 +0000 +++ b/lisp/eshell/esh-proc.el Sun Nov 30 01:28:01 2008 +0000 @@ -236,6 +236,26 @@ "A marker that tracks the beginning of output of the last subprocess. Used only on systems which do not support async subprocesses.") +(defvar eshell-needs-pipe '("bc") + "List of commands which need `process-connection-type' to be nil. +Currently only affects commands in pipelines, and not those at +the front. If an element contains a directory part it must match +the full name of a command, otherwise just the nondirectory part must match.") + +(defun eshell-needs-pipe-p (command) + "Return non-nil if COMMAND needs `process-connection-type' to be nil. +See `eshell-needs-pipe'." + (and eshell-in-pipeline-p + (not (eq eshell-in-pipeline-p 'first)) + ;; FIXME should this return non-nil for anything that is + ;; neither 'first nor 'last? See bug#1388 discussion. + (catch 'found + (dolist (exe eshell-needs-pipe) + (if (string-equal exe (if (string-match "/" exe) + command + (file-name-nondirectory command))) + (throw 'found t)))))) + (defun eshell-gather-process-output (command args) "Gather the output from COMMAND + ARGS." (unless (and (file-executable-p command) @@ -250,11 +270,13 @@ (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))) + (let ((process-connection-type + (unless (eshell-needs-pipe-p command) + 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)