Как и где значения RGB сопоставляются с цветовыми кодами xterm? Могут ли они быть переопределены?

Я пытаюсь понять, как именно цвета обрабатываются в моем эмуляторе терминала (iTerm2).

В iTerm2 я могу настроить свою цветовую палитру «базовые 16» — в iTerm2 это делается с использованием HSL, а не 16-битных значений RGB. Определенные таким образом цвета являются нативными — они используют API какао и не ограничены типичной палитрой из 256 цветов (они отображаются в истинном цвете).

rgb.txt X11 определяет названия цветов в палитре 256 цветов.

В оболочке, bash или zsh я могу печатать текст, используя 16-битную 256-цветную палитру с echo -e "\e[38;5;82mHello \e[38;5;198mWorld" (третий параметр — цветовой код xterm)

В vim (терминал, а не графический интерфейс) цвета используются как значение «cterm» при определении бликов (например: :highlight Normal ctermfg=188 ctermbg=233 guifg=#e8e8d3 guibg=#151515), однако, насколько я могу судить, нет способа определить цвет терминала с помощью кода RGB, поэтому в то время как я могу отображать базовые 16 цветов в истинном цвете, остальные цвета произвольно ограничены палитрой из 256 цветов.

Чего я не смог понять, так это того, где значения rgb сопоставляются с кодами xterm. Похоже, что это произвольная связь (коды xterm не имеют функциональной связи со значениями RGB), поэтому я предполагаю, что где-то должно быть сопоставление.

Я считаю, что цвета можно переопределить в .Xresources (вот пример), но я не уверен в паре вещей:

  1. .Xresources специфичен для эмулятора терминала xterm, и я использую iTerm2, поэтому (я считаю), что это не имеет значения в моем случае. Я повозился, и iTerm2, похоже, не соблюдает конфигурацию .Xresources. Я не смог найти больше документации по этому вопросу.
  2. Я читал, что xterm будет аппроксимировать определения цвета из .Xresources, которые находятся за пределами веб-безопасной палитры - я не уверен, правда ли это или как именно это делается, но я полагаю, что это историческое ограничение, связанное с количество битов, используемых для хранения цветов.

Итак, на данный момент я считаю, что это работает следующим образом:

  1. Терминальные приложения выдают последовательность управляющих кодов, совместимую с xterm, а цвета всегда определяются как цветовой код xterm (0-255).
  2. iTerm2 обнаруживает управляющую последовательность.
  3. iTerm2 использует внутреннее сопоставление, которое соответствует rgb.txt X11, для сопоставления цветового кода xterm со значением HSL.
  4. iTerm2 отображает цвет с помощью API какао.

Таким образом, никакие другие приложения (X11 или что-то еще) не участвуют в отображении или преобразовании цветов - это прямо из терминального приложения в эмулятор терминала.

В этом случае, поскольку iTerm2 позволяет пользователю настраивать только «базовые 16 цветов», пользователи могут использовать истинный цвет только при рендеринге, но ограничены веб-безопасной палитрой для всех остальных цветов.

Это правильно?


person nfarrar    schedule 05.01.2015    source источник


Ответы (1)


Палитра xterm по умолчанию является стандартной и ожидается, что она будет такой же в каждая реализация xterm. Он отличается от более или менее стандартного файла rgb.txt, который используется только программами с графическим интерфейсом.

Первые 16 цветов, от 0 до 15, имеют более или менее стандартные названия, "красный", "темно-зеленый" и т. д. .

Первые 16 цветов обычно могут быть определены пользователем (используя CMYK, HSL, RGB или шестнадцатеричное представление, это не имеет значения), поэтому использование «красного» или «2» в цветовой схеме — это в значительной степени выстрел в темноте, поскольку есть нет никакой гарантии, что «красный» действительно будет красным. Solarized — ужасный пример, когда цвет, традиционно называемый «ярко-зеленым», на самом деле темно-серый.

Большинство «современных» эмуляторов терминала позволяют вам определить эти 16 цветов с помощью графического интерфейса, но другие более «старые» эмуляторы, такие как xterm или rxvt, используют ~/.Xresources. Этот файл полностью игнорируется iTerm, поэтому не стоит тратить на него время.

Можно изменить палитру xterm, но мало кто знает об этом, что делает эту практику очень необычно.

So…

  • эмуляторы терминала не используют rgb.txt,
  • цвета 0-15 настраиваются пользователем,
  • цвета 16-255 ограничены таблицей цветов в первой ссылке,
  • цвета 16-255 можно менять, но редко,
  • iTerm не использует .Xresources.
person romainl    schedule 05.01.2015
comment
На самом деле значения цвета различаются между эмуляторами терминала (см. часто задаваемые вопросы по xterm invisible-island. net/xterm/xterm.faq.html#dont_like_blue) - person Thomas Dickey; 02.04.2015
comment
Действительно, цвета по умолчанию можно изменить. За свой короткий опыт я видел больше (тонких) вариаций от одной rgb.txt к другой, чем от одной палитры 16-255 к другой. - person romainl; 02.04.2015
comment
Некоторые из цветов xterm по умолчанию используют RGB, некоторые используют именованные цвета - обычно 0-15, которые настраиваются пользователем. rxvt и другие простые приложения X11 имеют такой же комментарий. Приложения на основе Gtk, скорее всего, не используют rgb.txt. Любой из цветов xterm может быть изменен во время выполнения - некоторые более чем одним способом. - person Thomas Dickey; 03.04.2015
comment
Ага, бардак именно потому, что я рекомендую сдержаться. - person romainl; 03.04.2015
comment
Вкусы у людей разные (я ограничиваю свои рекомендации случаями, когда техники работают или нет). Кстати, страница colorcoke, на которую вы ссылаетесь, кажется неточной в отношении urxvt (некоторое время она могла изменять 256-цветную палитру). - person Thomas Dickey; 03.04.2015
comment
Неработающая ссылка — отражена по адресу upload.wikimedia.org/wikipedia/commons/1. /15/ - person John P; 16.03.2017
comment
Насколько я знаю, xterm — единственный терминал, для которого вы можете переопределить палитру, отправив ей управляющие последовательности. - person Johan Boulé; 20.04.2019
comment
Связанные символы ошибочны (df должно быть d7, и могут быть другие ошибки). См. исходный код по адресу invisible-island.net/xterm/#download, файл 256colres.pl, который содержит формулу последовательности значений цвета, используемых в xterm для каждого из компонентов R/G/B: (0=00, 95=5f, 135=87, 175=af, 215=d7, 255=ff). - person Felix Rabe; 01.05.2019
comment
Хороший (и, надеюсь, правильный) список см. также на github.com/jonasjacek/colors. - person Felix Rabe; 01.05.2019
comment
... плюс gist.github.com/MicahElliott/719710#gistcomment-1442838 за несколько строк кода для (на основе xterm) преобразования rgb. (Внимание: терминал macOS, по крайней мере, кажется, использует очень разные цвета даже для своих 216 значений RGB!) - person Felix Rabe; 01.05.2019
comment
@FelixRabe, ни одно приложение Terminal.app не использует точно такую ​​же палитру xterm. - person romainl; 13.05.2019
comment
@romainl Кажется, не в моей системе. Мало того, что они выглядели странно, я сделал скриншоты и проверил их рядом с вкладкой Firefox, содержащей палитру xterm. Они разные. - person Felix Rabe; 19.05.2019
comment
@FelixRabe, убедитесь, что ваш дисплей и пипетка используют один и тот же базовый профиль (например, Generic RGB). Когда все настроено на Generic RGB, я получаю одни и те же измерения везде: Terminal.app, MacVim.app и SVG в Firefox. Различные приложения могут использовать внутренний профиль и, таким образом, по-разному взаимодействовать с любым другим профилем, который в настоящее время используется в другом месте, и эти взаимодействия только усугубляются при использовании снимков экрана, которые поставляются с их собственными профилями и так далее. Это необходимо учитывать при обсуждении цветов на компьютерных дисплеях. - person romainl; 21.05.2019