Перейти до вмісту

ANSI коди виходу

ANSI код виходу — це коротка послідовність символів, яку програма виводить, щоб розповісти терміналу робити щось інше, ніж показувати ці символи — зробити наступні слова червоними, перемістити курсор на два рядки вгору, очистити екран. Термінал поглинає послідовність і виконує дію, тому файл логу, повний таких кодів, виглядає як шум під час відкриття в редакторі.

Кожен код нижче починається з байта виходу та, з однією винятком, відкриваючої дужки. Стовпець параметрів дає частину між дужкою та кінцевою літерою, що є частиною, яку ви складаєте в коді; перший стовпець показує всю послідовність так, як ви написали б її в shell.

Підтримка різниться залежно від терміналу, і ця сторінка говорить про це, де це має значення. Вісім базових кольорів та жирне письмо працюють скрізь; миготіння, подвійне підкреслення та true color — ні.

Анатомія послідовності

6

Кожен код на цій сторінці має одну форму: байт виходу, відкриваюча дужка, деякі параметри та одна літера, яка говорить, що з ними робити.

ПослідовністьПараметрЕфект
\e0x1BБайт виходу, який починає кожну послідовністьЗаписується як \e в shell, \033 у C, \x1b у більшості мов та \u001b у JSON та Java.
\e[CSIControl Sequence Introducer — відкриває параметризовану команду
\e[<n>mmSelect Graphic Rendition: все про кольори та стиль закінчується буквою m
\e[1;4;31m1;4;31Кілька параметрів одночасно, розділених крапками з комоюЖирне, підкреслене та червоне в одній послідовності — коротше ніж три окремі та з однаковим результатом.
\e[0m0Скидає всі атрибути до стандартного терміналуВидайте це в кінці кольорового виходу. Програма, яка завершується без нього, залишає користувачу кольоровий запит.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Клікабельний гіперпосилання в терміналах, які його підтримуютьЦе OSC послідовність, а не CSI послідовність, і завершується ESC \ замість буквою.

Атрибути тексту

14

Підтримка нерівномірна крім першої п'ятірки. Миготіння ігнорується майже скрізь, і кілька терміналів виділяють тьмяне та курсив однаково.

ПослідовністьПараметрЕфект
\e[1m1Жирне або яскраве
\e[2m2Тьмяне
\e[3m3Курсив
\e[4m4Підкреслене
\e[5m5МиготінняШироко ігнорується; більшість сучасних терміналів виділяє його як звичайний текст.
\e[7m7Інверсія: міняє передній та задній план
\e[8m8Прихований: текст існує, але не малюється
\e[9m9Перекреслено
\e[21m21Подвійне підкресленняДеякі термінали читають 21 як «вимкнути жирне».
\e[22m22Нормальна інтенсивність: скасовує жирне та тьмяне
\e[23m23Скасовує курсив
\e[24m24Скасовує підкреслення
\e[27m27Скасовує інверсію
\e[29m29Скасовує перекреслення

Колір тексту

17

Вісім стандартних кольорів та їх яскраві аналоги. Те, що читач насправді бачить, — це інтерпретація теми його терміналу — «червоне» — це слот у палітрі, не значення hex.

ПослідовністьПараметрЕфект
\e[30m30Чорний текст
\e[31m31Червоний текст
\e[32m32Зелений текст
\e[33m33Жовтий текст
\e[34m34Синій текст
\e[35m35Пурпуровий текст
\e[36m36Голубий текст
\e[37m37Білий текст
\e[39m39Повернення до стандартного кольору тексту
\e[90m90Яскравий чорний текст
\e[91m91Яскрава червона текст
\e[92m92Яскрава зелена текст
\e[93m93Яскрава жовта текст
\e[94m94Яскрава синя текст
\e[95m95Яскрава пурпурова текст
\e[96m96Яскрава голуба текст
\e[97m97Яскрава біла текст

Колір фону

17

Та ж палітра, зміщена на десять. Код фону встановлює клітинку за текстом і залишається в силі, поки його не скинути.

ПослідовністьПараметрЕфект
\e[40m40Чорний фон
\e[41m41Червоний фон
\e[42m42Зелений фон
\e[43m43Жовтий фон
\e[44m44Синій фон
\e[45m45Пурпуровий фон
\e[46m46Голубий фон
\e[47m47Білий фон
\e[49m49Повернення до стандартного фону
\e[100m100Яскравий чорний фон
\e[101m101Яскрава червона фон
\e[102m102Яскрава зелена фон
\e[103m103Яскрава жовта фон
\e[104m104Яскрава синя фон
\e[105m105Яскрава пурпурова фон
\e[106m106Яскрава голуба фон
\e[107m107Яскрава біла фон

256 кольорів та true color

4

Два розширення того ж механізму SGR. Обидва широко, але не універсально підтримуються; термінал, який їх не розуміє, зазвичай ігнорує послідовність замість того, щоб її виводити.

ПослідовністьПараметрЕфект
\e[38;5;<n>m38;5;nТекст у кольорі палітри n, 0–2550–15 — це шістнадцять вище, 16–231 — куб кольорів 6×6×6, 232–255 — шкала сірого.
\e[48;5;<n>m48;5;nФон у кольорі палітри n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bТекст у точному 24-бітному кольорі
\e[48;2;<r>;<g>;<b>m48;2;r;g;bФон у точному 24-бітному кольорі

Рух курсора

11

Рухи не прокручуються та не обертаються: курсор, який вже знаходиться в верхній частині екрану, ігнорує запит на рух вгору.

ПослідовністьПараметрЕфект
\e[<n>AAНа n рядків вгору
\e[<n>BBНа n рядків вниз
\e[<n>CCНа n стовпців праворуч
\e[<n>DDНа n стовпців ліворуч
\e[<n>EEНа n рядків вниз, до початку рядка
\e[<n>FFНа n рядків вгору, до початку рядка
\e[<n>GGДо стовпця n поточного рядка
\e[<row>;<col>HHДо абсолютного рядка та стовпця, рахуючи з 1
\e[ssЗапам'ятовує позицію курсора
\e[uuПовертається до запам'ятованої позиції
\e[6n6nЗапитує термінал, де знаходиться курсорТермінал відповідає на стандартний вхід як \e[<рядок>;<стовпець>R — єдина послідовність тут, яка дає відповідь.

Стирання

7

Стирання записує пробіли з поточним кольором фону; не рухає курсор.

ПослідовністьПараметрЕфект
\e[0J0JОчищає від курсора до кінця екрану
\e[1J1JОчищає від початку екрану до курсора
\e[2J2JОчищає весь екранКурсор залишається там, де був — тому він зазвичай поєднується з \e[H.
\e[3J3JТакож очищує буфер прокручування
\e[0K0KОчищає від курсора до кінця рядка
\e[1K1KОчищає від початку рядка до курсора
\e[2K2KОчищає весь рядок\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

FAQ

Чому мій вихід залишається кольоровим після завершення програми?
Тому що нічого його не скидало. Код кольору залишається в силі, поки його не замінить інший, тому програма, яка завершується посередині кольору, залишає користувачу кольоровий запит. Виведіть \e[0m перед виходом — включно на шляху помилок, який люди найчастіше забувають.
Яка різниця між \e, \033 та \x1b?
Немає. Усі три — це один байт 0x1B, записаний так, як його записує конкретна мова: \e в bash та zsh, \033 в C та в echo -e, \x1b у Python, Go, Rust та JavaScript, \u001b там, де допускаються тільки Unicode коди виходу, наприклад JSON та Java.
Як я видаляю їх з файлу логу?
Вставте його в засіб видалення ANSI кодів на цьому сайті. Він видаляє послідовності кольорів, курсора та режиму та може також перетворити кольори на HTML або Markdown замість їх видалення, що вам потрібно, якщо сенс логу був у виділенні.
Чи повинен я жорстко кодувати кольори або використовувати бібліотеку?
Для чого-небудь більшого, ніж кілька рядків, використовуйте бібліотеку — вона перевіряє, чи є вихід взагалі терміналом. Коди кольорів, написані до трубопровода або файлу, потраплять у файл, і саме так будуються логи збірки.
Чи жирне те саме, що й яскраве?
Історично так, і на деяких терміналах досі. Код 1 був визначений як жирний, але багато терміналів реалізували його перемиканням на яскраву половину палітри, тому жирна червона та яскрава червона можуть виглядати однаково. Діапазон 90–97 існує, щоб ви могли просити яскравого без запиту жирного.