Открыть сервис

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) определяет несколько основных категорий управляющих функций:

  1. Перемещение курсора — команды 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).
  2. Стирание — ED (Erase in Display, ESC[2J — очистить весь экран), EL (Erase in Line, ESC[K — очистить строку от курсора до конца).
  3. Атрибуты символов — SGR (Select Graphic Rendition, ESC[<код>m). Устанавливает цвет текста, фона, жирность, подчёркивание, мигание и другие эффекты.
  4. Режимы отображения — SM (Set Mode, ESC[<код>h) и RM (Reset Mode, ESC[<код>l). Включают или отключают такие режимы, как автоперенос строки, отображение курсора, режим вставки.
  5. Управление экраном — команды для работы с альтернативным буфером экрана (например, ESC[?1049h — включить альтернативный буфер).
  6. Цвета — стандарт определяет 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 →