<Попередній | зміст | Наступна>
Додавання кольору
Більшість програм емулятора терміналу реагують на певні недруковані послідовності символів, щоб керувати такими речами, як атрибути символів (наприклад, колір, напівжирний текст і страшний блимаючий текст) і положення курсору. Ми трохи розглянемо положення курсору, але спочатку подивимося на колір.
Термінальна плутанина
Ще в стародавні часи, коли термінали були підключені до віддалених комп’ютерів, існувало багато конкуруючих марок терміналів, і всі вони працювали по-різному. У них були різні клавіатури, і всі вони мали різні способи інтерпретації контрольної інформації. Unix і Unix-подібні системи мають дві досить складні підсистеми для вирішення проблеми термінального контролю (наз termcap та terminfo). Якщо ви заглянете в найглибші заглиблення налаштувань емулятора терміналу, ви можете знайти налаштування для типу емуляції терміналу.
Прагнучи змусити термінали говорити якоюсь спільною мовою, Американський національний інститут стандартів (ANSI) розробив стандартний набір символьних послідовностей для керування відеотерміналами. Старі користувачі DOS запам'ятають AN-SI.SYS файл, який використовувався для інтерпретації цих кодів.
Колір символу керується відправкою емулятора терміналу an ANSI код виходу вбудовується в потік символів, що відображаються. Керуючий код не «виводиться» на дисплей, а інтерпретується терміналом як інструкція. Як ми бачили в таблиці вище, \[ та \] послідовності використовуються для інкапсуляції недрукованих символів. Escape-код ANSI починається з вісімкової цифри 033 (код, створений клавішею escape), за яким слідує необов'язковий символ символу, за яким слідує інструкція. Наприклад, код для встановлення кольору тексту на нормальний (атрибут = 0), чорний текст:
\033[0;30м
Ось таблиця доступних кольорів тексту. Зверніть увагу, що кольори поділяються на дві групи, які відрізняються застосуванням символу жирного шрифту (1), який створює вигляд «світлих» кольорів:
Таблиця 13-2: Escape-послідовності, що використовуються для встановлення кольорів тексту
Послідовність | Колір тексту | Послідовність | Колір тексту |
\033[0;30м | Black | \033[1;30м | Темно-сірий |
\033[0;31м | червоний | \033[1;31м | Світло-червоний |
\033[0;32м | зелений | \033[1;32м | Світло-зелений |
\033[0;33м | коричневий | \033[1;33м | Yellow |
\033[0;34м | синій | \033[1;34м | Блакитний |
\033[0;35м | фіолетовий | \033[1;35м | Світло-пурпуровий |
Додавання кольору
\033[0;36м | Блакитний | \033[1;36м | Світло-блакитний |
\033[0;37м | Світло-сірий | \033[1;37м | білий |
Давайте спробуємо зробити червону підказку. Ми вставимо escape-код на початку:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
Це працює, але зверніть увагу, що весь текст, який ми вводимо після підказки, також червоний. Щоб виправити це, ми додамо інший escape-код в кінець підказки, який повідомляє емулятору терміналу повернутися до попереднього кольору:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
Так краще!
Також можна встановити колір фону тексту за допомогою кодів, наведених нижче. Кольори фону не підтримують жирний атрибут.
Таблиця 13-3: Escape-послідовності, що використовуються для встановлення кольору фону
Послідовність | Колір фону | Послідовність | Колір фону |
\033[0;40м | Black | \033[0;44м | синій |
\033[0;41м | червоний | \033[0;45м | фіолетовий |
\033[0;42м | зелений | \033[0;46м | Блакитний |
\033[0;43м | коричневий | \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). Проте в інтересах гарного смаку багато емулятори терміналів відмовляються виконувати атрибут блимання.