diff options
author | Glenn Morris <rgm@gnu.org> | 2008-11-23 03:02:48 +0000 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2008-11-23 03:02:48 +0000 |
commit | 5101a9dc47c9dfbe0326c4f6501139b514261b42 (patch) | |
tree | 85f77d14c103da141fb861b2aa9e3766d5d80ddb /lisp | |
parent | 395f0100093e4b8b537e38c7c1a6bf417602bb75 (diff) | |
download | emacs-5101a9dc47c9dfbe0326c4f6501139b514261b42.tar.gz |
(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.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/eshell/esh-cmd.el | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 2e47fd718c2..24b90f53db3 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -274,7 +274,10 @@ command line.") (defvar eshell-current-command nil) (defvar eshell-command-name nil) (defvar eshell-command-arguments nil) -(defvar eshell-in-pipeline-p nil) +(defvar eshell-in-pipeline-p nil + "Internal Eshell variable, non-nil inside a pipeline. +Has the value 'first, 'last for the first/last commands in the pipeline, +otherwise t.") (defvar eshell-in-subcommand-p nil) (defvar eshell-last-arguments nil) (defvar eshell-last-command-name nil) @@ -816,8 +819,9 @@ this grossness will be made to disappear by using `call/cc'..." (eshell-protect-handles eshell-current-handles) ,object)) -(defmacro eshell-do-pipelines (pipeline) - "Execute the commands in PIPELINE, connecting each to one another." +(defmacro eshell-do-pipelines (pipeline &optional notfirst) + "Execute the commands in PIPELINE, connecting each to one another. +This macro calls itself recursively, with NOTFIRST non-nil." (when (setq pipeline (cadr pipeline)) `(eshell-copy-handles (progn @@ -825,7 +829,7 @@ this grossness will be made to disappear by using `call/cc'..." `(let (nextproc) (progn (set 'nextproc - (eshell-do-pipelines (quote ,(cdr pipeline)))) + (eshell-do-pipelines (quote ,(cdr pipeline)) t)) (eshell-set-output-handle ,eshell-output-handle 'append nextproc) (eshell-set-output-handle ,eshell-error-handle @@ -839,10 +843,13 @@ this grossness will be made to disappear by using `call/cc'..." (setcar head (intern-soft (concat (symbol-name (car head)) "*")))))) - ;; Indicate to the command if it is the last in the pipeline. - ;; Currently only used by eshell-ls-files. - ;; Perhaps nil, rather than 'last, would be OK? - (let ((eshell-in-pipeline-p ,(if (cdr pipeline) t (quote 'last)))) + ;; First and last elements in a pipeline may need special treatment. + ;; (Currently only eshell-ls-files uses 'last.) + ;; Affects process-connection-type in eshell-gather-process-output. + (let ((eshell-in-pipeline-p + ,(cond ((not notfirst) (quote 'first)) + ((cdr pipeline) t) + (t (quote 'last))))) ,(car pipeline)))))) (defmacro eshell-do-pipelines-synchronously (pipeline) |