Распечатка цветов в терминале xterm

Я установил минимальный Debian, и я пытаюсь все настроить самостоятельно, поэтому я пытаюсь настроить свой терминал Xterm по умолчанию, придав ему несколько цветов, после некоторых исследований я обнаружил, что это можно сделать либо путем редактирования файла.Xresources. поэтому я могу дать первые 16 цветов в коде Hexa (#numbers) или отредактировав файл.bashrc. После того, как некоторые исследования кажутся вторым решением более динамичным, потому что я могу указать цвета файлов по расширениям, проблема в том, что все статьи в сети используют очень странный цветовой код:

.gz  01;31
.bz2 01;31
.deb 07;31
.rpm 01;31
.jar 01;31

Я хочу знать, есть ли способ использовать цвет кода RGB или цвет гекса, чтобы иметь больше гибкости с моими списками каталогов и файлов.

3 ответа

Решение

AFAIK, поддержка RGB отсутствует, эмуляторы терминала ограничены отображением ограниченного набора цветов (палитра с 64 комбинациями переднего и заднего плана, если я не ошибаюсь). Если вас беспокоит простота использования, вы всегда можете объявить несколько переменных для предопределенных цветов, например:

readonly BLACK_FONT_BLACK_BACKGROUND='30;40'     
readonly BLACK_FONT_RED_BACKGROUND='30;41'       
readonly BLACK_FONT_GREEN_BACKGROUND='30;42'     
readonly BLACK_FONT_YELLOW_BACKGROUND='30;43'
...
readonly WHITE_FONT_CYAN_BACKGROUND='37;46'
readonly WHITE_FONT_WHITE_BACKGROUND='37;47'

И использовать их позже, как:

.gz  $BLACK_FONT_YELLOW_BACKGROUND

Ниже приведена таблица с цветовыми кодами для переднего плана и фона:

  Color   Foreground   Background
  -------------------------------
  black       30           40
  red         31           41
  green       32           42
  yellow      33           43
  blue        34           44
  magenta     35           45
  cyan        36           46
  white       37           47
  -------------------------------

Если создание всех переменных имен цветов вручную слишком утомительно, вы можете использовать следующий скрипт на python:

 colors = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white']; 
 index = 0
 for x in ["{0}_FONT_{1}_BACKGROUND='{2};{3}'".format(colors[i].upper(), colors[j].upper(), i + 30, j + 40) for i in xrange(0, 8) for j in xrange(0, 8)]: 
     print x.ljust(38) + "#" + str(index) 
     index += 1

Извините, но вы не можете использовать цветовой код RBG (или HSV, или HCL). Вы можете найти документацию с:

$ man 5 dir_colors

Как отмечает Leonardo Fontenelle, место, где можно начать читать о GNU ls окраска dir_colors страница справочника. Используемые числа, такие как 01;31 являются константами, связанными с тем, что на странице руководства называется "цветовые последовательности ISO 6429 (ANSI)". На самом деле страница справочника немного более неясна, чем должна быть:

  • константы - это параметры, используемые в управляющей последовательности ISO 6429 SGR (установка графического представления). Фактический стандарт очень подробный (см. ECMA-48).
  • 01 является стандартным кодом для жирного шрифта (в руководстве к нему обращаются, используя ориентированные на Linux "яркие цвета *").
  • как отмечает higuaro, коды 30-37 и 40-47 образуют цветовую палитру; все цвета, отображаемые на терминале в любой момент, взяты из текущей палитры.
  • существует несколько способов обновления цветовой палитры, используемой xterm; ни один из них не имеет прямого отношения к ls конфигурации, потому что числа, используемые для ссылки на палитру, сами по себе не содержат информацию о цвете.
  • Вы можете отобразить цвета и видео атрибуты, используя ncurses tput полезность, например, tput setaf 7,
  • некоторые (относительно) недавние ls конфигурации используют дополнительные цветовые коды вне палитры 30-37 / 40-47, например, для aixterm 16-цветная функция или xterm 88 цветов или 256 цветов. dir_colors страница руководства не упоминает об этом.
Другие вопросы по тегам