терминальная теория цвета

TLDR: Какова теория терминальных цветов?

У меня есть фиксированное значение LS_COLORS в числах: no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;33:*.cmd=00;33:*.exe=00;33:*.com=00;33:*.btm=00;33:*.bat=00;33:*.sh=00;33:*.csh=00;33:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:*.c=00;41:*.cpp=00;41:*.h=00;44:*.cu=00;43:*.cuh=00;43:ex=00;32no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;33:*.cmd=00;33:*.exe=00;33:*.com=00;33:*.btm=00;33:*.bat=00;33:*.sh=00;33:*.csh=00;33:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:*.c=00;41:*.cpp=00;41:*.h=00;44:*.cu=00;43:*.cuh=00;43:ex=00;32

Интересно, почему gnome-terminal, urxvt и yakuake показывают заметно разные цвета для одного и того же типа файлов? Разница колеблется от очень схожих (и все же явно различающихся) до резко разных – коричневых и желтых.

Точно так же существуют различия в том, как появляется цвет vim, я вижу очень разные цвета во всех трех терминалах. И когда t_Co = 8 (vim поддерживает 8 цветов) и t_Co = 256 (vim поддерживает 256 цветов).

Хуже то, что когда я копирую .XResources из Интернета, у которого есть английские имена для цветов, та же самая цветовая схема в vim показывает много разных цветов. (Я думаю, что я могу объяснить это использованием имен в vimscheme и переопределением цвета .Xresources)

Может ли кто-нибудь помочь мне понять теорию о том, как работает терминальный цвет? Ссылка будет работать отлично. Если кто-то чувствует себя более щедрым, возможно, они могут дать советы, чтобы убедиться, что у меня всегда есть стандартная среда, особенно в контексте vim?

Я должен отметить, что на yakuake моя цветовая тема: «Тема Linux» (которая, кажется, только стандартная тема) и на gnome-терминале у меня нет темы. Когда я проверяю «цветовую систему пользователя», цвета становятся еще более катастрофическими, и сам вывод искажается (например, ваниль ls показывает каждый файл на другой строке). Для urxvt единственные поля, связанные с цветом, которые я определил в .Xresources и xrdb -q yields:

 Urxvt.background: #000000 Urxvt.foreground: #FFFFFF 

Итак, некоторые скриншоты, чтобы объяснить, о чем я говорю (сначала на yakuake, второй на urxvt)

На yakuakeНа urxvt Разница явно важна …

Использование: http://www.vim.org/scripts/script.php?script_id=1349 (сначала yakuake, второй по urxvt)

введите описание изображения здесьвведите описание изображения здесь

Индексированная цветовая палитра имеет реальный рендеринг, открытый для интерпретации – на самом аппаратном обеспечении, были разные стандарты (особенно коричневый или темно-желтый, коричневый – более полезный и приятный взгляд).

Просто ознакомьтесь с этим: https://en.wikipedia.org/wiki/Color_Graphics_Adapter

На терминальных эмуляторах это зависит от конфигурации. Большинство эмуляторов имеют определенный режим ( echo $TERM ), который указывает, какое оборудование старой школы имитирует. Цвет является наименьшим из изменений – другие управляющие коды (невидимые строки символов, которые управляют позицией курсора, жирным / инверсным видео, миганием и т. Д.) Могут также иметь разные коды. Это мусор, который вы иногда получаете, когда вы нажимаете курсоры, когда тип терминала задан неправильно (например, через ssh). Некоторые более сложные эмуляторы фактически не заботятся о древних цветовых стандартах и ​​позволяют вам определять свои собственные цвета (Konsole – который использует Yakuake – имеет цветовые профили). Современные терминальные эмуляторы фактически поддерживают больше цветов, чем это (256), но, конечно, приложение, работающее в терминале, должно распознавать эту возможность (через termcap или что-то, или считывая переменную $TERM ), и выводить правильные комбинации символов для использования их.

То, что вы на самом деле хотите прочитать, – это даже таблица цветов: https://en.wikipedia.org/wiki/ANSI_escape_code