| *nix Укромное место пингвиноводов =) |
![]() |
|
|
#1 (permalink) |
|
Местный
|
Цветная консоль
Некоторое время назад, возникло у меня желание сделать вывод ls более наглядным, то есть с расцветкой по типу. Решение естественно нагуглилось и по прошествии нескольких дней забылось. А несколько дней назад цвета понадобились снова, опять гугление...хм, подумал я =)
Итак, функция "колорирования" реализована в самом терминале. Для вывода в цвете служит специальная строка вида: ESC[{attr1};…;{attrn}m где ESC, это эскейп-символ, вывести который можно "сказав" \033 или \e , а {attrn} атрибуты задающие свойства и цвет текста и бэкграунда. Для свойств теста эти значения от 0 до 9(?), для цвета от 30 до 37, и для цвета бекграунда от 40 до 47. Чтобы не запоминать значения каждого атрибута, я сделал скрипт выводящий таблицу цветов. Выглядит вывод этого скрипта так: ![]() То есть, как видно из примера, echo, с включенным обработчиком эскейп-последовательностей (опция "-e"), выводит строку в нужном нам цвете. Применимо это не только в shell, но и в языках программирования, например: print "\033[32;40mЗелёный на чёрном" - для Python printf("\033[32;40mЗелёный на чёрном"); - для С Вот так это работает. Теперь "наши бараны", тобишь цветной вывод ls. Программа ls использует переменную окружения LS_COLORS для определения цветов, которыми должны отображаться имена файлов. Эта переменная окружения обычно устанавливается командой типа eval `dircolors some_path/dir_colors` Для dircolors уже есть вкомпилированная база цветов, и она будет задействована, если не указать программе путь до своего файла. Копируем вкомпилированную базу в файл .dir_colors: dircolors -p > ~/.dir_colors Редактируем цвета "под себя" используя таблицу. Прописываем её в инит своего шелла: echo 'eval `dircolors ~/.dir_colors`' >> .zshrc Профит! Цвет также можно использовать для строки приветствия терминала, для этого в конфиге шелла редактируем переменную $PS (для bash). Вывод less, также может-быть разукрашен, редактируем переменные LESS_TERMCAP. В общем применение думаю найдётся =) Вот что ещё хотелось бы сказать. У разных терминалов свои цвета и свойства, шрифт терминала также влияет на их отображение. Например, urxvt с шрифтом Terminus, не рисует курсив и никак это не обозначает, gnome-terminal с любыми шрифтами(?) не умеет blink (моргающий тест), терминал linux ,который обычно на консолях по Ctrl+Alt+Fn, не умеет курсив, но красит его в другой цвет. Яркий цвет, в некоторых терминалах и шрифтах, может отображаться жирным. P.S. Движок форума не даёт загрузить файл без расширения, поэтому скрипт будет в .txt Последний раз редактировалось WTakET, 20.01.2010 в 00:01. |
|
|
|
|
|
#2 (permalink) |
|
Местный
|
256 цветов
16 цветов терминал поддерживает изначально, а для иксовых эмуляторов есть расширенная функция отображения 256 цветов. Правда зачастую эта функция отключена, не знаю чем руководствуются ментейнеры пакетов не включая её, однако это так.
В используемом мной эмуляторе rxvt-unicode эта функция как раз отключена. Приходится пересобирать пакет самому, для этого устанавливаем все зависимости нужные для сборки: apt-get build-dep rxvt-unicode Далее, по уму, надо-бы получать исходники из репозитория: apt-get source rxvt-unicode но их по непонятным причиним нет, по крайней мере в локальном зеркале. Поэтому забираем их с CVS разработчика: cvs -z3 -d :pserver:anonymous@cvs.schmorp.de/schmorpforge co rxvt-unicode Применяем патч, который лежит в директории doc (именно на него почему-то не обращает внимание ментейнер): cd rxvt-unicode patch -p1 < doc/urxvt-8.2-256color.patch Если бы были исходники из репозитория, то надо было бы редактировать правила сборки в файле debian/rules и делать dpkg-buildpackage, мне приходится делать: ./configure --enable-256-color make И чтобы уж совсем не отворачиваться от debian-way, собираю пакет с помощью checkinstall: checkinstall make install И устанавливаю пакет: dpkg -i rxvt-unicode_9.07-1_i386.deb По идее уже всё должно работать, но в интернетах некоторые пишут надо изменить базу terminfo для терминала: infocmp -L rxvt-unicode > rxvt-unicode.terminfo Теперь в файле rxvt-unicode.terminfo находим строку lines_of_memory#0, max_colors#88, max_pairs#256 и изменяем на lines_of_memory#0, max_colors#256, max_pairs#32767 Создаём директорию .terminfo install -d .terminfo И собираем базу для urxvt tic -o .terminfo/ rxvt-unicode.terminfo Файл rxvt-unicode.terminfo больше не нужен. Теперь точно должно работать. Для проверки работы есть скрипт, запускаем терминал: urxvt качаем скрипт: wget http://www.cs.rice.edu/~scrosby/soft.../256colors2.pl запускаем его: perl 256colors2.pl Должно получится вот так: ![]() Для вывода в цвете, также как и для встроенных цветов, используется эскейп-код: \e[38;5;${N}m - для цвета текста \e[48;5;${M}m - для цвета бекграунда M и N код цвета, который можно получить с помощью скрипта из RGB в 16-чной форме записи. Скрипт подбирает самый близкий, к входящему RGB, цвет ![]() Или с помощью другого скрипта, который выводит таблицу с кодами ![]() Всё. Все скрипты в прикреплённом архиве. P.S. Не спрашивайте что я курю и где такое купить =) , всё это зачем то делалось в здравом уме =). |
|
|
|
|
|
#3 (permalink) |
|
Местный
|
Патч для 256 цветов внесен в основной код rxvt, но пакет, в debian squeeze и sid, по-прежнему собран без этой опции.
|
|
|
|
|
|
#4 (permalink) |
|
Местный
|
Ещё более удобный выбор цвета =)
Код:
#!/bin/bash
for line in {0..15}; do
for col in {0..15}; do
code=$(( $col * 16 + $line ))
printf $'\e[38;05;%dm %3d' ${code} ${code}
done
echo
done
![]()
__________________
ʁɔvʎнdǝʚǝdǝu dиw – ɐwʎ ɔ vǝmоɔ dиw |
|
|
|
|
|
#5 (permalink) | |
|
Местный
|
Цитата:
UPD. Для пользователя можно принудительно поставить, в файле ~/.Xdefaults, параметр URxvt*termName: rxvt-unicode
__________________
ʁɔvʎнdǝʚǝdǝu dиw – ɐwʎ ɔ vǝmоɔ dиw Последний раз редактировалось WTakET, 12.12.2010 в 00:47. |
|
|
|
|
![]() |
| Тэги |
| консоль, цветная |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | |
| Опции просмотра | |
|
|