(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)
This commit is contained in:
Glenn Morris 2008-11-30 01:28:01 +00:00
parent 64ba814f12
commit 1e262c4566
2 changed files with 34 additions and 5 deletions

View file

@ -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.

View file

@ -236,6 +236,26 @@ The prompt will be set to PROMPT."
"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 @@ Used only on systems which do not support async subprocesses.")
(cond
((fboundp 'start-process)
(setq proc
(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)))
;; `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)