Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Управляющие последовательности ANSI являются стандартом для внутриполосной сигнализации для управления положением курсора, цветом, стилем шрифта и другими параметрами на видеотекстовых терминалах и эмуляторах терминалов . Определенные последовательности байтов , большинство из которых начинаются с escape- символа ASCII и символа скобки , встроены в текст. Терминал интерпретирует эти последовательности как команды, а не как текст для дословного отображения.

Последовательности ANSI были введены в 1970-х годах для замены специфичных для производителей последовательностей и получили широкое распространение на рынке компьютерного оборудования к началу 1980-х годов. Они используются в разработке, научных, коммерческих текстовых приложениях, а также в системах электронных досок объявлений, чтобы предложить стандартизированные функции.

Хотя в 21 веке аппаратные текстовые терминалы становятся все более редкими, актуальность стандарта ANSI сохраняется, поскольку подавляющее большинство эмуляторов терминалов и командных консолей интерпретируют по крайней мере часть стандарта ANSI.

История [ править ]

Практически все производители видеотерминалов добавили управляющие последовательности, зависящие от производителя, для выполнения таких операций, как размещение курсора в произвольных позициях на экране. Одним из примеров является терминал VT52 , который позволял помещать курсор в точку x, y на экране, отправляя ESCсимвол, Yсимвол, а затем два символа, представляющих числовые значения, равные положению x, y плюс 32 (таким образом, начиная с символа пробела ASCII и избегая управляющих символов). У Hazeltine 1500 была аналогичная функция, вызываемая с помощью ~, DC1а затем позиции X и Y разделялись запятой. Хотя в этом отношении два терминала имели идентичные функции, для их вызова приходилось использовать разные управляющие последовательности.

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

Стандарт ANSI попытался решить эти проблемы, создав набор команд, который будут использовать все терминалы, и требуя, чтобы вся числовая информация передавалась как числа ASCII. Первый стандарт в серии был ECMA-48, принятый в 1976 году [1] Это было продолжением серии стандартов кодирования символов, первый из которых ECMA-6 с 1965, 7-битный стандарт A из которого ISO 646 берет начало . Название «escape-последовательность ANSI» датируется 1979 годом, когда ANSI принял ANSI X3.64. Комитет ANSI X3L2 сотрудничал с комитетом ECMA TC 1 для создания почти идентичных стандартов. Эти два стандарта были объединены в международный стандарт ISO 6429. [1]В 1994 году ANSI отказался от своего стандарта в пользу международного стандарта.

Первым популярным видеотерминалом, поддерживающим эти последовательности, был Digital VT100 , представленный в 1978 году. [2] Эта модель была очень успешной на рынке, что привело к появлению множества клонов VT100, среди самых ранних и самых популярных из которых был гораздо больший. доступный Zenith Z-19 в 1979 году. [3] Другие включали Qume QVT-108, Televideo TVI-970, Wyse WY-99GT, а также дополнительные режимы «VT100», «VT103» ​​или «ANSI» с различной степенью совместимости на многие другие бренды. Их популярность постепенно привела к появлению все большего и большего количества программного обеспечения (особенно систем досок объявлений и других онлайн-сервисов).) предполагая, что escape-последовательности сработали, что привело к появлению почти всех новых терминалов и программ эмуляторов, поддерживающих их.

В 1981 году ANSI X3.64 был принят для использования в правительстве США публикацией 86 FIPS. Позже правительство США прекратило дублировать отраслевые стандарты, поэтому FIPS pub. 86 был отозван. [4]

ECMA-48 обновлялся несколько раз и в настоящее время находится на 5-м издании с 1991 года. Он также принят ISO и IEC как стандарт ISO / IEC 6429 . [5] Версия принята в качестве промышленного стандарта Японии , как JIS X 0211 .

Связанные стандарты включают ITU T.61 , в Телетекс стандарт, и ISO / IEC 8613 , в Open Architecture Document стандарт ( в основном ISO / IEC 8613-6 или ITU T.416). Эти две системы имеют много escape-кодов с системой ANSI, с расширениями, которые не обязательно имеют значение для компьютерных терминалов. Обе системы быстро вышли из употребления, но ECMA-48 помечает используемые в них расширения как зарезервированные.

Поддержка платформы [ править ]

Unix-подобные системы [ править ]

Хотя библиотеки в стиле termcap / terminfo в основном разрабатывались для Unix и для Unix, к середине 1980-х программы, работающие в Unix-подобных операционных системах, почти всегда могли предполагать, что они используют терминал или эмулятор, поддерживающий последовательности ANSI; [ необходима цитата ] это привело к широкому использованию ANSI программами, работающими на этих платформах. Например, многие игры и сценарии оболочки, а также служебные программы, такие как списки цветных каталогов, напрямую записывают последовательности ANSI и, следовательно, не могут использоваться на терминале, который не интерпретирует их. Многие программы, включая текстовые редакторы, такие как vi и GNU Emacs, используйте termcap или terminfo, или используйте библиотеки, такие как curses, которые используют termcap или terminfo и, таким образом, теоретически поддерживают терминалы, отличные от ANSI, но в настоящее время это так редко тестируется, что они вряд ли будут работать с этими терминалами. [ необходима цитата ]

Эмуляторы терминала для взаимодействия с локальными программами, а также с удаленными машинами и консоль текстовой системы почти всегда поддерживают escape-коды ANSI. Сюда входят эмуляторы терминала, такие как xterm , rxvt , GNOME Terminal и Konsole в системах с оконными системами на базе X11 или Wayland , а также Terminal.app и распространенные сторонние терминалы, такие как iTerm2 в macOS .

DOS, OS / 2 и Windows [ править ]

MS-DOS 1.x не поддерживает ANSI или другие escape-последовательности. Только несколько управляющих символов ( BEL , CR , LF , BS ) были интерпретированы нижележащего BIOS, что делает его практически [а] невозможно сделать какие - либо приложения в полноэкранном. Любые эффекты отображения должны были выполняться с помощью вызовов BIOS, которые, как известно, были медленными, или путем прямого манипулирования оборудованием IBM PC.

В DOS 2.0 появилась возможность добавлять драйвер устройства для управляющих последовательностей ANSI - стандартом де-факто является ANSI.SYS , но также используются другие, такие как ANSI.COM , [6] NANSI.SYS [7] и ANSIPLUS.EXE ( они значительно быстрее, так как обходят BIOS). Из-за медлительности и того факта, что он не был установлен по умолчанию, программное обеспечение редко им пользовалось; вместо этого приложения продолжали напрямую манипулировать оборудованием, чтобы получить необходимый текстовый дисплей. [ необходима цитата ] ANSI.SYS и аналогичные драйверы продолжали работать в Windows 9x вплоть до Windows Me и в системах, производных от NT, для 16-битных унаследованных программ, выполняемых под NTVDM .

Многие клоны DOS могли интерпретировать последовательности и не требовали загрузки отдельного драйвера ANSI. PTS-DOS [8] [9], а также Concurrent DOS , Multiuser DOS [10] и REAL / 32 имеют встроенную поддержку (плюс ряд расширений). В OS / 2 была команда ANSI, которая включала последовательности.

Консоль для Windows не поддерживает управляющие последовательности ANSI, и не Microsoft предоставлять какой - либо метод , чтобы позволить им. Некоторые замены или дополнения для окна консоли, такие как TCC от JP Software (ранее 4NT), ANSI.COM Майкла Дж. Меффорда , ANSICON Джейсона Гуда [11] и ConEmu от Maximus5 интерпретировали escape-последовательности ANSI, напечатанные программами. Пакет Python [12] внутренне интерпретировал escape-последовательности ANSI в печатаемом тексте, переводя их в вызовы для управления цветом и положением курсора, чтобы упростить перенос кода Python с использованием ANSI в Windows. Cygwinвыполняет аналогичную трансляцию для всего вывода, записанного на консоль с использованием файловых дескрипторов Cygwin, фильтрация выполняется функциями вывода cygwin1.dll , что позволяет переносить код POSIX C в Windows.

В 2016 году Microsoft выпустила обновление Windows 10 версии 1511, которое неожиданно реализовало поддержку escape-последовательностей ANSI, спустя более двух десятилетий после дебюта Windows NT. [13] Это изменение было разработано, чтобы дополнить подсистему Windows для Linux , добавляя к хосту консоли Windows, используемому командной строкой, поддержку escape-кодов символов, используемых терминальным программным обеспечением для Unix-подобных систем. Это не поведение по умолчанию и должно быть включено программно с помощью Win32 API через SetConsoleMode(handle, ENABLE_VIRTUAL_TERMINAL_PROCESSING). [14] Это было включено CMD.EXE, но не изначально PowerShell ; [15]однако Windows PowerShell 5.1 теперь включает это по умолчанию. Начиная с PowerShell 6, можно вставлять символ ESC в строку с помощью `eспециальной последовательности; Например, "`e[32m". [16] Более ранние версии должны использовать [char]27)объект; например "$([char]27)[32m",.

Терминал Windows , представленный в 2019 году, поддерживает последовательности по умолчанию, и, похоже, Microsoft намерена объединить или заменить консоль Windows с его помощью. [ необходима цитата ]

Atari ST [ править ]

Atari ST использовала систему команд , приспособленную из VT52 с некоторыми расширениями для поддержки цвета, [17] , а не поддерживает ANSI коду эвакуации.

AmigaOS [ править ]

AmigaOS не только интерпретирует кодовые последовательности ANSI для вывода текста на экран, драйвер принтера AmigaOS также интерпретирует их (с собственными расширениями AmigaOS) и переводит их в коды, необходимые для конкретного подключенного принтера. [18]

VMS / OpenVMS [ править ]

VMS была разработана для интерактивного управления с использованием текстовых видеотерминалов Digital, таких как вышеупомянутый VT100 ; позже с графическими эмуляторами терминала, такими как VWS Terminal, DECTerm и xterm. [19]

Описание [ править ]

Управляющие символы [ править ]

Хотя технически это не является частью стандарта, почти все пользователи берут на себя некоторые функции некоторых однобайтовых символов. Это используется для сокращения объема передаваемых данных или для выполнения некоторых функций, которые недоступны из escape-последовательностей:

Escape-последовательности различаются по длине. Общий формат управляющей последовательности, совместимой с ANSI, определен в ANSI X3.41 (эквивалент ECMA-35 или ISO / IEC 2022). [20] : 13.1 Управляющие последовательности состоят только из байтов в диапазоне 0x20–0x7F (все неуправляющие символы ASCII) и могут быть проанализированы без предварительного просмотра. Поведение, когда управляющий символ, байт с установленным старшим битом или байт, который не является частью какой-либо допустимой последовательности, встречается до того, как конец не определен.

Fe Escape последовательности [ править ]

Если за ESCсимволом следует байт в диапазоне от 0x40 до 0x5F, он относится к этому типу. Соответствует применимому стандарту управляющего кода C1 . [20] : 13.2.1 Соответственно, все escape-последовательности, соответствующие управляющим кодам C1 из ANSI X3.64 / ECMA-48, следуют этому формату. [5] : 5.3.a

В стандарте сказано, что в 8-битных средах управляющие функции, соответствующие Feуправляющим последовательностям типа (из набора управляющих кодов C1 ), могут быть представлены как отдельные байты в диапазоне 0x80–0x9F. [5] : 5.3.b Однако на современных устройствах эти коды часто используются для других целей, например, как части UTF-8 или для символов CP-1252 , поэтому обычно используется только 2-байтовая последовательность. В случае UTF-8 управляющий код C1 может быть закодирован как два байта (например, 0xC2,0x8E для U + 008E ), но таким образом не сохраняется никакого места.

Последовательности CSI (Control Sequence Introducer) [ править ]

Для команд Control Sequence Introducer, или CSI, ESC [за символом следует любое количество (включая ни одного) «байтов параметра» в диапазоне 0x30–0x3F (ASCII 0–9:;<=>?), затем любое количество «промежуточных байтов» в диапазоне 0x20–0x2F. (Пробел ASCII и !"#$%&'()*+,-./), затем, наконец, одним «последним байтом» в диапазоне 0x40–0x7E (ASCII @A–Z[\]^_`a–z{|}~). [5] : 5,4

Во всех распространенных последовательностях параметры используются только в виде ряда чисел, разделенных точкой с запятой, например 1;2;3. Пропущенные числа обрабатываются как 0( 1;;3действует как среднее число 0, а никаких параметров вообще не ESC[mдействует как 0код сброса). Некоторые последовательности (например, CUU) обрабатываются 0как 1для того, чтобы сделать отсутствующие параметры полезными. [5] : F.4.2

Подмножество устройств было объявлено «частным», чтобы производители терминалов могли вставлять свои собственные последовательности, не противореча стандарту. Последовательности, содержащие байты параметров <=>?или последние байты 0x70–0x7E ( p–z{|}~), являются частными.

Поведение терминала не определено в случае, когда последовательность CSI содержит любой символ за пределами диапазона 0x20–0x7E. Эти недопустимые символы представляют собой управляющие символы C0 (диапазон 0–0x1F), DEL (0x7F) или байты с установленным старшим битом. Возможные ответы: игнорировать байт, обрабатывать его немедленно и, кроме того, продолжать ли последовательность CSI, немедленно прервать ее или игнорировать остальную часть. [ необходима цитата ]

Параметры SGR (выбор графического представления) [ редактировать ]

Выбор графического представления (SGR) устанавливает атрибуты отображения. В одной последовательности можно установить несколько атрибутов, разделенных точкой с запятой. [27] Каждый атрибут отображения остается в силе до тех пор, пока следующее событие SGR не сбросит его. [5] Если коды не указаны, CSI mсчитается CSI 0 m(сброс / нормальный).

В ECMA-48 SGR называется «Выбор графического представления». [5] : 8.3.117 В справочных страницах Linux используется термин «Установить отображение графики». [27]

Цвета [ править ]

3-битные и 4-битные [ править ]

В исходной спецификации было всего 8 цветов, и им были даны только названия. Параметры 30–37 SGR выбирают цвет переднего плана, а параметры 40–47 выбирают цвет фона. Довольно много терминалов реализовано «полужирным» (код SGR 1) как более яркий цвет, а не другой шрифт, таким образом обеспечивая 8 дополнительных цветов переднего плана. Обычно вы не могли получить их в качестве фоновых цветов, хотя иногда обратное видео (код SGR 7) позволяло это. Примеры: чтобы получить черные буквы на белом фоне, используйте ESC[30;47mкрасный ESC[31m, чтобы получить ярко-красный ESC[1;31m. Чтобы сбросить цвета до значений по умолчанию, используйте ESC[39;49m(не поддерживается на некоторых терминалах) или сбросьте все атрибуты с помощью ESC[0m. Позже терминалы добавили возможность напрямую указывать «яркие» цвета с 90–97 и 100–107.

Когда оборудование начало использовать 8-битные цифро-аналоговые преобразователи (ЦАП), несколько программ присвоили этим именам 24-битные номера цветов. В приведенной ниже таблице показаны значения, отправленные в ЦАП для некоторых распространенных аппаратных и программных средств. [ необходима цитата ]

8-битный [ править ]

Поскольку 256-цветные справочные таблицы стали обычным явлением на графических картах, были добавлены escape-последовательности для выбора из предопределенного набора из 256 цветов: [ необходима ссылка ]

ESC [38; 5; n⟩ m Выбрать цвет переднего планаESC [48; 5; ⟨n⟩ m Выбрать цвет фона 0–7: стандартные цвета (как в ESC [30–37 м) 8-15: цвета высокой интенсивности (как в ESC [90–97 м) 16-231: 6 × 6 × 6 куб (216 цветов): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)232-255: оттенки серого от черного к белому за 24 шага

В МСЭ «сек T.416 Информационные технологии - Открытая архитектура документов (ODA) и формат обмена: содержание символов архитектуры [37] использует„:“как разделитель символов вместо:

ESC [38: 5: ⟨n⟩ m Выбрать цвет переднего планаESC [48: 5: n⟩ m Выбрать цвет фона
24-бит [ править ]

Поскольку графические карты «истинного цвета» с 16–24 битами цвета стали обычным явлением, приложения начали поддерживать 24-битные цвета. Эмуляторы терминала, поддерживающие установку 24-битных цветов переднего плана и фона с помощью управляющих последовательностей, включают Xterm, [21] KDE's Konsole , [38] [39] и iTerm, а также все терминалы на основе libvte [40], включая терминал GNOME . [ необходима цитата ]

ESC [38; 2; r⟩; ⟨g⟩; ⟨b⟩ m Выбор цвета переднего плана RGBESC [48; 2; r⟩; ⟨g⟩; ⟨b⟩ m Выбор цвета фона RGB

ITU T.416 Информационные технологии «s - Open Architecture Document (ОПР) и формат обмена: содержание символов архитектуры [37] , который был принят в качестве ISO / IEC Международный стандарт 8613-6 дает альтернативный вариант , который , кажется, менее поддерживается. [ сомнительно ] Параметры после «2», т.е. даже r, g, b, необязательны. Обратите внимание, что это не просто приведенная выше последовательность с точкой с запятой, замененной двоеточием, есть ведущий «идентификатор цветового пространства» (этот факт был упущен многими эмуляторами терминала, похоже, это упущение пришло из KDE Konsole). [21]Определение идентификатора цветового пространства не включено в этот документ, поэтому оно может быть пустым, чтобы представлять неопределенное значение по умолчанию. Помимо значения '2' для указания формата красный-зеленый-синий (и '5' выше для индексированного цвета 0-255), существуют альтернативы '0' для определенной реализации и '1' для прозрачного - ни то, ни другое какие есть дополнительные параметры; «3» определяет цвета с использованием схемы Cyan-Magenta-Yellow, а «4» - для Cyan-Magenta-Yellow-Black, причем последний использует позицию, помеченную как «неиспользуемая» для компонента Black: [ необходима ссылка ]

ESC [38: 2: «Color-Space-ID»: ⟨r⟩: ⟨g⟩: ⟨b⟩: «unused»: Допуск CS⟩: Цветовое пространство, связанное с допуском: 0 для «CIELUV»; 1 для «CIELAB»⟩; m Выбрать цвет переднего плана RGBESC [48: 2: «ID-цветового пространства»: «r»: «g»: «b»: «неиспользованный»: «Допуск CSS»: «Цветовое пространство, связанное с допуском: 0 для« CIELUV »; 1 для «CIELAB»⟩; m Выберите цвет фона RGB

Последовательности OSC (команды операционной системы) [ править ]

В основном они были определены Xterm. По историческим причинам Xterm может завершить команду с BEL, а также ST. [21]

Xterm позволяет устанавливать заголовок окна с помощью ESC ]0;this is the window title BEL.

Не-xterm расширение - это гиперссылка ESC ]8;link STс 2017 года, используемая VTE и iTerm2. [41] [42] [ обсудить ]

Консоль Linux используется ESC ] P n rr gg bbдля изменения палитры, которая, если жестко встроена в приложение, может привести к зависанию других терминалов. [43] Однако добавление STбудет игнорироваться Linux и формировать правильную, игнорируемую последовательность для других терминалов. [ необходима цитата ]

Fs Escape последовательности [ править ]

Если ESCза символом следует байт в диапазоне 0x60–0x7E, он относится к этому типу. Используется для функций управления, индивидуально зарегистрированных в реестре ISO-IR, и, следовательно, доступны даже в контекстах, где используется другой набор управляющих кодов C1. В частности, они соответствуют отдельным функциям управления, утвержденным ISO / IEC JTC 1 / SC 2 и стандартизированным ISO или признанным ISO органом. [20] : 6.5.1 Некоторые из них указаны в ECMA-35 (ISO 2022 / ANSI X3.41), другие - в ECMA-48 (ISO 6429 / ANSI X3.64). [20] : 6.5.4 ECMA-48 называет их «независимыми функциями управления». [5] : 5.5

Fp Escape последовательности [ править ]

Если ESCза символом следует байт в диапазоне 0x30–0x3F, он относится к этому типу. Отдельно для функций управления частным использованием. [20] : 6.5.3

nF Escape последовательности [ править ]

Если ESCза символом следует байт в диапазоне 0x20–0x2F, он относится к этому типу. За ним следует любое количество дополнительных байтов в этом диапазоне, а затем байт в диапазоне 0x30-0x7E . Далее они подразделяются на подкатегории по младшим четырем битам первого байта, например, «тип » для последовательностей, где первый байт равен 0x22 ; и тем, находится ли последний байт в диапазоне частного использования 0x30–0x3F (например, «тип ») или нет (например, «тип »). [20] : 13.2.1 Они в основном используются для механизмов переключения кода ANSI / ISO, таких как используемые в ISO-2022-JP , за исключением последовательностей типов (тех, где первый промежуточный байт2F2Fp2Ft3F0x23), которые используются для отдельных функций управления. 3FtПоследовательности типов зарезервированы для дополнительных индивидуальных функций управления, зарегистрированных в ISO-IR, [20] : 6.5.2, в то время как 3Fpпоследовательности типов доступны для функций управления частного использования. [20] : 6.5.3

Примеры [ править ]

CSI 2 J - Экран очищается, а на некоторых устройствах курсор переводится в положение 1,1 (y, x) (левый верхний угол).

CSI 32 m- Текст становится зеленым. Зеленый может быть темным, тускло-зеленым, поэтому вы можете включить жирный шрифт с последовательностью, CSI 1 mкоторая сделает его ярко-зеленым, или объединить как CSI 32 ; 1 m. В некоторых реализациях для придания персонажу яркости используется состояние «Жирный».

CSI 0 ; 6 8 ; "DIR" ; 13 p- Это переназначает клавишу F10 для отправки в буфер клавиатуры строки «DIR» и ENTER, которая в командной строке DOS будет отображать содержимое текущего каталога. (Только MS-DOS ANSI.SYS) Иногда это использовалось для бомб ANSI . Это код для частного использования (обозначен буквой p), использующий нестандартное расширение для включения параметра со строковым значением. После буквы стандарта будет считаться, что последовательность заканчивается на букву D.

CSI s- Это сохраняет позицию курсора. Использование последовательности CSI uвернет ее в исходное положение. Скажем, текущая позиция курсора - 7 (y) и 10 (x). Последовательность CSI sсохранит эти два числа. Теперь вы можете перейти в другую позицию курсора, например, 20 (y) и 3 (x), используя последовательность CSI 20 ; 3 Hили CSI 20 ; 3 f. Теперь, если вы используете последовательность CSI u, позиция курсора вернется на 7 (y) и 10 (x). Некоторым терминалам вместо этого требуются последовательности DEC ESC 7/, ESC 8которые поддерживаются более широко.

В сценариях оболочки [ править ]

Управляющие коды ANSI часто используются в UNIX и UNIX-подобных терминалах для выделения синтаксиса . Например, на совместимых терминалах следующий список команд цветовых кодов файлов и имен каталогов по типу.

ls --color

Пользователи могут использовать escape-коды в своих сценариях, включая их как часть стандартного вывода или стандартной ошибки . Например, следующая команда GNU sed украшает вывод команды make , отображая строки, содержащие слова, начинающиеся с «WARN» в обратном видео, и слова, начинающиеся с «ERR», ярко-желтым на темно-красном фоне ( регистр букв игнорируется). Представления кодов выделены. [51]

сделать 2> & 1 | sed -e 's /.* \ bWARN. * / \ x1b [7m & \ x1b [0m / i' -e 's /.* \ bERR. * / \ x1b [93; 41m & \ x1b [0m / i '

Следующая функция Bash мигает терминалом (поочередно отправляя коды обратного и нормального режима видео), пока пользователь не нажмет клавишу. [52]

flasher () {пока верно; сделать printf \\ e [? 5h ; сон 0,1; printf \\ e [? 5l ; читать -s -n1 -t1 && break; сделано; }

Это можно использовать для предупреждения программиста, когда длинная команда завершается, например, с помощью make ; flasher . [53]

printf \\ 033c

Это сбросит консоль, аналогично команде resetв современных системах Linux; однако он должен работать даже в старых системах Linux и других (не Linux) вариантах UNIX.

В C [ править ]

#include  <stdio.h>int  main ( пусто ){ int  i ,  j ,  n ;  for  ( i  =  0 ;  i  <  11 ;  i ++ )  { for  ( j  =  0 ;  j  <  10 ;  j ++ )  { п  =  10 * я  +  j ; если  ( n  >  108 )  перерыв ; printf ( " \ 033 [% dm% 3d \ 033 [m" ,  n ,  n ); } printf ( " \ п " ); } возврат  0 ;}

Последовательности ввода терминала [ править ]

Нажатие специальных клавиш на клавиатуре, а также вывод множества последовательностей xterm CSI, DCS или OSC часто создает последовательность CSI, DCS или OSC, отправляемую с терминала на компьютер так, как если бы ее набрал пользователь.

При вводе ввода на терминале нажатия клавиш за пределами обычной области основной буквенно-цифровой клавиатуры могут быть отправлены на хост в виде последовательностей ANSI. Для клавиш, которые имеют эквивалентную функцию вывода, таких как клавиши курсора, они часто отражают выходные последовательности. Однако для большинства нажатий клавиш нет эквивалентной выходной последовательности для использования.

Существует несколько схем кодирования, и, к сожалению, большинство терминалов смешивают последовательности из разных схем, поэтому программное обеспечение хоста должно иметь возможность обрабатывать входные последовательности с использованием любой схемы. Чтобы усложнить дело, сами терминалы VT имеют две схемы ввода: нормальный режим и режим приложения, которые могут переключаться приложением.

(черновой раздел)

<char> -> символ<esc> <nochar> -> esc<esc> <esc> -> esc<esc> <char> -> нажатие Alt-клавиши или последовательность клавиш<esc> '[' <nochar> -> Alt- [<esc> '[' (<num>) (';' <num>) '~' -> последовательность клавишных кодов, <num> по умолчанию 1

Если символ завершения - '~', первое число должно присутствовать и является номером кода клавиши, второе число - необязательным значением модификатора. Если символ завершения - это буква, буква - это значение кода клавиши, а необязательный номер - это значение модификатора.

Значение модификатора по умолчанию равно 1, и после вычитания 1 это растровое изображение нажатых клавиш-модификаторов: Meta-Ctrl-Alt-Shift. Так, например, <esc> [4; 2 ~ Shift-End, <esc> [20 ~ функциональная клавиша 9, <esc> [5C - Ctrl-Right [ сомнительно ] .

vt последовательности:<esc> [1 ~ - Home <esc> [16 ~ - <esc> [31 ~ - F17<esc> [2 ~ - Вставить <esc> [17 ~ - F6 <esc> [32 ~ - F18<esc> [3 ~ - Удалить <esc> [18 ~ - F7 <esc> [33 ~ - F19<esc> [4 ~ - Конец <esc> [19 ~ - F8 <esc> [34 ~ - F20<esc> [5 ~ - PgUp <esc> [20 ~ - F9 <esc> [35 ~ - <esc> [6 ~ - PgDn <esc> [21 ~ - F10 <esc> [7 ~ - На главную <esc> [22 ~ - <esc> [8 ~ - Конец <esc> [23 ~ - F11 <esc> [9 ~ - <esc> [24 ~ - F12 <esc> [10 ~ - F0 <esc> [25 ~ - F13 <esc> [11 ~ - F1 <esc> [26 ~ - F14 <esc> [12 ~ - F2 <esc> [27 ~ - <esc> [13 ~ - F3 <esc> [28 ~ - F15 <esc> [14 ~ - F4 <esc> [29 ~ - F16 <esc> [15 ~ - F5 <esc> [30 ~ - xterm последовательности:<esc> [A - Вверх <esc> [K - <esc> [U -<esc> [B - Вниз <esc> [L - <esc> [V -<esc> [C - Вправо <esc> [M - <esc> [W -<esc> [D - Влево <esc> [N - <esc> [X -<esc> [E - <esc> [O - <esc> [Y -<esc> [F - End <esc> [1P - F1 <esc> [Z -<esc> [G - Клавиатура 5 <esc> [1Q - F2 <esc> [H - Home <esc> [1R - F3 <esc> [I - <esc> [1S - F4 <esc> [J - <esc> [T - 

<esc> [от A до <esc> [D такие же, как выходные последовательности ANSI. <num> обычно опускается, если никакие клавиши-модификаторы не нажаты, но большинство реализаций всегда выдают <num> для F1-F4. (черновой раздел)

Xterm имеет подробную страницу документации по различным схемам последовательности ввода с помощью функциональных клавиш и мыши с терминалов VT DEC и различных других терминалов, которые он эмулирует. [21] Томас Дики со временем добавил к нему большую поддержку; [54] он также ведет список ключей по умолчанию, используемых другими эмуляторами терминала для сравнения. [55]


  • На консоли Linux определенные функциональные клавиши генерируют последовательности формы . Последовательность CSI должна заканчиваться на .CSI [ char[
  • Старые версии Терминатора генерируются при нажатии клавиш F1 – F4 с модификаторами. Неправильное поведение было скопировано из терминала GNOME . [ необходима цитата ]SS3 1; modifiers char
  • xterm отвечает, если запрашивается позиция курсора и если клавиша F3 нажата с модификаторами, которые конфликтуют в случае row == 1. Этого можно избежать, используя ? приватный модификатор as , который будет отражен в ответе как .CSI row ; column RCSI 1 ; modifiers RCSI ? 6 nCSI ? row ; column R
  • многие терминалы добавляются ESCк любому символу, набранному с нажатой клавишей alt. Это создает неоднозначность для прописных букв и символов @[\]^_, которые образуют коды C1. [ требуется разъяснение ]
  • Konsole генерируется при нажатии клавиш F1 – F4 с модификаторами. [ требуется разъяснение ]SS3 modifiers char

См. Также [ править ]

  • Искусство ANSI
  • Управляющий персонаж
  • Усовершенствованный сборщик и средство записи атрибутов видео (AVATAR)
  • ISO / IEC JTC 1 / SC 2
  • Коды управления C0 и C1

Примечания [ править ]

  1. ^ Отображение экрана можно заменить, нарисовав все содержимое нового экрана внизу, прокрутив предыдущий экран достаточно, чтобы стереть весь старый текст. Пользователь будет видеть прокрутку, а аппаратный курсор останется в самом низу. В некоторых ранних пакетных файлах таким образом достигалось элементарное "полноэкранное" отображение.
  2. ^ Типичные цвета, которые используются при загрузке ПК и оставлении их в текстовом режиме, в котором используется таблица цветов с 16 элементами. Цвета в графических режимах EGA / VGA отличаются.
  3. ^ Встречается в Windows XP через Windows 8.1
  4. ^ До PowerShell 6
  5. ^ Консоль отладки, тема "Dark +"
  6. ^ Тема Кэмпбелла, используется в Windows 10 версии 1709. Также используется в PowerShell 6.
  7. ^ Для виртуальных терминалов из / etc / vtrgb.
  8. ^ На терминалах, основанных нааппаратном обеспечении, совместимом с CGA , таком как ANSI.SYS, работающем в DOS, этот цвет переднего плана нормальной интенсивности отображается как оранжевый. МониторыCGA RGBI содержат оборудование для изменения темно-желтого цвета на оранжево-коричневый за счет уменьшения зеленого компонента. См. Вкачестве примераэто искусство ANSI, заархивированное 25 июля 2011 года на Wayback Machine .

Ссылки [ править ]

  1. ^ a b «Стандартный ECMA-48: Функции управления для устройств ввода-вывода с отображением символов» (PDF) (Второе изд.). Ecma International . Август 1979 г. Краткая история.
  2. ^ Уильямс, Пол (2006). «Цифровые видеотерминалы» . VT100.net . Проверено 17 августа 2011 года .
  3. ^ Heathkit Company (1979). "Каталог Heathkit 1979" . Компания Heathkit. Архивировано из оригинального 13 января 2012 года . Проверено 4 ноября 2011 года .
  4. ^ «Отозванные FIPS, перечисленные по номеру» (PDF) . Национальный институт стандартов и технологий . 15 декабря 2016 г.
  5. ^ a b c d e f g h i j k l m n o p q "Стандартный ECMA-48: Функции управления для наборов кодированных символов" (PDF) (Пятое изд.). Ecma International . Июнь 1991 г.
  6. ^ Меффорд, Майкл (7 февраля 1989). "ANSI.com: Загрузите его здесь" . Журнал ПК . Проверено 10 августа 2011 года .
  7. ^ Кегель, Дэн; Ауэр, Эрик (28 февраля 1999). «Nansi и NNansi - драйверы ANSI для MS-DOS» . Веб-хостел Дэна Кегеля . Проверено 10 августа 2011 года .
  8. ^ "Руководство пользователя PTS-DOS 2000 Pro" (PDF) . Буггинген, Германия: Paragon Technology GmbH . 1999. Архивировано (PDF) из оригинала 12 мая 2018 года . Проверено 12 мая 2018 .
  9. ^ Гюнтер, Йенс; Эрнст, Тобиас (25 апреля 2004 г.) [1996]. Ellsässer, Вольфганг (ред.). «Inoffizielle deutschsprachige PTS-DOS-FAQ (PTS / FAQD)» [Неофициальный немецкий PTS-DOS FAQ] (на немецком языке) . Дата обращения 2 октября 2018 .
  10. ^ Интерактивная документация CCI Multiuser DOS 7.22 GOLD . Concurrent Controls, Inc. (CCI). 10 февраля 1997 г. HELP.HLP.
  11. ^ Худ, Джейсон (2005). «Обработка управляющих последовательностей ANSI для консольных программ Windows» . Домашняя страница Джейсона Гуда . Дата обращения 9 мая 2013 .
  12. ^ "colorama 0.2.5" . Индекс пакетов Python . Проверено 17 августа 2013 года .
  13. ^ взбесился. «Консольные виртуальные терминальные последовательности - консоль Windows» . docs.microsoft.com . Проверено 30 мая 2018 .
  14. ^ «Обновление Windows 10 Creators Update: что нового в Bash / WSL и консоли Windows» . Комментарий от ulrichb и ответ Рика Тернера.
  15. ^ Grehan, Oisin (4 февраля 2016). «Улучшения хоста консоли Windows 10 TH2 (v1511)» . Архивировано из оригинала 9 февраля 2016 года . Проверено 10 февраля +2016 .
  16. ^ «Справка PowerShell: о специальных символах» .
  17. ^ «Коды выхода принтера и терминала» . Краткое руководство по программированию Atari ST 68000 . Архивировано 20 сентября 2016 года . Проверено 22 июня 2020 .
  18. ^ "Определения команд принтера Amiga" . Коммодор . Проверено 10 июля 2013 года .
  19. ^ "Escape Sequence - OpenVMS Wiki" .
  20. ^ a b c d e f g h i j k l "Стандартный ECMA-35: Структура кода символа и методы расширения" (PDF) (Шестое изд.). Ecma International . 1994 г.
  21. ^ Б с д е е г ч я J к л м п о Moy, Эдвард; Гильдея, Стивен; Дики, Томас (2019). «Контрольные последовательности XTerm (ctlseqs)» . Невидимый остров .
  22. ^ «SCOSC - Сохранить текущую позицию курсора» . Информация для программиста видеотерминала VT510 . Дек .
  23. ^ «DECSLRM - установить левое и правое поля» . Информация для программиста видеотерминала VT510 . Дек .
  24. ^ «SCORC - Восстановить сохраненное положение курсора» . Информация для программиста видеотерминала VT510 . Дек .
  25. ^ Конрад Ирвин (апрель 2013 г.). "режим вставки в скобках" . cirw.in .
  26. ^ Дики, Томас. «Часто задаваемые вопросы по XTerm: почему экран не очищается при запуске vi?» . Невидимый остров . Проверено 31 января 2021 года .
  27. ^ a b "console_codes (4) - страница руководства Linux" . man7.org . Проверено 23 марта 2018 года .
  28. ^ a b "экран (HW)" . SCO OpenServer Release 5.0.7 Руководство . 11 февраля 2003 г.
  29. ^ «Ошибка 791596 - Мысли о слабости (SGR 2)» . bugzilla.gnome.org .
  30. ^ a b c "Фигурные и цветные подчеркивания (# 6382) · Проблемы · Джордж Нахман / iterm2" . GitLab .
  31. ^ a b c «Расширения протокола xterm» . Китти документация . Дата обращения 1 июля 2020 .
  32. ^ "console-termio-realizer" . jdebp.uk .
  33. ^ "console_codes (4)" . Руководство программиста Linux . 5.10. Проект man-страниц Linux .
  34. ^ a b «mintty / mintty: текстовые атрибуты и отображение» . GitHub .
  35. ^ Изменено с 0,0205 в июле 2004 г. «Патч № 192 - 2004/7/12 - XFree86 4.4.99.9» .
  36. ^ Изменено с 0, 0, 255 в июле 2004 г. "Патч № 192 - 2004/7/12 - XFree86 4.4.99.9" .
  37. ^ a b «Информационные технологии T.416 - Архитектура открытого документа (ODA) и формат обмена: Архитектура символьного содержимого» .
  38. ^ "color-spaces.pl (копия 256colors2.pl из xterm от 1999-07-11)" . KDE. 6 декабря 2006 г.[ постоянная мертвая ссылка ]
  39. ^ "README.moreColors" . KDE. 22 апреля 2010 г.
  40. ^ «Отчет об ошибке и исправления libvte: Поддержка 16 миллионов цветов» . GNOME Bugzilla. 4 апреля 2014 . Проверено 5 июня +2016 .
  41. ^ «mintty / mintty: контрольные последовательности» . GitHub .
  42. ^ Коблингер, Эгмонт. «Гиперссылки (также известные как HTML-привязки) в эмуляторах терминала» . GitHub Gists .
  43. ^ "console_codes - управляющие и управляющие последовательности консоли Linux" . Руководство программиста Linux .
  44. ISO / TC 97 / SC 2 (30 декабря 1976 г.). Сброс в исходное состояние (RIS) (PDF) . ITSCJ / IPSJ . ISO-IR -35.
  45. ^ Цифровой . «DECSC - Сохранить курсор» . Информация для программиста видеотерминала VT510 .
  46. ^ Цифровой . «DECSC - Сохранить курсор» . Информация для программиста видеотерминала VT510 .
  47. ^ ANSI Escape последовательности - VT100 / VT52
  48. ^ ANSI Escape последовательности - VT100 / VT52
  49. ^ Цифровой . «DECSWL - линия одинарной ширины, одинарной высоты» . Информация для программиста видеотерминала VT510 .
  50. ^ Цифровой . «DECDWL - линия двойной ширины, линия одинарной высоты» . Информация для программиста видеотерминала VT510 .
  51. ^ «Глава 9. Системные подсказки» . debian.org .
  52. ^ «VT100.net: Руководство пользователя цифрового VT100» . Проверено 19 января 2015 .
  53. ^ «bash - Как получить уведомление, когда мои команды выполнены - Спросите другое» . Проверено 19 января 2015 .
  54. ^ Дики, Томас. «XTerm FAQ: Сравнение версий, подсчет элементов управления» . Невидимый остров . Проверено 25 января 2020 года .
  55. ^ Дики, Томас (2016). «Таблица функциональных клавиш для XTerm и других эмуляторов терминала» . Невидимый остров . Проверено 25 января 2020 года .

Внешние ссылки [ править ]

  • Стандартный ECMA-48, Функции управления для наборов кодированных символов . ( 5-е издание, июнь 1991 г. ), Европейская ассоциация производителей компьютеров, Женева, 1991 г. (также опубликовано ISO и IEC как стандарт ISO / IEC 6429)
  • vt100.net DEC Документы
  • "ANSI.SYS - escape-последовательности для эмуляции терминала ANSI" . Архивировано из оригинала 6 февраля 2006 года . Проверено 22 февраля 2007 года .
  • Xterm / Escape-последовательности
  • Последовательности AIXterm / Escape
  • Коллекция управляющих последовательностей для терминалов, которые не совсем соответствуют ECMA-48 и другим.
  • Последовательности выхода ANSI
  • Рек. МСЭ-Т. МСЭ-Т T.416 (03/93) Информационные технологии - Архитектура открытого документа (ODA) и формат обмена: Архитектуры символьного содержимого