<Предыдущая | Содержание: | Следующая>
Добавление цвета
Большинство программ-эмуляторов терминала реагируют на определенные непечатаемые последовательности символов для управления такими вещами, как атрибуты символов (например, цвет, полужирный текст и ужасно мигающий текст) и положение курсора. Мы немного рассмотрим положение курсора, но сначала посмотрим на цвет.
Терминальная путаница
В древние времена, когда терминалы подключались к удаленным компьютерам, существовало множество конкурирующих марок терминалов, и все они работали по-разному. У них были разные клавиатуры, и все они по-разному интерпретировали управляющую информацию. Unix и Unix-подобные системы имеют две довольно сложные подсистемы для работы с бабелем терминального управления (называемой TERMCAP и TERMINFO). Если вы заглянете в самые глубокие уголки настроек эмулятора терминала, вы можете найти настройку типа эмуляции терминала.
Стремясь заставить терминалы говорить на каком-то общем языке, Американский национальный институт стандартов (ANSI) разработал стандартный набор последовательностей символов для управления видеотерминалами. Старые пользователи DOS будут помнить AN-SI.SYS файл, который использовался для интерпретации этих кодов.
Цвет символа контролируется отправкой эмулятору терминала Escape-код ANSI встроены в поток отображаемых символов. Управляющий код не «распечатывается» на дисплее, а интерпретируется терминалом как инструкция. Как мы видели в таблице выше, \[ и \] последовательности используются для инкапсуляции непечатаемых символов. Код перехода ANSI начинается с восьмеричного числа 033 (код, сгенерированный клавишей перехода), за которым следует необязательный символьный атрибут, за которым следует инструкция. Например, код для установки обычного цвета текста (атрибут = 0), черный текст:
\ 033 [0; 30 м
Вот таблица доступных цветов текста. Обратите внимание, что цвета разделены на две группы, различающиеся применением атрибута жирного шрифта (1), который создает видимость «светлых» цветов:
Таблица 13-2: escape-последовательности, используемые для установки цвета текста
Последовательность | Цвет текста | Последовательность | Цвет текста |
\ 033 [0; 30 м | Черный | \ 033 [1; 30 м | Темно-серый |
\ 033 [0; 31 м | Red | \ 033 [1; 31 м | Светло-красный |
\ 033 [0; 32 м | Зелёная | \ 033 [1; 32 м | Светло-зеленый |
\ 033 [0; 33 м | Brown | \ 033 [1; 33 м | Жёлтые |
\ 033 [0; 34 м | Blue | \ 033 [1; 34 м | Светло-синий |
\ 033 [0; 35 м | Purple | \ 033 [1; 35 м | Светло-фиолетовый |
Добавление цвета
\ 033 [0; 36 м | Голубой | \ 033 [1; 36 м | Светло-голубой |
\ 033 [0; 37 м | Светло-серый | \ 033 [1; 37 м | Белый |
Попробуем сделать красную подсказку. Мы вставим escape-код в начало:
$ PS1 = "\ [\ 033 [0; 31 м \] <\ u @ \ h \ W> \ $"
$
$ PS1 = "\ [\ 033 [0; 31 м \] <\ u @ \ h \ W> \ $"
$
Это работает, но обратите внимание, что весь текст, который мы вводим после приглашения, также красный. Чтобы исправить это, мы добавим еще один escape-код в конец приглашения, который сообщает эмулятору терминала вернуться к предыдущему цвету:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
Так-то лучше!
Также можно установить цвет фона текста, используя коды, перечисленные ниже. Цвет фона не поддерживает полужирный шрифт.
Таблица 13-3: Последовательности выхода, используемые для установки цвета фона
Последовательность | Цвет фона | Последовательность | Цвет фона |
\ 033 [0; 40 м | Черный | \ 033 [0; 44 м | Blue |
\ 033 [0; 41 м | Red | \ 033 [0; 45 м | Purple |
\ 033 [0; 42 м | Зелёная | \ 033 [0; 46 м | Голубой |
\ 033 [0; 43 м | Brown | \ 033 [0; 47 м | Светло-серый |
Мы можем создать приглашение с красным фоном, применив простое изменение к первому escape-коду:
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~> $
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~> $
Попробуйте цветовые коды и посмотрите, что вы можете создать!
Примечание. Помимо атрибутов обычного (0) и жирного (1) символа, тексту также могут быть присвоены атрибуты подчеркивания (4), мигания (5) и инверсии (7). Однако в интересах хорошего вкуса многие эмуляторы терминала отказываются учитывать атрибут мигания.