Я пытаюсь понять, как именно обрабатываются цвета в терминальном эмуляторе (iTerm2).Как/где значения RGB отображаются в цветовые коды xterm? Могут ли они быть переопределены?
В iTerm2 я могу настроить свою «базовую 16» цветовую палитру - в iTerm2 это делается с использованием HSL, а не 16-разрядных значений RGB. Цвета, определенные таким образом, являются родными - они используют API какао и не ограничиваются типичной 256 цветовой палитрой (они отображаются в истинном цвете).
X11's rgb.txt определяет имена цветов в цветовой палитре 256.
В оболочке, Баш или Zsh, можно напечатать текст, используя цветовую палитру 16bit 256 с echo -e "\e[38;5;82mHello \e[38;5;198mWorld"
(третьим параметром коды Xterm цвета)
В Vim (терминал не GUI) цвет используется в качестве значение 'cterm' при определении бликов (например: :highlight Normal ctermfg=188 ctermbg=233 guifg=#e8e8d3 guibg=#151515
), однако, насколько я могу судить, нет способа определить цвет терминала с использованием кода RGB, поэтому пока я могу отображать цвета base16 в truecolor, остальные цветов произвольно ограничивается 256 цветовой палитрой.
Что мне не удалось выяснить, где значения rgb сопоставляются с кодами xterm. Кажется, что это произвольная связь (коды xterm не имеют функциональной связи с значениями RGB), поэтому я предполагаю, что где-то должно быть сопоставление.
Я считаю, что цвета могут быть переопределены в .Xresources (here is an example), но я не уверен насчет пару вещей:
- .Xresources специфичен для Xterm эмулятора терминала, и я использую iTerm2, поэтому (я считаю), что это не имеет значения в моем случае. Я отключился, и iTerm2, похоже, не уважает конфигурацию .Xresources. Мне не удалось найти дополнительную документацию по этому вопросу.
- Я читал, что xterm будет приближать определения цветов из .Xresources, которые находятся за пределами веб-безопасной палитры - я не уверен, что это правда или точно, как это делается, но я полагаю, что это историческое ограничение связанных с количеством бит, используемых для хранения цветов.
Так что в данный момент я считаю, как она работает:
- Терминальные приложения излучают XTERM-совместимый последовательность эвакуации код - и цвета всегда определяются как код Xterm цвета (0-255).
- iTerm2 обнаруживает escape-последовательность.
- В iTerm2 используется внутреннее сопоставление, которое соответствует rgb.txt X11, чтобы отобразить цветовой код xterm в значение HSL.
- iTerm2 отображает цвет с использованием API какао.
Таким образом, никакие другие приложения (X11 или что-либо еще) не участвуют в цветовом сопоставлении или преобразовании - это прямо из приложения терминала к эмулятору терминала.
В этом случае, поскольку iTerm2 позволяет пользователю настраивать «базовые 16 цветов», пользователи могут использовать истинный цвет только при их рендеринге, но ограничены палитрой для всех остальных цветов.
Это правильно?
На самом деле, цвет значения не отличаются от эмуляторов терминала (см XTERM FAQ http://invisible-island.net/xterm/xterm.faq.html#dont_like_blue) –
Действительно, цвета по умолчанию могут быть изменены. В моем коротком опыте я видел больше (тонкие) вариации от одного 'rgb.txt' к другому, чем от одной палитры 16-255 к другой. – romainl
Некоторые цвета по умолчанию для xterm используют RGB, некоторые используют именованные цвета - обычно 0-15, которые настраиваются пользователем. «rxvt» и другие приложения plain-X11 имеют одинаковый комментарий. Приложения на основе Gtk, вероятно, не используют 'rgb.txt'. Любой цвет xterm может быть изменен во время выполнения - несколько более чем одним способом. –