Рейтинговые книги
Читем онлайн Командная строка Linux - Шоттс Уильям

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 34 35 36 37 38 39 40 41 42 ... 113

Цветом символов можно управлять, посылая эмулятору терминала экранированные последовательности ANSI внутри потока символов, предназначенных для вывода на экран. Экранированные последовательности не «выводятся» на экран; они интерпретируются терминалом как инструкции. Как показано в табл. 13.1, для включения непечатаемых символов используются последовательности [ и ]. Экранированные последовательности ANSI начинаются с восьмеричного кода 033 (код, генерируемый клавишей ESC), за которым следует необязательный атрибут символа и инструкция. Например, вот как выглядит код, определяющий текст как простой (атрибут = 0), черного цвета 33[0;30m.

В табл. 13.2 перечислены поддерживаемые цвета текста. Обратите внимание, что цвета делятся на две группы, отличаясь наличием атрибута жирного текста (1), из-за которого возникает впечатление более «светлых» (light) цветов.

Таблица 13.2. Экранированные последовательности, используемые для определения цвета текста

Последовательность

Цвет

33[0;30m

Черный

33[0;31m

Красный

33[0;32m

Зеленый

33[0;33m

Коричневый

33[0;34m

Синий

33[0;35m

Пурпурный

33[0;36m

Бирюзовый

33[0;37m

Светло-серый

33[1;30m

Темно-серый

33[1;31m

Светло-красный

33[1;32m

Светло-зеленый

33[1;33m

Желтый

33[1;34m

Светло-синий

33[1;35m

Светло-пурпурный

33[1;36m

Светло-бирюзовый

33[1;37m

Белый

Давайте попробуем окрасить строку приглашения в красный цвет (здесь она выглядит как серая). Добавьте в начало экранированную последовательность:

<[email protected] ~>$ PS1="[33[0;31m]<[email protected]h W>$ "

<[email protected] ~>$

Получилось, но обратите внимание, что весь текст, который вводится с клавиатуры вслед за строкой приглашения, также окрашивается в красный цвет. Для устранения этого эффекта добавьте еще одну экранированную последовательность в конец определения приглашения — этим вы сообщите эмулятору терминала, что тот должен восстановить нормальный цвет:

<[email protected] ~>$ PS1="[33[0;31m]<[email protected]h W>$[33[0m] "

<[email protected] ~>$

Так лучше!

Кроме того, существует возможность изменить цвет фона, для чего предназначены экранированные последовательности, перечисленные в табл. 13.3. Цвет фона не поддерживает атрибут жирного текста.

Таблица 13.3. Экранированные последовательности, используемые для определения цвета фона

Последовательность

Цвет

33[0;40m

Черный

33[0;41m

Красный

33[0;42m

Зеленый

33[0;43m

Коричневый

33[0;44m

Синий

33[0;45m

Пурпурный

33[0;46m

Бирюзовый

33[0;47m

Светло-серый

Чтобы вывести приглашение на красном фоне, достаточно изменить первую экранированную последовательность:

<[email protected] ~>$ PS1="[33[0;41m]<[email protected]h W>$[33[0m] "

<[email protected] ~>$

Попробуйте другие цвета и посмотрите, что из этого получится!

ПРИМЕЧАНИЕ

Помимо атрибутов символов нормального (0) и жирного (1) текста, есть также атрибут подчеркивания (4), мигания (5) и инверсии (7). В целях воспитания хорошего вкуса многие эмуляторы терминалов не поддерживают атрибут мигания.

Перемещение курсора

Экранированные последовательности можно использовать для позиционирования курсора. Этот прием часто используется для отображения времени или другой информации в разных местах на экране, например вверху, при каждом выводе приглашения к вводу. В табл. 13.4 перечислены экранированные последовательности, управляющие позицией курсора.

Таблица 13.4. Экранированные последовательности, управляющие позицией курсора

Последовательность

Действие

33[l;cH

Перемещает курсор в строку l и позицию c

33[nA

Перемещает курсор вверх на n строк

33[nB

Перемещает курсор вниз на n строк

33[nC

Перемещает курсор вперед на n символов

33[nD

Перемещает курсор назад на n символов

33[2J

Очищает экран и помещает курсор в левый верхний угол (строка 0, позиция 0)

33[K

Очищает экран от позиции курсора до конца текущей строки

33[s

Сохраняет текущую позицию курсора

33[u

Восстанавливает сохраненную позицию курсора

Используя эти коды, можно сконструировать строку приглашения, рисующую красный прямоугольник с часами в верхней части экрана (время отображается желтым цветом). Код, определяющий строку приглашения, на этот раз выглядит немного устрашающе:

PS1="[33[s33[0;0H33[0;41m33[K33[1;33mt33[0m33[u]<[email protected]h W>$ "

В табл. 13.5 приведены отдельные части этого определения, они помогут понять, как это работает.

Таблица 13.5. Экранированные последовательности, управляющие позицией курсора

Последовательность

Действие

[

Начинает последовательность непечатаемых символов. Истин­ное назначение этой последовательности — позволить bash правильно вычислить длину строки приглашения на экране. Без этого функция редактирования командной строки неправильно позиционировала бы курсор

33[s

Сохраняет позицию курсора. Это необходимо, чтобы вернуться в местоположение строки приглашения после вывода прямо­угольника с часами в верхней части экрана. Будьте внимательны: некоторые эмуляторы терминалов не поддерживают эту последовательность

33[0;0H

Перемещает курсор в левый верхний угол, в строку 0, позицию 0

33[0;41m

Устанавливает красный цвет фона

33[K

Очищает экран от текущей позиции курсора (в левом верхнем углу) до конца строки. Поскольку теперь установлен красный цвет фона, строка окрашивается в красный цвет. Обратите внимание, что последовательность очистки экрана до конца строки не изменяет позицию курсора, который остается в левом верхнем углу

33[1;33m

Устанавливает желтый цвет текста

t

Выводит текущее время. Хотя это «печатаемый» элемент, он находится в непечатаемом блоке строки приглашения, потому что нам не нужно, чтобы командная оболочка bash учитывала размер часов при расчете истинного размера отображаемой строки приглашения

33[0m

Выключает цвет. Сбрасывает настройки цвета для текста и фона

33[u

Восстанавливает позицию курсора, сохраненную ранее

]

Завершает последовательность непечатаемых символов

<[email protected]h W>$

Строка приглашения

Сохранение определения приглашения

Я думаю, что мало у кого возникло желание вводить это монструозное определение каждый раз, поэтому нам нужно где-то сохранить строку приглашения. Сохранить определение можно в файле .bashrc. Для этого добавьте следующие две строки в файл:

PS1="[33[s33[0;0H33[0;41m33[K33[1;33mt33[0m33[u]<[email protected]h W>$ "

export PS1

Заключительное замечание

Хотите — верьте, хотите — нет, но со строкой приглашения можно творить чудеса, задействовав функции и сценарии, которые мы пока не рассматривали. Все, что было описано выше, — хорошее начало. Не все захотят возиться с изменением приглашения к вводу, оформление по умолчанию тоже выглядит неплохо. Но тем из вас, кому нравится копаться в мелочах, командная оболочка предоставляет возможность творчески провести несколько часов.

Часть III. Типичные задачи и основные инструменты

14. Управление пакетами

1 ... 34 35 36 37 38 39 40 41 42 ... 113
На этой странице вы можете бесплатно читать книгу Командная строка Linux - Шоттс Уильям бесплатно.

Оставить комментарий