Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: coloring STDERR to terminal

On 2004-06-29 10:14:13 -0700, Bart Schaefer wrote:
> If you want something fancier, have the coproc print a single byte to its
> stdout every time around the read loop, and put something like
>  while read -t -p -k 1; do :; done
> in the precmd() function to force the main shell to synchronize with the
> coproc before it prints the prompt.


> However, if you produce more lines of output between commands than
> there are bytes of space in the socket buffer you'll block the
> coproc and potentially deadlock everything (which is the trouble
> with filtering the output of programs that don't expect to have
> their output filtered, but that wasn't the question).

I don't understand how this can happen. Otherwise this would mean that
bytes from stderr could be discarded, which would also be very bad.

Also, in the coprocess (while read line; ...), the colored data will
be output only after a \n. However, one generally wants stderr to be
output immediately (contrary to stdout), i.e. unbuffered instead of
line buffered. I assume that -k 1 would fix that, but it would be
inefficient. One could probably use "read -t -k 1" in a loop until
it fails or return a \n. Wouldn't it be fine to have a read option
(e.g. -T) that does this, i.e. read what is requested (i.e. until \n
or num characters if -k is used) or return as soon as nothing else
is available?

Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <http://www.vinc17.org/>
100% validated (X)HTML - Acorn / RISC OS / ARM, free software, YP17,
Championnat International des Jeux Mathématiques et Logiques, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Messages sorted by: Reverse Date, Date, Thread, Author