(03/10/2011 12:28 PM), Micah Cowan wrote:
(03/10/2011 11:53 AM), Micah Cowan wrote:
(03/10/2011 11:42 AM), Philip Prindeville wrote:
My request is simple. Using termcap/ncurses info (which you need anyway
for the readline stuff), it would be nice to have the option of running
commands in a pseudo-tty and then bracketing the output from STDERR with
<highlight on>...<highlight off>.
<snip>
It wouldn't be difficult to write as a separate program, which is really
how this should be handled. You could redirect a pipeline's STDOUT and
STDERR to individual named pipes (FIFOs), and have a separate program
read from both pipes, inserting highlights around any data it copies
from the STDERR pipe.
The idea intrigued me somewhat, so I hacked up a Perl script that
attempts to do this (no guarantees of error-free code).
Find it at http://micah.cowan.name/hg/demarcate/raw-file/tip/demarcate
Set it to executable, and then try it out like:
mkfifo out
mkfifo err
./demarcate
<some program> >out 2>err
Note that you can also just do:
exec>out 2>err
instead of running a specific program under it; but note that
1. this works somewhat poorly if your prompt is colorized, or clears
graphical attributes
2. your prompt will now be highlighted, since readline emits it to
stderr.
3. bash can apparently do line-editing this way; ksh93 seems to have
a problem doing so.
Basically, I don't recommend this, but it can work for some needs.
(Idea for improving this program: allow for giving a shell command as an
argument, eliminating the need for silly named pipes; just have the
script redirect the specified command through normal pipes.)