summaryrefslogtreecommitdiff
path: root/src/process.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-10-22 01:16:04 +0000
committerRichard M. Stallman <rms@gnu.org>1993-10-22 01:16:04 +0000
commit20ddfff7191bdbfbb419964a1ce129e050c4e382 (patch)
tree0c42acd5f313278292c8864b919e46398d912fe7 /src/process.c
parent4e24c6b147db4309dbf7134eb5a9c1cb279bc498 (diff)
(status_notify): Don't read from process if filter is t.
(Fset_process_filter): Set or clear bit in input_wait_mask when nec.
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/process.c b/src/process.c
index aa7ae12aff4..491baa6434c 100644
--- a/src/process.c
+++ b/src/process.c
@@ -678,6 +678,7 @@ DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
2, 2, 0,
"Give PROCESS the filter function FILTER; nil means no filter.\n\
+t means stop accepting output from the process.\n\
When a process has a filter, each time it does output\n\
the entire string of output is passed to the filter.\n\
The filter gets two arguments: the process and the string of output.\n\
@@ -686,6 +687,10 @@ If the process has a filter, its buffer is not used for output.")
register Lisp_Object proc, filter;
{
CHECK_PROCESS (proc, 0);
+ if (EQ (filter, Qt))
+ FD_CLR (XPROCESS (proc)->infd, &input_wait_mask);
+ else if (EQ (XPROCESS (proc)->filter, Qt))
+ FD_SET (XPROCESS (proc)->infd, &input_wait_mask);
XPROCESS (proc)->filter = filter;
return filter;
}
@@ -2849,7 +2854,8 @@ status_notify ()
/* If process is still active, read any output that remains. */
if (XFASTINT (p->infd))
- while (read_process_output (proc, XFASTINT (p->infd)) > 0);
+ while (! EQ (p->filter, Qt)
+ && read_process_output (proc, XFASTINT (p->infd)) > 0);
buffer = p->buffer;