В чем разница между xterm-color и xterm-256color?

Я сталкивался как с xterm-color, так и с xterm-256color, когда пытался настроить мою терминальную программу на использование цвета, то есть вы можете установить переменную окружения TERM на любую.

Мне было интересно, если кто-нибудь может описать разницу между этими двумя?

Я искал документацию как на своем сервере Ubuntu, так и на своем Mac, но не нашел ни одной. Мне удалось найти различные двоичные файлы только в /usr/share/terminfo.

Ответы

Ответ 1

xterm-256color описывает Xterm с поддержкой 256 цветов. xterm-color описывает более старую ветку Xterm, которая поддерживает восемь цветов. xterm-color не рекомендуется, поскольку он описывает вариант Xterm, который менее функционален и который вы вряд ли будете использовать. Обычно вы хотите использовать xterm, xterm-16color или xterm-256color.

В частности, xterm-256color является значением по умолчанию для Терминала, начинающегося с Mac OS X 10.7 Lion, со следующими лучшими рекомендуемыми значениями: xterm-16color или xterm (который описывает только поддержку восьми цветов ANSI). До 10.7 по умолчанию использовался xterm-color, поскольку Терминал не поддерживал некоторые критические функции, описанные рекомендованными значениями Xterm terminfo, например, Фоновое стирание цвета (BCE), современные коды для переключения основного/альтернативного экранов, 256 цветов.

Иногда люди явно устанавливают TERM на xterm-color (в отличие от рекомендуемых значений Xterm), чтобы отключить функциональность или обойти несовместимости между доступными значениями terminfo на конкретном компьютере и используемым эмулятором терминала.

Обратите внимание, что технически терминал должен иметь собственные обновленные значения terminfo, которые точно описывают, какие функции он поддерживает, вместо использования значений для Xterm, но:

  1. Там нет ни одного, который в настоящее время в курсе. nsterm представляет предка терминала из NeXTSTEP. Кто-то, по-видимому, недавно обновил nsterm (иногда в последние пару лет), но я не знаю, попал ли он в дистрибутив ncurses, и он может быть не совсем актуален с Terminal в 10.7.
  2. Ряд программ и скриптов настройки оболочки явно проверяют, начинается ли $TERM с (или равен) xterm. Поэтому некоторым пользователям все равно нужно знать об использовании рекомендованных значений Xterm с терминалом для совместимости с ними.

Если вы не знакомы с системой terminfo, взгляните на справочную страницу x-man-page://5/terminfo. Также вы можете использовать команду infocmp, чтобы просмотреть текущие настройки terminfo или сравнить две разные, например, infocmp xterm-color xterm-256color покажет вам все различия между этими двумя.

Ответ 2

Похоже, что xterm-256color - это Terminal.app в OS/X. Различия не крошечные - я infocmp'd xterm-color и xterm-256color на коробке Ubuntu и немного их нормализовал, и получил довольно много различий. Я мог бы даже сказать, что xterm-256color больше не xterm.

Обычно, когда вы используете определенный эмулятор терминала, вам нужно "просто знать", какая запись terminfo лучше всего с ним работает. Это подходящая пара, хотя иногда, например, вы можете использовать запись terminfo vt100 на терминале vt220.

С другой стороны, сегодня почти все совместимо с vt100.

Ответ 3

Согласно часто задаваемым вопросам по ncurses, xterm-color давно устарел:

Первоначально, xterm-color соответствовал color_xterm с середины 1990-х годов. Это было заменено XFree86 Xterm в 1996 году.

и база данных терминала дает подробности. Первоначально он был задуман как общее описание терминала, но с самого начала он никогда не был успешным, потому что он не соответствовал XFree86 xterm, в частности, поведению цвета (т.е. функция удаления заднего цвета). Никто не использует nxterm сейчас.

Описание терминала xterm-256color составлено из описания терминала (XFree86) xterm путем изменения поведения цвета (добавление большего количества цветов, но не, функция удаления цвета фона. Используйте infocmp, чтобы увидеть разницу:

$ infocmp xterm-color xterm-256color |wc -l
122
$ infocmp xterm xterm-256color |wc -l
14
$ infocmp xterm xterm-256color
comparing xterm to xterm-256color.
    comparing booleans.
        ccc: F:T.
    comparing numbers.
        colors: 8, 256.
        pairs: 64, 32767.
    comparing strings.
        initc: NULL, '\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\'.
        oc: NULL, '\E]104\007'.
        rs1: '\Ec', '\Ec\E]104\007'.
        setab: '\E[4%p1%dm', '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m'.
        setaf: '\E[3%p1%dm', '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m'.
        setb: '\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m', NULL.
        setf: '\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m', NULL.

Поскольку xterm-color устарел, он в значительной степени игнорировался, пока какой-то (анонимный) разработчик в Apple не решил повторно использовать его для Terminal.app (в 10.5 Leopard), хотя он плохо подходил. Описание nsterm-16color в ncurses было предоставлено кем-то (очевидно, вне Apple), чтобы соответствовать поведению 10.5. Хотя xterm-color использует 8 цветов, nsterm-16color, как можно догадаться, использует 16. Возможно, это способствовало путанице среди пользователей. В любом случае выбор описания терминала для Terminal.app никак не повлиял на Terminal.app, кроме как установить переменную среды TERM, которую многие приложения используют, чтобы решить, как использовать терминал.

Интересно, что хотя большая часть пользовательского пространства MacOS принадлежит BSD, его конфигурация ncurses - нет. MacOS имеет утилиты tic/infocmp, в отличие от BSD (хотя Apple не обновляла их более десяти лет: ncurses 5.7 был выпущен в 2008 году). В более поздних выпусках MacOS разработчики Terminal.app изменили меню, добавив "xterm-256color", а не "xterm-color". Это не улучшило пользовательский опыт, потому что поведение терминала, использующее соответствующие описания терминала, все еще отличалось. В часто задаваемых вопросах по ncurses упоминается, что:

Кроме того, Mac OS X 10.7, как сообщается, использует xterm-256color в качестве значения $ TERM по умолчанию. Это отличается от xterm-color несколькими способами, в частности, поддержкой bce. Он также отличается от рекомендованного nsterm-256color (infocmp сообщает о 111 различиях).