2015-01-05 6 views
2

Я пытаюсь понять, как именно обрабатываются цвета в терминальном эмуляторе (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), но я не уверен насчет пару вещей:

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

Так что в данный момент я считаю, как она работает:

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

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

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

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

ответ

3

The default xterm palette является стандартным и ожидается, что он будет одинаковым во всех реализациях xterm. Это другой из более-менее стандартного файла rgb.txt, который используется только программами GUI.

Первые 16 цветов, 0-15, имеют более или менее стандартные названия, «красный», «темно-зеленый», и т.д., но все остальные могут быть отнесены только к их числу, от 16 до 255 .

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

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

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

Итак ...

  • эмуляторы терминала не используйте rgb.txt,
  • цвета 0-15 конфигурируются пользователем,
  • цвета 16-255 ограничены цветовой шкалой в первом ссылка,
  • цвета 16-255 может быть изменен, но это редко,
  • Iterm не использует .Xresources.
+1

На самом деле, цвет значения не отличаются от эмуляторов терминала (см XTERM FAQ http://invisible-island.net/xterm/xterm.faq.html#dont_like_blue) –

+0

Действительно, цвета по умолчанию могут быть изменены. В моем коротком опыте я видел больше (тонкие) вариации от одного 'rgb.txt' к другому, чем от одной палитры 16-255 к другой. – romainl

+0

Некоторые цвета по умолчанию для xterm используют RGB, некоторые используют именованные цвета - обычно 0-15, которые настраиваются пользователем. «rxvt» и другие приложения plain-X11 имеют одинаковый комментарий. Приложения на основе Gtk, вероятно, не используют 'rgb.txt'. Любой цвет xterm может быть изменен во время выполнения - несколько более чем одним способом. –