]> git.eshelyaron.com Git - emacs.git/commit
When executing an Eshell pipeline, send input to the first process
authorJim Porter <jporterbugs@gmail.com>
Mon, 31 Jan 2022 02:53:53 +0000 (18:53 -0800)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 3 Feb 2022 19:02:22 +0000 (20:02 +0100)
commit3a388ab4a604f868ab2c1f9b3c63a7f7a3221f7f
treee0c4cb817c5dc16179305307ec0b56e527d7f36d
parent2e60ef696a3cf16b0eb297948e27ba0cb32a125e
When executing an Eshell pipeline, send input to the first process

Previously, input was sent to the last process in the pipeline,
resulting in unexpected behavior when running commands like
'tr a-z A-Z | rev'.

* lisp/eshell/esh-util.el (eshell-process-pair-p)
(eshell-make-process-pair): New functions.

* lisp/eshell/esh-cmd.el (eshell-last-async-proc): Rename to...
(eshell-last-async-procs): ... this, and store a pair of processes.
(eshell-interactive-process): Replace with...
(eshell-interactive-process-p, eshell-head-process)
(eshell-tail-process): ... these.
(eshell-cmd-initialize): Set 'eshell-last-async-procs'.
(eshell-do-pipelines): Set 'headproc'.
(eshell-execute-pipeline): Return 'headproc' and 'tailproc'.
(eshell-resume-eval): Use 'eshell-last-async-procs'.
(eshell-do-eval): Make sure we work with a pair of processes.

* lisp/eshell/esh-proc.el (eshell-send-eof-to-process): Move from
here...
* lisp/eshell/esh-mode.el (eshell-send-eof-to-process): ... to here,
and only send EOF to the head process.

* lisp/eshell/em-cmpl.el (eshell-complete-parse-arguments)
* lisp/eshell/esh-mode.el (eshell-intercept-commands)
(eshell-watch-for-password-prompt):
Use 'eshell-interactive-process-p'.

* lisp/eshell/em-rebind.el (eshell-delchar-or-maybe-eof)
* lisp/eshell/em-term.el (eshell-term-send-raw-string)
* lisp/eshell/esh-mode.el (eshell-self-insert-command)
(eshell-send-input, eshell-send-invisible):
Use 'eshell-head-process'.

* lisp/eshell/esh-cmd.el (eshell-as-subcommand):
Use 'eshell-tail-process'.

* lisp/eshell/eshell.el (eshell-command):
* test/lisp/eshell/eshell-tests-helpers.el
(eshell-wait-for-subprocess):
Use 'eshell-interactive-process-p' and 'eshell-tail-process'.

* test/lisp/eshell/eshell-tests.el (eshell-test/pipe-headproc-stdin):
New test.
lisp/eshell/em-cmpl.el
lisp/eshell/em-rebind.el
lisp/eshell/em-term.el
lisp/eshell/esh-cmd.el
lisp/eshell/esh-io.el
lisp/eshell/esh-mode.el
lisp/eshell/esh-proc.el
lisp/eshell/esh-util.el
lisp/eshell/eshell.el
test/lisp/eshell/eshell-tests-helpers.el
test/lisp/eshell/eshell-tests.el