ANSI X3.64
ANSI X3.64 — это американский национальный стандарт, определяющий набор управляющих последовательностей для терминалов и устройств вывода текстовой информации. Стандарт был разработан в 1970-х годах под названием ANSI X3.64-1977 «Additional Controls for Use with the American National Standard Code for Information Interchange» (дополнительные управляющие символы для использования с американским национальным стандартным кодом для обмена информацией). Впоследствии он был принят как международный стандарт ISO 6429 (позже — ECMA-48). Наибольшую известность стандарт получил благодаря определению так называемых escape-последовательностей ANSI, которые используются для управления цветом, положением курсора и другими атрибутами отображения в текстовых терминалах и эмуляторах терминалов.
История
Предпосылки создания
До появления ANSI X3.64 управление терминалами (например, VT52 от Digital Equipment Corporation) осуществлялось с помощью проприетарных наборов команд. Каждый производитель терминалов использовал собственные управляющие последовательности, что приводило к проблемам совместимости программного обеспечения. Разработка единого стандарта началась в середине 1970-х годов под эгидой Американского национального института стандартов (ANSI).
Разработка и принятие
Первая версия стандарта была опубликована в 1977 году. Она базировалась на более ранних разработках, в частности на спецификациях терминала VT100 компании DEC, который стал де-факто эталоном для реализации управляющих последовательностей. Стандарт ANSI X3.64-1977 определял около 150 управляющих функций, разделённых на категории: перемещение курсора, стирание, режимы отображения, атрибуты символов и другие.
В 1983 году стандарт был пересмотрен (ANSI X3.64-1983), а затем в 1994 году — принят как международный стандарт ISO/IEC 6429:1994. В России действует аналогичный стандарт ГОСТ 27466-87 «Системы обработки информации. Управляющие функции для знаковых устройств отображения», который является аутентичным переводом ISO 6429.
Распространение
В 1980-х годах ANSI X3.64 получил широкое распространение в операционных системах Unix, MS-DOS и других, где использовался в терминальных эмуляторах (xterm, gnome-terminal, Windows Terminal). В среде MS-DOS стандарт поддерживался драйвером ANSI.SYS, который позволял программам выводить цветной текст и управлять курсором. Однако из-за неполной реализации и различий в интерпретации последовательностей разными производителями возникли многочисленные расширения и диалекты (например, расширения от компании IBM для терминалов 3270).
Структура управляющих последовательностей
Формат
Управляющие последовательности ANSI начинаются с escape-символа (ASCII-код 27, обозначается как ESC или \e), за которым следуют один или несколько символов, определяющих команду. Основные форматы:
- CSI (Control Sequence Introducer) — начинается с последовательности
ESC [(два символа: ESC и открывающая квадратная скобка). За CSI следуют параметры (числа, разделённые точкой с запятой) и завершающий символ команды (буква латинского алфавита). Пример:ESC[31m— установить красный цвет текста. - OSC (Operating System Command) — начинается с
ESC ]и используется для взаимодействия с операционной системой (например, установка заголовка окна терминала). - Двухсимвольные последовательности — начинаются с
ESCи одного управляющего символа (например,ESC c— сброс терминала).
Категории функций
Стандарт ISO 6429 (ANSI X3.64) определяет несколько основных категорий управляющих функций:
- Перемещение курсора — команды CUP (Cursor Position,
ESC[<строка>;<столбец>H), CUU (Cursor Up,ESC[<количество>A), CUD (Cursor Down,ESC[<количество>B), CUF (Cursor Forward,ESC[<количество>C), CUB (Cursor Back,ESC[<количество>D), CUP (Cursor Position Absolute). - Стирание — ED (Erase in Display,
ESC[2J— очистить весь экран), EL (Erase in Line,ESC[K— очистить строку от курсора до конца). - Атрибуты символов — SGR (Select Graphic Rendition,
ESC[<код>m). Устанавливает цвет текста, фона, жирность, подчёркивание, мигание и другие эффекты. - Режимы отображения — SM (Set Mode,
ESC[<код>h) и RM (Reset Mode,ESC[<код>l). Включают или отключают такие режимы, как автоперенос строки, отображение курсора, режим вставки. - Управление экраном — команды для работы с альтернативным буфером экрана (например,
ESC[?1049h— включить альтернативный буфер). - Цвета — стандарт определяет 8 основных цветов (чёрный, красный, зелёный, жёлтый, синий, пурпурный, голубой, белый) и их яркие варианты, а также 256-цветную палитру и 24-битный RGB-цвет (true color).
Классификация
По типу последовательности
- C0-управляющие символы — одиночные символы с кодами 0–31 (например,
\n— перевод строки,\r— возврат каретки,\t— табуляция). Входят в стандарт ASCII, но не являются частью escape-последовательностей ANSI. - C1-управляющие символы — символы с кодами 128–159 (например, CSI —
ESC [). В ANSI X3.64 они используются как часть многобайтовых последовательностей. - Escape-последовательности — начинаются с
ESC(код 27) и содержат один или несколько последующих символов.
По функциональному назначению
- Управление курсором — перемещение, сохранение/восстановление позиции.
- Управление отображением — очистка экрана, строк, установка режимов.
- Управление атрибутами — цвет, жирность, подчёркивание, инверсия, мигание.
- Управление буфером — переключение между основным и альтернативным буферами.
- Управление клавиатурой — установка режимов ввода (например, режим замены/вставки).
Применение
Терминалы и эмуляторы
ANSI X3.64 является основой для работы большинства текстовых терминалов и эмуляторов терминалов в Unix-подобных системах, Windows (через консольные приложения) и в веб-среде (например, xterm.js). Программы, работающие в режиме командной строки (bash, vim, htop, git), используют управляющие последовательности для отображения цветного вывода, интерактивных интерфейсов и прогресс-баров.
Программирование
В современных языках программирования (Python, C, JavaScript, Rust) существуют библиотеки для работы с ANSI-последовательностями (например, colorama для Python, chalk для Node.js). Разработчики используют их для создания цветного вывода в консольных приложениях, логах, тестовых фреймворках.
Веб-технологии
В веб-среде ANSI-последовательности используются в терминальных эмуляторах, встроенных в браузеры (например, в интерфейсах облачных IDE, системах управления серверами). Для преобразования ANSI-текста в HTML применяются утилиты вроде ansi2html.
Инструменты разработки
Системы непрерывной интеграции (CI/CD), такие как Jenkins, GitLab CI, GitHub Actions, выводят логи с использованием ANSI-последовательностей для подсветки ошибок, предупреждений и успешных шагов.
Примеры
Цветной текст
\e[31mКрасный текст\e[0m— выводит «Красный текст» красным цветом, затем сбрасывает атрибуты.\e[42;97mЗелёный фон, белый текст\e[0m— зелёный фон, белый текст.
Перемещение курсора
\e[10;20H— перемещает курсор на 10-ю строку, 20-й столбец.\e[2J— очищает весь экран.
Прогресс-бар
Последовательность \e[<количество>G (установка курсора в столбец) и \e[<количество>m (заливка цветом) позволяет рисовать прогресс-бары в консоли.
Критика
Неполная реализация
Многие терминалы и эмуляторы реализуют лишь подмножество функций стандарта. Например, драйвер ANSI.SYS в MS-DOS поддерживал только базовые цвета и перемещение курсора, но не поддерживал 256-цветную палитру или альтернативный буфер. Это привело к фрагментации: программы часто используют расширения, не входящие в оригинальный стандарт (например, последовательности от xterm).
Сложность синтаксиса
Синтаксис ANSI-последовательностей (особенно с параметрами) может быть трудночитаемым для человека. Ошибка в одном символе (например, пропуск [ или неверный код) приводит к некорректному отображению или поломке интерфейса.
Безопасность
Управляющие последовательности могут быть использованы для атак на терминалы (например, инъекция команд через escape-символы в логах или пользовательском вводе). Известны случаи, когда вредоносные последовательности перезаписывали содержимое экрана, скрывали вывод или выполняли команды (атака «escape injection»). Современные эмуляторы применяют фильтрацию и экранирование для предотвращения таких атак.
Устаревание
С развитием графических интерфейсов пользователя (GUI) роль текстовых терминалов снизилась. Однако ANSI X3.64 остаётся востребованным в серверной среде, автоматизации и DevOps-инструментах, где консольный вывод остаётся основным способом взаимодействия.
Источники
- ANSI X3.64-1977 «Additional Controls for Use with the American National Standard Code for Information Interchange»
- ISO/IEC 6429:1994 «Information technology — Control functions for coded character sets»
- ECMA-48 «Control Functions for Coded Character Sets»
- ГОСТ 27466-87 «Системы обработки информации. Управляющие функции для знаковых устройств отображения»
- Документация xterm (man-страницы)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →