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

Стандарт ECMA-48

ECMA-48 — это международный стандарт, определяющий набор управляющих последовательностей для терминалов и устройств текстового вывода, также известный как «стандарт ANSI-escape-последовательностей». Он был разработан Европейской ассоциацией производителей компьютеров (ECMA) и впервые опубликован в 1976 году. Стандарт описывает, как программное обеспечение может управлять отображением текста, цветом, курсором, форматированием и другими аспектами вывода на текстовые терминалы, совместимые с протоколом ANSI X3.64.

История

Предпосылки создания

В 1960–1970-х годах, с развитием компьютерных терминалов (например, VT52, VT100 от Digital Equipment Corporation), возникла необходимость в универсальном способе управления отображением текста. Разные производители использовали собственные, несовместимые управляющие последовательности, что затрудняло переносимость программного обеспечения. Для решения этой проблемы в 1974 году Американский национальный институт стандартов (ANSI) начал разработку стандарта ANSI X3.64, который был опубликован в 1977 году. Параллельно ECMA, объединявшая производителей вычислительной техники в Европе, разработала собственный стандарт ECMA-48, основанный на тех же принципах, но с более чёткой спецификацией.

Развитие и версии

Первая версия ECMA-48 была опубликована в 1976 году. В 1979 году вышла вторая редакция, которая была синхронизирована с ANSI X3.64-1979. В 1984 году была выпущена третья редакция, включившая дополнительные управляющие последовательности для работы с цветом, графикой и режимами отображения. Четвёртая редакция (1991) добавила поддержку 256-цветных режимов и расширенных функций. Последняя, пятая редакция, вышла в 1996 году и остаётся актуальной по сей день. В 2002 году стандарт был принят как международный ISO/IEC 6429, что обеспечило его глобальное распространение.

Влияние на индустрию

ECMA-48 стал основой для большинства современных текстовых терминалов, эмуляторов (например, xterm, GNOME Terminal, Windows Terminal) и консольных приложений. Он также используется в протоколах удалённого доступа, таких как SSH, Telnet и RDP, для передачи управляющих команд. Благодаря стандарту, программы, написанные для Unix-подобных систем, могут корректно отображать цвета и форматирование на любом совместимом терминале.

Структура и принципы

Управляющие последовательности

ECMA-48 определяет два типа управляющих последовательностей:

  • CSI (Control Sequence Introducer) — последовательность, начинающаяся с символа ESC (код 27) и следующего за ним символа [ (код 91). После CSI следуют параметры (числовые значения, разделённые точкой с запятой) и завершающий символ (например, m для установки атрибутов текста). Пример: ESC[31m — установка красного цвета текста.
  • SGR (Select Graphic Rendition) — подмножество CSI, отвечающее за форматирование текста: цвет, яркость, подчёркивание, мигание и т.д. Параметры SGR передаются в виде чисел, например, 1 — жирный, 4 — подчёркнутый, 31 — красный текст.

Классификация управляющих функций

Стандарт делит функции на несколько категорий:

  • Функции управления курсором — перемещение курсора вверх, вниз, влево, вправо, в начало строки, на определённую позицию, сохранение и восстановление позиции.
  • Функции управления отображением — очистка экрана, очистка строки, установка режимов (например, режим вставки, режим замены).
  • Функции форматирования текста — установка цвета текста и фона, жирности, курсива, подчёркивания, зачёркивания, мигания, скрытого текста.
  • Функции управления графикой — установка режимов отображения (например, 7-битный, 8-битный, 256-цветный), выбор шрифта.
  • Функции управления устройством — запрос статуса, сброс, установка параметров терминала.

Примеры последовательностей

  • ESC[2J — очистка всего экрана.
  • ESC[H — перемещение курсора в левый верхний угол.
  • ESC[1;31m — установка жирного красного текста.
  • ESC[0m — сброс всех атрибутов к стандартным.
  • ESC[?25h — отображение курсора, ESC[?25l — скрытие курсора.

Применение

В операционных системах

ECMA-48 широко используется в Unix-подобных системах (Linux, macOS, BSD) для управления консольным выводом. Почти все современные эмуляторы терминалов (xterm, GNOME Terminal, Konsole, iTerm2) поддерживают стандарт. В Windows до версии 10 поддержка была ограниченной, но начиная с Windows 10 (версия 1511) встроенный консольный хост (conhost.exe) и Windows Terminal полностью поддерживают ECMA-48.

В программировании

Многие библиотеки и фреймворки используют ECMA-48 для цветного вывода. Например:

  • ANSI escape codes — встроенная поддержка в языках C, Python, Ruby, JavaScript (Node.js) через управляющие последовательности.
  • Библиотеки — ncurses, terminfo, termcap, которые предоставляют абстракцию над управляющими последовательностями.
  • Инструменты — Git (цветной вывод diff), grep, ls, vim, tmux, screen.

В веб-технологиях

ECMA-48 также используется в веб-приложениях, работающих через SSH или Telnet (например, в системах управления серверами, игровых MUD-серверах). Эмуляторы терминалов в браузерах (например, xterm.js) реализуют поддержку стандарта для отображения консольного вывода.

Критика и ограничения

Неполнота поддержки

Несмотря на стандартизацию, разные эмуляторы терминалов могут по-разному интерпретировать некоторые последовательности. Например, поддержка 256-цветного режима (последовательность ESC[38;5;Nm) не была реализована во всех терминалах до 2000-х годов. Некоторые старые терминалы (например, VT52) не поддерживают ECMA-48 вовсе.

Сложность для разработчиков

Использование управляющих последовательностей напрямую может быть неудобным из-за их синтаксиса. Для упрощения разработчики часто используют библиотеки-обёртки, такие как ncurses или terminfo, которые скрывают детали реализации.

Устаревание в графических интерфейсах

С развитием графических интерфейсов (GUI) и веб-приложений, текстовые терминалы стали менее распространены. Однако ECMA-48 остаётся важным для серверного администрирования, разработки и отладки, где консольный вывод остаётся основным средством взаимодействия.

Интересные факты

  • Стандарт ECMA-48 был одним из первых, кто ввёл понятие «escape-последовательности», что позволило управлять выводом без использования специальных драйверов.
  • В 1980-х годах многие производители терминалов (например, Wyse, ADDS) добавляли расширения к ECMA-48, что приводило к несовместимости. Однако со временем стандарт стал де-факто основным.
  • В 256-цветном режиме используется 8-битная палитра, где первые 16 цветов соответствуют стандартным ANSI-цветам, а остальные 240 — равномерно распределённым оттенкам.
  • Некоторые современные эмуляторы терминалов (например, Kitty, Alacritty) поддерживают расширенные возможности, выходящие за рамки ECMA-48, такие как true color (24-битный цвет) и гиперссылки.

Источники

  • ECMA-48: Control Functions for Coded Character Sets (5th edition, 1996)
  • ISO/IEC 6429:1992 — Information technology — Control functions for coded character sets
  • ANSI X3.64-1979 — Additional Controls for Use with ASCII
  • Документация xterm (man xterm)
  • Спецификация Windows Terminal (Microsoft Docs)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →