summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2008-11-23 03:02:48 +0000
committerGlenn Morris <rgm@gnu.org>2008-11-23 03:02:48 +0000
commit5101a9dc47c9dfbe0326c4f6501139b514261b42 (patch)
tree85f77d14c103da141fb861b2aa9e3766d5d80ddb /lisp
parent395f0100093e4b8b537e38c7c1a6bf417602bb75 (diff)
downloademacs-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.el23
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)