Карта0
Карта1
Карта2
Карта3
Карта4
Карта5
Карта6
Карта7
Карта8
Карта9
Карта10
Карта11
Карта12
Карта13
Карта14
Карта15
Карта16
Карта17
Карта18
Карта19
Карта20
Карта21
Карта22
Карта23
Карта24
Карта25
Карта26
Карта27
Карта28
Карта29
Карта30
Карта31
Карта32
Карта33
Карта34
Карта35
Карта36
Карта37
Карта38
Карта39


Наш форум » Железо и софт. Вопросы и ответы. » *nix » Цветная консоль

*nix Укромное место пингвиноводов =)

Ответ
Старый 19.01.2010, 15:00   #1 (permalink)
Местный
 
Аватар для WTakET
 
Регистрация: 13.07.2009
Возраст: 33
Сообщений: 1,064
Репутация: 635
Провайдер: WestCall
Цветная консоль


Некоторое время назад, возникло у меня желание сделать вывод 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
Вложения
Тип файла: txt color_table.txt (1.0 Кб, 11 просмотров)



Последний раз редактировалось WTakET, 20.01.2010 в 00:01.
WTakET вне форума   Ответить с цитированием
Старый 20.01.2010, 23:09   #2 (permalink)
Местный
 
Аватар для WTakET
 
Регистрация: 13.07.2009
Возраст: 33
Сообщений: 1,064
Репутация: 635
Провайдер: WestCall
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. Не спрашивайте что я курю и где такое купить =) , всё это зачем то делалось в здравом уме =).
Вложения
Тип файла: zip scripts256col.zip (9.7 Кб, 4 просмотров)


WTakET вне форума   Ответить с цитированием
Старый 06.07.2010, 00:20   #3 (permalink)
Местный
 
Аватар для WTakET
 
Регистрация: 13.07.2009
Возраст: 33
Сообщений: 1,064
Репутация: 635
Провайдер: WestCall


Патч для 256 цветов внесен в основной код rxvt, но пакет, в debian squeeze и sid, по-прежнему собран без этой опции.
WTakET вне форума   Ответить с цитированием
Старый 29.10.2010, 01:28   #4 (permalink)
Местный
 
Аватар для WTakET
 
Регистрация: 13.07.2009
Возраст: 33
Сообщений: 1,064
Репутация: 635
Провайдер: WestCall


Ещё более удобный выбор цвета =)
Код:
#!/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
WTakET вне форума   Ответить с цитированием
Старый 12.12.2010, 00:31   #5 (permalink)
Местный
 
Аватар для WTakET
 
Регистрация: 13.07.2009
Возраст: 33
Сообщений: 1,064
Репутация: 635
Провайдер: WestCall


Цитата:
Debian Changelog rxvt-unicode (9.09-3)

2010

rxvt-unicode (9.09-3) unstable; urgency=low

* Set TERM to rxvt-256color for regular and -ml flavors. This may be
a temporary measure until we fork the "rxvt-unicode" terminfo entry;
please send your feedback.
-- Decklin Foster <decklin@red-bean.com> Tue, 07 Dec 2010 11:33:49 -0500
Поддержка цветов есть в пакете, но "не допилено", ставить не советую, ну или пробовать оставить свой terminfo и ковырять что ещё не будет работать, а не работает многое, точнее работает не так.

UPD.
Для пользователя можно принудительно поставить, в файле ~/.Xdefaults, параметр URxvt*termName: rxvt-unicode
__________________
ʁɔvʎнdǝʚǝdǝu dиw – ɐwʎ ɔ vǝmоɔ dиw

Последний раз редактировалось WTakET, 12.12.2010 в 00:47.
WTakET вне форума   Ответить с цитированием
Ответ

Тэги
консоль, цветная




Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



СК "Новый Город" изготавливает готовый канадский дом ecopan на собственном заводе . морские грузоперевозки рязань.
При копировании информации ссылка на источник обязательна!

Часовой пояс GMT +4, время: 14:38.
vBulletin® Version 3.8.2.Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot
Template-Modifications by TMS