Dziman, ничего тут странного нет, обычный полёт фантазии, чего многим не хватает или не дано!
Надеюсь "консоль" работает на vt10X совместимом терминальном эмуляторе (все программные в Linux, включая putty в Windows). До написания скрипта необходимо понимать как работает вывод, вчастности на терминал. Программа будь-то `cat` или `mc` по своей сути просто выводит символы на то, что им предоставляется запускаемым процессом как stdout,
где STDOUT_FILENO = 1 (обычно).
Исторически терминалами были железные ящики с меньшей вычислительной способностью, чего хватало на то чтоб плучать символы и в зависимости от того, что получено выполнять отображение и манипуляции с содержимым экрана.
man console_codes, http://kerneltrap.org/man/linux/man4/console_codes.4 содержит достаточно информации для того, чтобы узнать что каждый символ выполняет. Для простоты надо разделить символьный поток на
* управляющие символы
* управляющие последовательности символов
* обычные симвлы
типичные фунции:
+ перевод курсора на новую строку, перевод его в начало строки и пр
+ escape последовательности, указание атрибутов символов и пр
+ все, что не являются управляющими и не входят в состав последовательности.
Терминальный вывод -- это очень кривое наследие, с которым приходится считатся. Но почему-то это наследие не имеет в себе ничего подобного на Turbo Vision look and feel. Причин можно назвать много, но основная, это война как аппаратных терминалов, так и UNIX на чисто коммерческой основе. С программной точки зрения, универсальность посимвольной работы и её простота, позволяют реализовывать теперь уже эмуляторы терминалов очень просто, учитывя что фунционал очень примитивный. Все символы идущие в stdout/stderr попадая в терминал выполняют свои функции, но попадая в перенаправленный файл или pipe, они просто пугают. И это одна из кривостей (for tty в скрипте предусмотрено для этого случая).
(Ещё немного потерпеть прежде чем начнётся скриптинг.)
Проработав в текстовой консоли достаточно времени, я просто поразился тому, как идеи терминального вывода застыли в 70х. Для меня кажется тривиальным иметь современное окно вывода разделённое на части в которых видны отдельно stdout, stderr. Этого легко достичь программно, но это также очень легко и без костылей можно было делать в эмуляторах терминалов. Кроме этого каждый вывод можно было делать в свой кусок памяти видео адаптера(64/128 мегов рамы просто так греют комнату
http://hedera.linuxnews.pl/_news/2002/0 ... /1445.html ), который бы управлялся как окно, то есть скроллинг, изменение размеров и положения (помимо всего прочего).
О чём тут говорить, если главный разработчик основной библиотеки glibc, с радостью сообщает читателям своего блога, что он таки использует цветной `grep`
http://udrepper.livejournal.com/17109.html , а разработчики ядра линукс до сих пор охотятся за сообщениями stderr скролируя однообразный суп выводимый системой сборки?
Приступим. Цвета и атрибуты, естественно по вкусу.
Код: Выделить всё
#!/bin/sh
color() {
# $1 -- regex
# $2 -- color code
# $3 -- next color code
printf %s "`eval echo $TERMINAL_OUTPUT`"
}
# for tty
[ -t 1 ] && {
# escape symbol
E=`printf '\x1B'`
# default rendering
D="$E[0m"
# attributes for filtered stuff (reset bg color and bold, set fg color)
V="$E[40;22;3"
TERMINAL_OUTPUT='s-"$1"-"$V$2m&$V${3-0}m"-;'
}
exec sed "
`color '[^:]*' 4 3`
`color : 3 2`
`color AMD 6 2`
`color Intel 6 2`
`color Athlon '6;44' 2`
`color Pentium '6;44' 2`
"
Скачать:
ftp://flower.upol.cz/crazy/colorize.sh
Что-то такое придумалось. Каждый `color` это, можно сказать, цветной `grep`. Где-то ещё я делал подсветку скриптов (нетривиально) и вывода типа как у `stat`, но это нужно поискать.
Для игр более сложных в плане разрисовки, надо уже более детальное знание `sed` и basic regular expressions (man regex). Для понимания скрипта, надо немного посидеть, как моя школьная математица говорила: "покрутить".
Я как-то хотел было сделать свою систему окон вдобавок к обычным терминалам и свою примочку к редактору с качественной подстветкой синтаксиса у regex. За много десятилетий UNIX и Emacs ни у первых ни у eLISP-вторых таких достижений я не вижу. И как мне кажется отсуствие подсветки в таких базовых вещах говорит только о том, как всё плохо в "современных компьютерных технологиях".
Так что если есть желание работать вместе, милости прошу.