ANSI коди виходу
ANSI код виходу — це коротка послідовність символів, яку програма виводить, щоб розповісти терміналу робити щось інше, ніж показувати ці символи — зробити наступні слова червоними, перемістити курсор на два рядки вгору, очистити екран. Термінал поглинає послідовність і виконує дію, тому файл логу, повний таких кодів, виглядає як шум під час відкриття в редакторі.
Кожен код нижче починається з байта виходу та, з однією винятком, відкриваючої дужки. Стовпець параметрів дає частину між дужкою та кінцевою літерою, що є частиною, яку ви складаєте в коді; перший стовпець показує всю послідовність так, як ви написали б її в shell.
Підтримка різниться залежно від терміналу, і ця сторінка говорить про це, де це має значення. Вісім базових кольорів та жирне письмо працюють скрізь; миготіння, подвійне підкреслення та true color — ні.
Анатомія послідовності
6Кожен код на цій сторінці має одну форму: байт виходу, відкриваюча дужка, деякі параметри та одна літера, яка говорить, що з ними робити.
| Послідовність | Параметр | Ефект |
|---|---|---|
| \e | 0x1B | Байт виходу, який починає кожну послідовністьЗаписується як \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Вісім стандартних кольорів та їх яскраві аналоги. Те, що читач насправді бачить, — це інтерпретація теми його терміналу — «червоне» — це слот у палітрі, не значення hex.
| Послідовність | Параметр | Ефект |
|---|---|---|
| \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 |