How-To: Побег из ада (rxvt, Unicode, 256color, termcap, terminfo и screen)

После довольно продолжительной борьбы с настройками терминала для получения приятного внешнего вида с 256 цветами в rxvt и screen даже через SSH я подумал, что мои результаты могут быть полезны и другим пользователям.

Первый шаг --- убедиться, что все ваши программы правильно скомпилированы. Для соответствующих портов имеется ряд опций, поэтому дважды проверьте их с помощью make config!

При наличии rxvt-unicode и screen, собранных с поддержкой 256 цветов, у вас не должно быть проблем с использованием, например, vim в X11.

Проблема возникла после попытки использовать vim через SSH с linux-машины из rxvt-unicode.

Переменной среды TERM присваивается значение rxvt-256color, которое не может быть найдено в /etc/termcap. Это ловушка №1.

Для решения этой проблемы создайте в домашнем каталоге файл с именем .termcap. Это можно сделать следующей командой (будьте осторожны, она перезапишет любой существующий файл):

% cat > $HOME/.termcap << EOF
rxvt-256color|rxvt-256color terminal (X Window System):\
  :tc=rxvt-unicode:\
  :tc=rxvt:
EOF

Теперь vim или любая другая программа (например, ls -G) должны радовать вас цветным выводом. Но после запуска screen вы увидите, что цвета снова исчезли. Это ловушка №2.

Вполне возможно, что screen будет доволен во время своей работы. Он расскажет вам о записи termcap для rxvt-256color, и вы просто добавили ее в $HOME/.termcap.

Чтобы заставить screen распознать вашу новую запись termcap, вам нужно поместить содержимое .termcap в переменную окружения TERMCAP. Для этого добавте что-то подобное в rc-файл вашей оболочки (например, в .bashrc):

if [ -f ${HOME}/.termcap ]; then
	TERMCAP=$(< ${HOME}/.termcap)
	export TERMCAP
fi

Теперь выйдите из системы и зайдите снова, но вы увидите, что screen все еще вас не устраивает. Это ловушка №3 (и, наконец, последняя). В вашем .screenrc обратите внимание на запись termcapinfo, подобную этой:

termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

Измените ее или создайте, если необходимо, чтобы она выглядела так:

termcapinfo xterm-color|xterm-16color|xterm-88color|xterm-256color|rxvt* 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

Перезапустите screen, и теперь вы, наконец, сможете наслаждаться всеми 256 цветами.

Я надеюсь, что это было полезным. Любые комментарии или замечания принимаются.

jrk, Apr 16, 2010


Тем не менее есть то, что я бы назвал основной проблемой: отсутствие 256 цветов в некоторых приложениях.

Во-первых ~/.termcap следует исправить следующим образом:

% cat > $HOME/.termcap << EOF
rxvt-256color|rxvt-256color terminal (X Window System):\
  :Co#256:\
  :tc=rxvt-unicode:\
  :tc=rxvt:
EOF

Затем, для полноты, указать urxvt-клиенту всегда использовать rxvt-256color как значение переменной TERM, исправив ~/.Xdefaults:

urxvt*termName: rxvt-256color

Но все, для чего это действительно нужно, --- это обход проблемы, которая должна быть решена в /etc/termcap. Запись termcap rxvt-unicode ломается сама по себе, так как для корректной работы tc=rxvt нужна функция rxvt-256color. Кроме того, x11/rxvt-unicode должен изменить жестко закодированное значение по умолчанию для переменной termName, если определена XTERM_COLOR, и ни в коем случае не должен допускать использование записи termcap rxvt по умолчанию, поскольку для этого необходимо включить функции rxvt-unicode.

Andres, Aug 5, 2010