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

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

Управляющие символы ANSI (англ. ANSI escape code) — символы, встраиваемые в текст, для управления форматом, цветом и другими опциями вывода в текстовом терминале. Почти все эмуляторы терминалов, предназначенные для отображения текстового вывода с удалённого компьютера и (за исключением Microsoft Windows) для отображения текстового вывода локального программного обеспечения, способны интерпретировать по крайней мере некоторые управляющие последовательности ANSI.

Содержание

История

Почти все разработчики текстовых терминалов создавали свои, несовместимые с другими версиями терминалов, управляющие последовательности, выполняющие какие-либо преобразования над содержимым терминала; например, перемещение курсора на произвольную позицию на экране. Сложные библиотеки, такие как termcap[en], были созданы для того чтобы в программах можно было использовать единый API, не зависимый от реализации текстового терминала. Кроме того, большинство терминалов требовали отправки чисел (таких как строка и столбец) в виде бинарных значений символов; для некоторых языков программирования и операционных систем, не имеющих внутренней поддержки ASCII, часто было сложно или невозможно поставить в соответствие числу корректный символ.

Первым стандартом управляющих символов ANSI стал ECMA-48, принятый в 1976 году. Это было продолжение серии стандартов кодировок, первым из которых был ECMA-6 1961 года — 7-битный стандарт от которого происходит ASCII. ECMA-48 обновлялся несколько раз, текущая версия — пятая, 1991 года. Он так же принят ISO и IEC как стандарт ISO/IEC 6429. Название «Управляющие символы ANSI» (англ. «ANSI escape sequence») появилось в 1981, когда ANSI принял ECMA-48 как стандарт ANSI X3.64 (позднее, в 1997 году, отозван[1]).

Первым популярным трминалом, поддерживающим эти последовательности, стал VT100, представленный в 1978 году[2]. Среди многочисленных «клонов» VT100, самым ранним и наиболее популярным стал наиболее доступный Zenith Z-19[en], вышедший в 1979 году[3]. Их популярность постепенно приводила к появлению большого количества программного обеспечения (особенно BBS), поддерживающего управляющие последовательности, а это, в свою очередь, привело к тому, что практически все новые терминалы и эмуляторы терминалов поддерживали их.

Поддержка

Большинство эмуляторов терминалов UNIX-подобных операционных систем (таких как xterm или OS X Terminal[en]) интерпретируют управляющие последовательности ANSI. Linux-консоль (видна когда X Window System не запущена) также интерпретирует их. Эмуляторы терминалов Microsoft Windows, предназначенные для текстового вывода из внешних источников (последовательный порт, модем или сокет), также интерпретируют их. Некоторая поддержка для текстового вывода локальных программ в Windows часто осуществляется при помощи альтернативных процессоров команд, например TCC[en] (прежде 4NT) от JP Software, ANSI.COM от Michael J. Mefford, ansicon от Jason Hood.

Многие консольные приложения[en] Unix (например, ls, grep, Vim, Emacs) могут генерировать их. Некоторые утилиты (tput[en]), низкоуровневые (termcap[en], terminfo[en]) и высокоуровневые (curses) библиотеки, выводят их.

Windows и DOS

MS-DOS 1.0 не поддерживал ни ANSI, ни какие-либо другие управляющие последовательности. Интерпретировались только несколько управляющих символов (CR, LF, BS), что не давало возможности создавать какие-либо полноэкранные приложения. Каких-либо эффектов дисплея можно было достичь только вызовами BIOS (или, гораздо чаще, прямыми манипуляциями над оборудованием IBM PC).

MS-DOS 2.0 предоставлял возможность установки драйвера для поддержки управляющих последовательностей ANSI — де-факто стандартом был ANSI.SYS, но использовались и другие (ANSI.COM[4], NANSI.SYS[5]). Медлительность и тот факт, что драйвер не был установлен по умолчанию, привели к тому что они почти не использовалось; программное обеспечение продолжало на-прямую манипулировать оборудованием для получения необходимых эффектов в текстовом терминале. ANSI.SYS и подобные драйвера продолжали использоваться в Windows 98, и даже в Windows ME в режиме native DOS (полноэкранный текстовый режим). ANSI.SYS так же работает на системах семейства Windows NT в 16-битном режиме для устаревших программ при помощи NTVDM[en].

Win32-консоль[en] вообще не поддерживает управляющие последовательности ANSI. Программное обеспечение может управлять консолью посредством ioctl[en]-подобных системных вызовов консольных API, чередующимся с текстовым выводом. Некоторые программы внутренне интерпретирует управляющие последовательности ANSI из текстового ввода и переводят их в соответствующие системные вызовы.

Элементы последовательности

Управляющие последовательности начинаются с символа ESC (ASCII: 27 / 0x1B / 033). Для двусимвольных последовательностей вторым символом может быть символ ASCII в диапазоне от 64 до 95 (от @ до _). Однако большинство последовательностей включают более двух символов и начинаются с символов ESC и [. Совокупность символов ESC и [ называют CSI или Control Sequence Introducer (так же Control Sequence Initiator). Последним символом такой последовательности может являться ASCII символ в диапазоне от 64 до 126 (от @ до ~).

Существует так же односимвольный CSI (ASCII: 155 / 0x9B / 0233). CSI вида ESC + [ используется чаще чем односимвольная альтернатива (см. так же C0 and C1 control codes). Только ESC + [ распознаются устройствами, поддерживающими только ASCII (7-битные байты) или устройствами, поддерживающими 8-битные байты, но использующие управляющие символы в диапазоне 0x80-0x9F для других целей. В терминалах, использующих кодировку UTF-8, обе формы занимают 2 байта (CSI в UTF-8: 0xC2, 0x9B), но ESC + [ выглядит разборчивей.

Хоть некоторые кодировки и используют несколько байтов для кодировки одного символа, далее в статье мы будем рассматривать только ASCII символы, которые представляются одним байтом.

CSI коды

Структура большинства управляющих последовательностей ANSI выглядит следующим образом:

CSI [символ(-ы) режима] n1 ; n2... [замыкающий(-ие) символ(-ы)] буква

Последний байт (буква), изменённый символами режима и замыкающими символами, определяет команду. Числа n1, n2, ... — не обязательные параметры. Если их значения не указаны, то по умолчанию обычно используются 0 или 1, в зависимости от операции. Если не указаны следующие числа, то и точки с запятыми тоже могут быть пропущены.

Последним байтом, формально, может быть любой символ от 64 до 126 (от 0x40 до 0x7e, ASCII: от @ до ~), он может быть изменён впереди стоящими промежуточными байтами в диапазоне от 32 до 47 (от 0x20 до 0x2f).

Символ двоеточия (0x3a) не может содержаться в последовательности. Он был оставлен для будущей стандартизации, поэтому любая последовательность, содержащая двоеточие, игнорируется.

Хотя наличие нескольких символов режима и нескольких замыкающих символов разрешено, это не используется.

Некоторые управляющие последовательности ANSI (не полный список)
Код Название Эффект
CSI n A CUU – Cursor Up Перемещает курсор на n (по умолчанию 1) позиций в указанном направлении. Если курсор уже находится с краю окна терминала, ничего не происходит.
CSI n B CUD – Cursor Down
CSI n C CUF – Cursor Forward
CSI n D CUB – Cursor Back
CSI n E CNL – Cursor Next Line Перемещает курсор в начало n-ой (по умолчанию 1-ой) строки снизу относительно текущей.
CSI n F CPL – Cursor Previous Line Перемещает курсор в начало n-ой (по умолчанию 1-ой) строки сверху относительно текущей.
CSI n G CHA – Cursor Horizontal Absolute Перемещает курсор в столбец n.
CSI n ; m H CUP – Cursor Position Перемещает курсор в строку n, столбец m. Значения n и m по умолчанию 1 (левый верхний угол), если указан только один аргумент без точки с запятой, считается что это n. Например, последовательность CSI ;5H синонимична CSI 1;5H, CSI 17;H синонимична CSI 17H и CSI 17;1H.
CSI n J ED – Erase Data Очищает часть окна терминала. Если n равно нулю (или отсутствует), очищает всё от курсора до конца окна терминала. Если n равно единице, очищает всё от курсора до начала окна терминала. Если n равно двум, очищает всё окно терминала (и перемещает курсор в левый верхний угол в MS-DOS ANSI.SYS). В случае n равного 2, вместо очистки может произойти просто создание новых строчек так чтобы предшествующее содержимое терминала вытеснилось вверх.
CSI n K EL – Erase in Line Удаляет часть строки. Если n равно нулю (или отсутствует), очищает всё от курсора до конца строки. Если n равно единице, очищает всё от курсора до начала строки. Если n равно двум, очищает всю строку. Положение курсора не меняется.
CSI n S SU – Scroll Up Прокручивает текущую страницу терминала вверх на n (по умолчанию 1) строк. Новые строки добавляются снизу, строки в верхней части текущей страницы затираются. (не ANSI.SYS)
CSI n T SD – Scroll Down Прокручивает текущую страницу терминала вниз на n (по умолчанию 1) строк. Новые строки добавляются сверху, строки в нижней части текущей страницы удаляются. (не ANSI.SYS)
CSI n ; m f HVP – Horizontal and Vertical Position Перемещает курсор в строку n, столбец m. Значение по умолчанию обоих параметров 1. Тот же эффект, что и CUP.
CSI n [;k] m SGR – Select Graphic Rendition Установка SGR параметров, определяющих цвета текста и фона. После CSI могут находиться ноль или более параметров, разделённых точками с запятыми. Если параметры не указаны, CSI m ведёт себя как CSI 0 m (reset / normal).
CSI 6 n DSR – Device Status Report Сообщает текущее положение курсора в формате ESC[n;mR, где n — строка, m — столбец. (Может не работать в MS-DOS)
CSI s SCP – Save Cursor Position Сохраняет положение курсора.
CSI u RCP – Restore Cursor Position Восстанавливает положение курсора.
CSI ?25l DECTCEM Скрывает курсор.
CSI ?25h DECTCEM Делает курсор видимым.
SGR (Select Graphic Rendition) параметры
Код Эффект Примечание

См. также

Примечания

  1. NIST list of withdrawn standards
  2. Paul Williams Digital's Video Terminals. VT100.net (2006). Архивировано из первоисточника 18 декабря 2012. Проверено 17 августа 2011.
  3. Heathkit Company Heathkit Catalog 1979. Heathkit Company (1979). Архивировано из первоисточника 18 декабря 2012. Проверено 4 ноября 2011.
  4. Michael Mefford ANSI.com: Download It Here. PC Magazine (7 February 1989). Архивировано из первоисточника 18 декабря 2012. Проверено 10 августа 2011.
  5. Dan Kegel, Eric Auer Nansi and NNansi - ANSI Drivers for MS-DOS. Dan Kegel's Web Hostel (28 February 1999). Архивировано из первоисточника 18 декабря 2012. Проверено 10 августа 2011.

Ссылки

Кодировки символов
Основы → алфавиттекстфайлданные ) • набор символов • конверсия
Исторические кодировки → Докомп.: семафорная (Макарова)МорзеБодоМТК-2 Комп.: 6 битУППRADIX-50EBCDICДКОИ-8 ) • КОИ-7ISO 646
совре-
менное
8-битное
представ-
ление
символы ASCIIуправляющиепечатные ) не-ASCII ( псевдографика )
8бит. код.стр. Разные →   Кириллица: КОИ-8ГОСТ 19768-87MacCyrillic
ISO 8859 → 1(лат.) 2 3 4 5(кир.) 6 7 8 9 10 11 12 13 14 15(€) 16
Windows → 1250 1251(кир.) 1252 1253 1254 1255 1256 1257 1258 | WGL4
IBM&DOS → 437850852855866 «альт.» • ( МИК ) • ( НИИ ЭВМ )
Много-
байтные
Традиционные → DBCSGB2312 ) • HTML
Unicode → UTF-16UTF-8список символовкириллица )
Связанные
темы →
интерфейс пользователяраскладка клавиатурылокальперевод строкишрифткракозябрытранслитнестандартные шрифты • текст как изображение Утилиты: iconvrecode



Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Управляющие последовательности ANSI" в других словарях:

  • Список стандартов Ecma — Ниже представлен список стандартов, утвержденных организацией Ecma International, ранее известной как «Европейская ассоциация производителей компьютеров». Содержание 1 ECMA 1  ECMA 99 2 ECMA 100  ECMA 199 3 ECMA 200  ECMA 299 …   Википедия

  • VT100 — DEC VT100 VT100  текстовый компьютерный терминал производства DEC, набор команд которого стал стандартом …   Википедия

  • IEEE-488 — англ. Standard Digital Interface for Programmable Instrumentation кабель IEEE 488 с соед …   Википедия

  • Python — У этого термина существуют и другие значения, см. Python (значения). Python Класс языка: му …   Википедия

  • Проект — У этого термина существуют и другие значения, см. Проект (значения). Проект (от лат. projectus  брошенный вперед, выступающий, выдающийся вперёд)  согласно новому стандарту ISO 21500  уникальный набор процессов, состоящих из… …   Википедия

  • Барьеры размеров жёстких дисков — Динамика роста ёмкости жёстких дисков с 1980 года. Ось Y в логарифмическом масштабе, поэтому аппроксимирующая линия соответствует экспоненциальному росту По мере развития жёстких дисков их максимальная ёмкость стремительно увеличивалась. На …   Википедия

  • FAT — (англ. File Allocation Table  «таблица размещения файлов»)  классическая архитектура файловой системы, которая из за своей простоты всё ещё широко используется для флеш накопителей. В недавнем прошлом использовалась в дискетах, на… …   Википедия

  • Пайтон — Python Класс языка: функциональный, объектно ориентированный, императивный, аспектно ориентированный Тип исполнения: интерпретация байт кода, компиляция в MSIL, компиляция в байт код Java Появился в: 1990 г …   Википедия

  • C++11 — C++11[1][2] или ISO/IEC 14882:2011[3] (в процессе работы над стандартом носил условное наименование C++0x[4][5])  новая версия стандарта языка C++, вместо ранее действовавшего ISO/IEC 14882:2003. Новый стандарт включает дополнения в ядре… …   Википедия

  • Объём жёсткого диска — Динамика роста ёмкости жёстких дисков с 1980 года. Ось Y в логарифмическом масштабе, поэтому аппроксимирующая линия соответствует …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»