В предыдущей статье `echo` для чайников я затронул тему управляющих последовательностей, которые позволяют задавать цвет текста или фона, положение курсора и некоторые другие вещи.
Управляющая последовательность (она же экранированная последовательность или Escape последовательность) представляет собой набор символов, которые будут обрабатываться терминалом иначе чем обычные символы. Например, если мы выполним команду `echo -e '\e[1;33mHi!'`, то вывод команды будет иметь жёлтый цвет:
То есть последовательность символов \e[1;33m указывает эмулятору терминала сменить цвет выводимых символов на жёлтый.
Управление курсором
Переместить в начало экрана (1;1):
echo -en '\e[H'
Переместить курсор на n-ю строку в m-ю позицию:
echo -e '\e[n;mH'
Подняться и опуститься на заданное количество строк:
echo -e '\e[5A' #go_up
echo -e '\e[3B' #go_down
Перемещение влево и вправо на n позиций:
echo -e '\e[nC' #right
echo -e '\e[nD' #left
Перемещение курсора в начало строки, которая выше/ниже текущей на n строк:
echo -e '\e[nF'
echo -e '\e[nE'
Перемещение курсора к предыдущей/следующей строке:
echo -e '\eM'
echo -e '\eN'
Перемещение курсора к n-му символу в строке
echo -e '\e[nG'
Получить позицию курсора:
echo -e '\e[6n'
Сохранить и восстановить позицию курсора:
echo -e '\e[s'
echo -e '\e[u'
*вместо \e[s и \e[u можно использовать \e7 и \e8 соответственно
Удаление
Очистить экран от текущего положения курсора и до начала, конца или полностью:
echo -en '\e[1J'
echo -en '\e[0J'
echo -en '\e[2J'
echo -en '\ec'
Очистить строки, которые выше первой видимой строки:
echo -en '\e[3J'
Стереть строку от начала до курсора, от курсора до конца или стереть строку полностью:
echo -en '\e[1K'
echo -en '\e[0K'
echo -en '\e[2K'
Стиль шрифта
Чтобы задать стиль используйте команду:
echo -e '\e[xm'
*вместо x подставьте цифру, соответствующую одному из режимов ниже:
- 1 - жирный, 22 - сброс;
- 2 - тусклый (полупрозрачный), 22 - сброс;
- 3 - курсив, 23 - сброс;
- 4 - подчёркнутый, 24 - сброс;
- 5 - мигающий, 25 - сброс;
- 7 - инверсивный (цвета шрифта и фона меняются местами), 27 - сброс;
- 8 - скрытый, 28 - сброс;
- 9 - зачёркнутый, 29 - сброс;
- 21 - двойное подчёркивание, 24 - сброс.
Стили выше можно комбинировать через точку с запятой, например:
echo -e '\e[21;6;9m'
Сбросить настройки стиля и цвета:
echo -e '\e[0m'
Управление цветом
Эмуляторы терминала, поддерживают цветной вывод и могут работать с разным количество цветов. В одних можно использовать только 8 цветов, в других - 16, в третьих - 256, а современные поддерживают Truecolor (24-bit RGB).
Для 8 и 16 цветовых решений последовательность будет выглядеть следующим образом:
echo -e '\e[xm'
*вместо x подставьте одно из чисел, соответствующих цвету текста или фона:
8 цветов (3-bit)
- Чёрный: 30 (текст), 40 (фон).
- Красный: 31 (текст), 41 (фон).
- Зелёный: 32 (текст), 42 (фон).
- Жёлтый: 33 (текст), 43 (фон).
- Синий: 34 (текст), 44 (фон).
- Пурпурный: 35 (текст), 45 (фон).
- Голубой: 36 (текст), 46 (фон).
- Белый: 37 (текст), 47 (фон).
- Дефолтный: 39 (текст), 49 (фон).
16 цветов (4-bit)
Первые 8 цветов имеют те же коды, что перечислены выше, плюс:
- Светло-чёрный: 90 (текст), 100 (фон).
- Светло-красный: 91 (текст), 101 (фон).
- Светло-зелёный: 92 (текст), 102 (фон).
- Светло-жёлтый: 93 (текст), 103 (фон).
- Светло-синий: 94 (текст), 104 (фон).
- Светло-пурпурный: 95 (текст), 105 (фон).
- Светло-голубой: 96 (текст), 106 (фон).
- Ярко-белый: 97 (текст), 107 (фон).
256 цветов (8-bit)
Для 256 цветов последовательность будет иная:
echo -e '\e[38;5;xm' #текст
echo -e '\e[48;5;xm' #фон
*вместо x подставьте код от 0 до 255 подходящего цвета:
for i in {0..255}; do
echo -en "\e[38;5;${i}m$i\t";
if [[ $((($i+1)%16)) == 0 ]]; then echo; fi;
done; echo -e '\e[0m'
Truecolor (24-bit)
Для truecolor используем последовательность ниже, указав вместо r, g, b числа:
echo -e '\e[38;2;{r};{g};{b}m' #текст
echo -e '\e[48;2;{r};{g};{b}m' #фон
Пример использования hex:
color=76ff7a
echo -en "\e[38;2;$((0x${color:0:2}));$((0x${color:2:2}));$((0x${color:4:2}))mtest\t"
Управление отображением
Несколько последовательностей, которые также могут быть полезны:
echo -e '\e[?25l' #скрыть курсор
echo -e '\e[?25h' #показать курсор
echo -e '\e[?47h' #сохранить экран
echo -e '\e[?47l' #восстановить сохранённый экран
echo -e '\e[?1049h' #использовать альтернативный буфер экрана
echo -e '\e[?1049l' #отключить альтернативный буфер экрана
Заключение
В заключение добавлю, что вы можете использовать приведённые выше последовательности и в других командах, например, printf.
Тем, кто желает глубоко и надолго погрузиться в тему управляющих последовательностей, могу порекомендовать следующие ресурсы:
Если статья была полезна, поставьте лайк или подпишитесь на канал, чтобы чаще видеть в ленте подобный контент. Всем добра!)