воскресенье, 18 июля 2010 г.

Удобные цвета в консоли linux

Что меня раздражает в linux консоли, так это дикий подбор цветов по умолчанию. Понятно, что восемь цветов доступные в терминале, сложились исторически и из соображений совместимости их никто не меняет. Однако, осознание этого факта нисколько не помогает мне разглядеть темно-синий текст на черном фоне. И то, что эта комбинация цветов активно используется (ls, vim, emacs) для отображения важной информации, совершенно не способствует улучшению душевного спокойствия.

Долгое время я боролся с симптомами. Старательно исправлял LS_COLORS, настройки световых схем в редакторах и т.п. И вот, наконец, до меня дошло, что я маюсь дурью. Дело в кривой палитре терминала и именно палитру надо менять, а не настройки отдельных программ. Ура! Кажется, я вижу свет в конце тонеля, осталось реализовать.

Первое, что для этого понадобится — способ отобразить доступные цвета. Чем проще будет способ, тем лучше, а что может быть проще команды echo в сочетании со стандартными escape-последовательностями console_codes (4)?

echo -e "
\033[031m;A line of text in red     (color 1, default #aa0000)
\033[032m;A line of text in green   (color 2, default #00aa00)
\033[033m;A line of text in brown   (color 3, default #aa5500)
\033[034m;A line of text in blue    (color 4, default #0000aa)
\033[035m;A line of text in magenta (color 5, default #aa00aa)
\033[036m;A line of text in cyan    (color 6, default #00aaaa)
\033[037m;A line of text in white   (color 7, default #aaaaaa)
\033[0m"

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

Собственно, меня раздражает, только синий цвет, и если посмотреть на график чувствительности человеческого глаза в зависимости от длинны волны, становится понятно почему. Чувствительность глаза к свету с длинной волны около 400нм, магко говоря, так себе. Что делать? Добавить зеленую компоненту, чувствительность к которой максимальна. Например, если заменить синий цвет #0000aa на #0077aa, он начинает восприниматься гораздо лучше, но все еще остается вполне узнаваемым.

Что делать с цветом разобрались. Осталось выяснить, как изменения реализовать. В графических терминалах изменить цвет не проблема, так что останавливаться на этом не буду, но что делать с консолью? Оказалось, здесь помогут все те же escape-последовательности console_codes (4). С помощью ESC ] P nrrggbb можно изменить цвета в VGA и frame buffer консоли. Например, чтобы заменить стандартный синий цвет на #0077aa, надо выполнить команду (можно добавить в ~/.profile):

echo -e "\033]P40077aa"

Вот собственно и все. Надеюсь, что больше к проблеме настройки цветов, возвращаться мне не придется.

3 комментария:

  1. А при просмотре фоток через консоль тогда чёго будет?
    Чехарда? Это же не наш метод!

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Спасибо тебе огромнейшее за пост. Раньше я точно так же менял для каждой программы цвет текста, а теперь это удобно можно сделать в одной команде. Респект за статью и спасибо огромное!

    ОтветитьУдалить