Коды escape ANSI
Код escape ANSI — это короткая последовательность символов, которую программа выводит, чтобы сказать терминалу сделать что-то другое, чем просто показать эти символы — покрасить следующие слова в красный, переместить курсор на две строки вверх, очистить экран. Терминал поглощает последовательность и исполняет её, поэтому лог с этими кодами выглядит как шум при открытии в редакторе.
Каждый код ниже начинается с символа escape и, за одним исключением, открывающей скобкой. Столбец параметров показывает часть между скобкой и конечной буквой, то есть то, что вы собираете в коде; первый столбец показывает всю последовательность так, как вы бы её написали в shell.
Поддержка варьируется между терминалами, и эта страница указывает это там, где это важно. Восемь основных цветов и полужирный работают везде; мигание, двойное подчеркивание и true color не работают.
Строение последовательности
6Каждый код на этой странице имеет одинаковую структуру: символ escape, открывающая скобка, параметры и одна буква, которая говорит, что с ними делать.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e | 0x1B | Символ escape, который начинает каждую последовательностьПишется \e в shell, \033 в C, \x1b в большинстве языков и \u001b в JSON и Java. |
| \e[ | CSI | Control Sequence Introducer — открывает параметризованную команду |
| \e[<n>m | m | Select Graphic Rendition: все цвета и стили заканчиваются на m |
| \e[1;4;31m | 1;4;31 | Несколько параметров сразу, разделённых точками с запятойПолужирный, подчеркнутый и красный в одной последовательности — короче, чем три отдельные, и одинаковый эффект. |
| \e[0m | 0 | Сбрасывает все атрибуты к умолчанию терминалаВыведите это в конце цветного вывода. Программа, завершающаяся без него, оставляет пользователю цветное приглашение. |
| \e]8;;URL\e\\text\e]8;;\e\\ | OSC 8 | Кликабельная гиперссылка в терминалах, которые её поддерживаютЭто последовательность OSC, а не CSI, и заканчивается ESC \ вместо буквы. |
Атрибуты текста
14Поддержка неровная ниже первых пяти. Мигание почти везде игнорируется, и некоторые терминалы отображают тусклое и курсив одинаково.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e[1m | 1 | Полужирный или яркий |
| \e[2m | 2 | Тусклый |
| \e[3m | 3 | Курсив |
| \e[4m | 4 | Подчеркнутый |
| \e[5m | 5 | МиганиеОбычно игнорируется; современные терминалы отображают его как обычный текст. |
| \e[7m | 7 | Инверсия: меняет местами передний и задний план |
| \e[8m | 8 | Скрытый: текст есть, но не отображается |
| \e[9m | 9 | Зачёркнутый |
| \e[21m | 21 | Двойное подчеркиваниеНекоторые терминалы читают 21 как "отключить полужирный". |
| \e[22m | 22 | Нормальная интенсивность: отменяет полужирный и тусклый |
| \e[23m | 23 | Отменяет курсив |
| \e[24m | 24 | Отменяет подчеркивание |
| \e[27m | 27 | Отменяет инверсию |
| \e[29m | 29 | Отменяет зачёркивание |
Цвет текста
17Восемь стандартных цветов и их яркие аналоги. То, что видит читатель, зависит от темы его терминала — «красный» это позиция в палитре, не шестнадцатеричное значение.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e[30m | 30 | Чёрный текст |
| \e[31m | 31 | Красный текст |
| \e[32m | 32 | Зелёный текст |
| \e[33m | 33 | Жёлтый текст |
| \e[34m | 34 | Синий текст |
| \e[35m | 35 | Пурпурный текст |
| \e[36m | 36 | Голубой текст |
| \e[37m | 37 | Белый текст |
| \e[39m | 39 | Вернуться к цвету текста по умолчанию |
| \e[90m | 90 | Яркий чёрный текст |
| \e[91m | 91 | Яркий красный текст |
| \e[92m | 92 | Яркий зелёный текст |
| \e[93m | 93 | Яркий жёлтый текст |
| \e[94m | 94 | Яркий синий текст |
| \e[95m | 95 | Яркий пурпурный текст |
| \e[96m | 96 | Яркий голубой текст |
| \e[97m | 97 | Яркий белый текст |
Цвет фона
17Та же палитра, сдвинутая на десять. Код фона устанавливает ячейку позади текста и остаётся в действии, пока не будет отменён.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e[40m | 40 | Чёрный фон |
| \e[41m | 41 | Красный фон |
| \e[42m | 42 | Зелёный фон |
| \e[43m | 43 | Жёлтый фон |
| \e[44m | 44 | Синий фон |
| \e[45m | 45 | Пурпурный фон |
| \e[46m | 46 | Голубой фон |
| \e[47m | 47 | Белый фон |
| \e[49m | 49 | Вернуться к фону по умолчанию |
| \e[100m | 100 | Яркий чёрный фон |
| \e[101m | 101 | Яркий красный фон |
| \e[102m | 102 | Яркий зелёный фон |
| \e[103m | 103 | Яркий жёлтый фон |
| \e[104m | 104 | Яркий синий фон |
| \e[105m | 105 | Яркий пурпурный фон |
| \e[106m | 106 | Яркий голубой фон |
| \e[107m | 107 | Яркий белый фон |
256 цветов и true color
4Два расширения одного механизма SGR. Оба широко, но не повсеместно поддерживаются; терминал, который их не понимает, обычно игнорирует последовательность.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e[38;5;<n>m | 38;5;n | Текст цветом палитры n, 0–2550–15 это шестнадцать выше, 16–231 куб цветов 6×6×6, 232–255 шкала серого. |
| \e[48;5;<n>m | 48;5;n | Фон цветом палитры n, 0–255 |
| \e[38;2;<r>;<g>;<b>m | 38;2;r;g;b | Текст точным 24-битным цветом |
| \e[48;2;<r>;<g>;<b>m | 48;2;r;g;b | Фон точным 24-битным цветом |
Движение курсора
11Движения не прокручивают и не переносят: курсор уже вверху экрана игнорирует запрос подняться.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e[<n>A | A | Вверх на n строк |
| \e[<n>B | B | Вниз на n строк |
| \e[<n>C | C | Вправо на n столбцов |
| \e[<n>D | D | Влево на n столбцов |
| \e[<n>E | E | Вниз на n строк, в начало строки |
| \e[<n>F | F | Вверх на n строк, в начало строки |
| \e[<n>G | G | В столбец n текущей строки |
| \e[<row>;<col>H | H | На абсолютную строку и столбец, считая с 1 |
| \e[s | s | Запомнить позицию курсора |
| \e[u | u | Вернуться к запомненной позиции |
| \e[6n | 6n | Спросить терминал, где находится курсорТерминал отвечает на стандартный ввод как \e[<строка>;<столбец>R — единственная последовательность здесь, которая даёт ответ. |
Стирание
7Стирание пишет пробелы текущим цветом фона; курсор не движется.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e[0J | 0J | Стереть от курсора до конца экрана |
| \e[1J | 1J | Стереть от начала экрана до курсора |
| \e[2J | 2J | Стереть весь экранКурсор остаётся там, где он был — поэтому обычно комбинируется с \e[H. |
| \e[3J | 3J | Стереть также буфер прокрутки |
| \e[0K | 0K | Стереть от курсора до конца строки |
| \e[1K | 1K | Стереть от начала строки до курсора |
| \e[2K | 2K | Стереть всю строку\r\e[2K обычный способ перерисовать строку прогресса на месте. |
Режимы терминала
8Частные режимы, отмеченные вопросительным знаком. Они меняют поведение терминала, а не внешний вид одного куска текста, и каждый надо отключить перед выходом из программы.
| Последовательность | Параметр | Эффект |
|---|---|---|
| \e[?25l | ?25l | Скрыть курсор |
| \e[?25h | ?25h | Показать курсор |
| \e[?1049h | ?1049h | Переключиться на альтернативный экранТо, что использует полноэкранная программа, чтобы история shell под ней сохранилась. |
| \e[?1049l | ?1049l | Переключиться обратно на основной экран |
| \e[?7h | ?7h | Переносить длинные строки на правом краю |
| \e[?7l | ?7l | Позволить длинным строкам выходить за правый край |
| \e[?2004h | ?2004h | Включить bracketed pasteВставленный текст приходит обёрнутый в \e[200~ и \e[201~, так что shell может различить ввод с клавиатуры и вставку. |
| \e[?2004l | ?2004l | Отключить bracketed paste |