LINUX.ORG.RU

GNU screen в XTerm: как заставить отображаться все 256 цветов?


1

0

Восхищен возможностями GNU screen, но никак не могу заставить в нем работать все 256 цветов (очень нужно для цветовых схем VIM'а и Mutt'а).

- xterm версии 200 собран с 256 цветами, TERM установлен в xterm-256color, с помощью строчки "XTerm*termName: xterm-256color" в .Xdefaults. Если использовать другие значения переменной TERM, то 256 цветов в описаниях terminfo уже не будет. А так:
$ xterm -v
XTerm(200)
$ infocmp|grep -i colors#
colors#256, cols#80, it#8, lines#24, ncv#32, pairs#256,
Вывод теста 256colors2.pl (лежит в тарболле с исходными кодами XTerm) тоже верен.

- screen версии 4.0.2 собран с поддержкой 256 цветов (опция configure --enable-colors256).
$ screen -v
Screen version 4.00.02 (FAU) 5-Dec-03

Теперь запускаем из под xterm'а screen и
$ infocmp|grep -i colors#
colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
$ echo $TERMCAP|grep Co
:Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:\

Шишъ! Причем вывод теста 256colors2.pl во-первых производится почти сразу, в отличии от первого случая, а во вторых _АНАЛОГИЧЕН_ первому случаю! Строчка в .screenrc "termcapinfo xterm-256color 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'" не помогает. Также в xterm команда echo -e "\e[1;34mstring" выводит строчку string ярко синим цветом, а эта же команда уже в screen'е, запущенном из этого xterm'а выводит эту же строчку уже темно синим цветом, что ИМХО неверное поведение.

Очень не хочется специально для XTerm делать terminfo описание терминала screen.xterm-256color, хочется разрулить все опциями screen'а termcap, terminfo и termcapinfo. Слил и перечитал весь список рассылки screen-users. Описанные там рецепты не помогли. Сам я не являюсь terminfo гиком, поэтому прошу помощи у всемогущего all. ОС естественно Gentoo GNU/Linux.

P.S. Также буду очень благодарен доброму человеку за ссылку на электронную англоязычную версию книги O'Reilly "Termcap and Terminfo". В Сети в свободном доступе не нашел. В пиринговых сетях есть, но буквально у пары человек, которых постоянно нет в онлайне. Для модераторов: это не варез, книга вышла 15 лет назад и сегодня ее уже не достать в бумажном виде в России.

Ответ на: комментарий от arnold_shade

arnold_shade: это ни разу не решение. Так делать нельзя вообще. TERM при запущенном GNU screen должен быть установлен или в screen, или в похаченное terminfo описание для конкретного терминала вида screen.termname или в vt100. Иначе это грязный хак и ты поимеешь кучу неработающих клавиш, проблем вывода графики и других проблем. То, что ты предлагаешь, это все равно, что используя rvxt устанавливать переменную TERM в значение "xterm". escape последовательности виртуального эмулятора терминала screen сильно отличаются от эмулятора терминала xterm, поэтому так нельзя делать.

gentoosiast
() автор топика
Ответ на: комментарий от arnold_shade

Во-первых, тогда уж не termcapinfo xterm, а termcapinfo xterm* или termcapinfo xterm-256color, т.к. в XTerm у меня переменная TERM установлена в xterm-256color. Во-вторых, ты наверное не заметил в моем первом посте, что я это уже пробовал делать и результат:
[2:05][gentoosiast@breeze:~]$ infocmp|grep colors
colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
[2:05][gentoosiast@breeze:~]$ echo $TERMCAP|grep Co
:Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:\

Хотя тест 256colors2.pl отрабатывает верно, то есть соответствующие escape-последовательности выводят все 256 цветов. Но, уважаемый, при попытке забиндить цвета выше 16 в том же Mutt: "color indicator green color25" получаем: "25: color not supported by term". Это все потому, что Mutt и все приличные приложения смотрят либо в terminfo, либо, если это приложение старая рухлядь в termcap базу, а там светятся 8 цветов. У тебя у самого, что выдают в screen'е infocmp и echo $TERMCAP насчет цветов? Если 256, то я снимаю шляпу и прошу параметры компиляции XTerm, screen, твои .Xdefaults и .screenrc в студию. Да, спасибо, что вообще попытался помочь, с Новым Годом тебя! Have a good time!

gentoosiast
() автор топика
Ответ на: комментарий от gentoosiast

>Во-первых, тогда уж не termcapinfo xterm, а termcapinfo xterm* или termcapinfo xterm-256color Согласен, ошибся. Просто когда копировал из гугла, заменил строку у себя, но забыл сделать то же самое в сообщении.

>Во-вторых, ты наверное не заметил в моем первом посте, что я это уже пробовал делать Снова согласен, не заметил. Прошу прощения.

Тогда замени term в ~/.screenrc на screen-256color и скомпилируй собственное описание терминала (terminfo) в ~/.terminfo командой tic На вход ей нужно подать файл со следующим содержимым:

screen-256color|VT 100/ANSI X3.64 virtual terminal with 256 colors, colors#256, use=screen,

Здесь use=screen позволяет унаследоваться от терминала screen, перегрузив только число цветов.

arnold_shade
()
Ответ на: комментарий от arnold_shade

Потратив еще n-ное количество времени на эксперименты и чтение доступной мне информации о терминалах удалось наконец решить вопрос. Действительно, без составления terminfo записи ситуацию не разрулить. Команды termcap, terminfo (не случайно даже при использовании опции 'terminfo' capabilities нужно указывать в формате termcap!) и termcapinfo изменяют только содержимое переменной TERMCAP, которая на современных Linux системах не используется (привет *BSD!). Это удалось проверить экспериментальным путем: на двух терминалах, с довольно сильно различающимися escape-последовательностями XTerm и rxvt-unicode, вывод infocmp совпал до байта. Той записи, что ты здесь указал недостаточно, цвета более 8 можно будет забиндить в том-же Mutt'е, но они будут выглядеть неверно (все одного цвета). Также, term в .screenrc вообще лучше не трогать, иначе настроив XTerm мы поимеем проблемы в консоли Linux и в любом другом терминале из под которого будем запускать screen. Лучше давать название терминалу вида screen.termname, где termname это переменная TERM терминала, в котором будет запущен screen; то есть в данном случае это screen.xterm-256color, тогда никаких term в .screenrc устанавливать не нужно и при запуске screen в терминале с установленным xterm-256color будет использоваться именно эта запись, не нарушая работу в остальных терминалах под screen. Закругляясь привожу полностью рабочую terminfo запись:

screen.xterm-256color|VT 100/ANSI X3.64 virtual terminal with bce,
colors#256, pairs#256, setb=\E[48;5;%p1%dm, setf=\E[38;5;%p1%dm,
setab=\E[48;5;%p1%dm, setaf=\E[38;5;%p1%dm, use=screen-bce,

Спасибо за помощь. Удивляет меня то, что во-первых в документации screen'а о настройке цветов вообще не слова, а во-вторых ни в одном известном мне дистрибутиве screen таким образом не настроен, а чаще всего вообще собран без поддержки дополнительных цветов. Также ни один дистрибутив не взял на себя смелость забиндить в screen'е переключение окон по (shift|control|alt|другой_модификатор) + стрелки влево вправо. Убежден, что такие первоначальные настройки устроили бы большинство пользователей. Все это показывает качество современных дистрибутивов, багаж знаний "специалистов" их делающих. Сейчас больше внимания уделяется жалким монстроидальным поделкам на буквы G и K, чем качественным, отработанным десятилетиями (GNU screen уже 18(!!!) лет) решениям.

gentoosiast
() автор топика
Ответ на: комментарий от gentoosiast

Я думаю, что самое время послать предложения по улучшению ebuild-а screen. Это поможет многим. Я рад, что мои предложения помогли, сам я 256 цветов не пользую, но эта тема показалась интересной, начал тоже экспериментировать. Теперь может быть поставлю себе 256-цветную гамму в виме. :-) Что до смелости и профессионализме создателей дистрибутивов, так сейчас linux идет в массы, поэтому основной упор делается на гуи, а консоль так, побоку. Ну, это ИМХО конечно.

arnold_shade
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.