Раскраска true терминала в Open/NetBSD

Раскраска true терминала в Open/NetBSD

spinore, он же Пилявец Олег fenicottero-at-gmail.com.

Недавно в форуме www.obsd.ru появились вопросы о том, как

1) поменять раскраску страниц руководства man, а также 2) заставить консольные приложения показывать подсветку (например, vim, mutt, centericq, mcabber) в Open/NetBSD в обычной консоли (не в X'ах).

1) В OpenBSD для включения подцветки консольных приложений достаточно прописать тип терминала в командной строке:

$ export TERM=wsvt25m

Для сохранения настроек указанный тип терминала можно указать в /etc/ttys вместо vt220 или vt100 по умолчанию.

В NetBSD есть баг, который не позволяет выводить цвета приложениям при использовании терминала wsvt25m. Данная проблема решена в current-ветке. В случае же стэйбл-ветки 3.0 проблема решается следующим образом: требуется исправить системный файл /usr/share/misc/termcap. К этому файлу нужно применить следующий патч:

$ diff -ubB /mnt/fat/share/misc/termcap /usr/share/misc/termcap
--- /mnt/fat/share/misc/termcap 2005-07-05 19:37:51.000000000 +0400
+++ /usr/share/misc/termcap     2006-07-19 17:58:48.000000000 +0400
@@ -932,7 +932,7 @@
# These are micro-minimal and probably need to be redone for real
# after the manner of the pcvt entries.
wsvt25|NetBSD wscons in 25 line DEC VT220 mode:\
-       :Co#16:NC#32:pa#256:it#8:ms:ut:\
+       :Co#8:pa#64:it#8:ms:ut:\
:@7=\E[8~:is=\E[r\E[25;1H:\
:k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:k6=\E[17~:\
:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kh=\E[7~:F1=\E[23~:F2=\E[24~:\
$

После исправления (c правами root) делаем рекриэйт базы:

# rm /usr/share/misc/termcap.db
# cap_mkdb -f /usr/share/misc/termcap /usr/share/misc/termcap

Аналогично случаю с OpenBSD, прописывая тип терминала в /etc/ttys как wsvt25m, получаем цветность консольных приложений.

Замечу, что можно было бы воспользоваться и другим типом терминала для включения цветности приложений:

$ export TERM=ansi

(для которого) не требуется баг-фикс в случае NetBSD, однако это может привести к проблемам в распознавании клавиш (например, в centericq). Соответственно, не рекомендуется пользоваться ansi.

2) Раскраска man pages как в OpenBSD, так и NetBSD на уровне пользователся происходит так - создаётся файл ~/.termcap следущего содержания:

$ cat ~/.termcap
wsvt25mc|NetBSD wscons in 25 line DEC VT220 mode with Meta and colored attributes:\
:md=\E[32m:us=\E[1;36m:ue=\E[m:tc=wsvt25m:
wsvt25mc-bgbc|NetBSD wscons in 25 line DEC VT220 mode with Meta and colored attributes, bright
green, bright cyan:\
:md=\E[1;32m:us=\E[1;36m:ue=\E[m:tc=wsvt25m:
wsvt25mc-bgbr|NetBSD wscons in 25 line DEC VT220 mode with Meta and colored attributes, bright
green, bright red:\
:md=\E[1;32m:us=\E[1;31m:ue=\E[m:tc=wsvt25m:
$

( В случае OpenBSD всё равно пишется "NetBSD" ). После этого, для просмотра страниц man, где

a) жирный шрифт показан зелёным по-чёрному, а подчёркнутый - ярко-голубым по-чёрному пишем:

$ TERM=wsvt25mc man man

b) жирный шрифт показан ярко-зелёным по-чёрному, а подчёркнутый - ярко-голубым по-чёрному пишем:

$ TERM=wsvt25mc-bcbg man man

c) жирный шрифт показан ярко-зелёным по-чёрному, а подчёркнутый - ярко-красным по-чёрному пишем:

$ TERM=wsvt25mc-bgbr man man

Указанные типы терминалов (wsvt25mc, wsvt25mc-bcbg и wsvt25mc-bgbr) не рекомендуется использовать для других целей, кроме как для просмотра man-страниц, вследствие ряда проблем с цветностью других приложений (у меня, например, mutt стал показывать другую гамму цветов) и, возможно, клавишными комбинациями. Для использования данных типов терминалов (рекомендуется выбрать по желанию) только для просмотра man-страниц можно создать алиас для команды man. В моём случае (у меня в качестве шелла zsh) я поступил так:

$ echo "alias man='TERM=wsvt25mc-bgbc man'" >> ~/.zshrc

Итак, теперь в обычном терминале для всех приложений тип терминала - wsvt25m (берётся из /etc/ttys), для cтраниц же man - wsvt25mc-bgbc (берётся из переменной TERM, которая прописана в алиасе).

Попутно замечу, что указанная расцветка ман-страниц теперь работает и в X-терминалах, так как после каждого запуска графического терминала запускается zsh, который содержит алиас на команду man.