stringtranslate.com

Escape-код ANSI

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

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

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

История

Почти все производители видеотерминалов добавили escape-последовательности, специфичные для конкретного поставщика, для выполнения таких операций, как размещение курсора в произвольных позициях на экране. Одним из примеров является терминал 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-битный стандарт, на основе которого произошел ISO 646. . Название «Escape-последовательность ANSI» датируется 1979 годом, когда ANSI принял ANSI X3.64. Комитет ANSI X3L2 сотрудничал с комитетом ECMA TC 1 для разработки практически идентичных стандартов. Эти два стандарта были объединены в международный стандарт ISO 6429. [1] В 1994 году ANSI отозвал свой стандарт в пользу международного стандарта.

Терминал DEC VT100
Видеотерминал DEC VT100.

Первым популярным видеотерминалом, поддерживающим эти последовательности, был 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 несколько раз обновлялся и в настоящее время находится в пятой редакции, начиная с 1991 года. Он также принят ISO и IEC в качестве стандарта ISO/IEC 6429 . [5] Версия принята в качестве японского промышленного стандарта как JIS X 0211 .

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

Поддержка платформы

Эмулятор терминала Xterm
Эмулятор терминала Xterm.

В начале 1980-х годов большое количество программного обеспечения напрямую использовало эти последовательности для обновления изображений на экране. Сюда входило все, что было на VMS (предполагалось наличие терминалов Dec), большая часть программного обеспечения, предназначенного для переносимости на домашние компьютеры CP/M , и даже множество программ Unix, поскольку их было проще использовать, чем библиотеки termcap, например примеры сценариев оболочки ниже в Эта статья.

Эмуляторы терминала для связи с удаленными машинами почти всегда реализуют escape-коды ANSI. Сюда входит все, что написано для связи с системами досок объявлений на домашних и персональных компьютерах. В Unix эмуляторы терминала, такие как xterm, также могут взаимодействовать с программным обеспечением, работающим на той же машине, и, таким образом, программное обеспечение, работающее в X11 под эмулятором терминала, может предполагать возможность записи этих последовательностей.

По мере того, как компьютеры становились более мощными, их начали поддерживать даже встроенные дисплеи, что позволяло переносить программное обеспечение между системами CP/M. Были попытки расширить escape-последовательности для поддержки принтеров [6] и в качестве раннего PDF-подобного формата хранения документов — архитектуры открытого документа . [ нужна цитата ]

ДОС и Windows

Огромным ударом по популярности последовательностей стало то, что IBM PC, представленный в 1983 году, не поддерживал их для локальных программ (это было обычным явлением для домашних компьютеров «все в одном», но редко для машин такой сложности). Лишь несколько управляющих символов ( BEL , CR , LF , BS ) интерпретировались базовым BIOS, что делало практически невозможным выполнение любого полноэкранного приложения. Любые эффекты отображения приходилось выполнять с помощью вызовов BIOS, которые, как известно, были очень медленными, или путем прямого управления аппаратным обеспечением IBM PC. Это сделало любое интересное программное обеспечение непереносимым и привело к необходимости дублировать детали аппаратного обеспечения дисплея в ПК-клонах .

В DOS 2.0 появилась возможность добавлять драйвер устройства для escape-последовательностей ANSI: ANSI.SYS . Медлительность и тот факт, что он не был установлен по умолчанию, заставляли программное обеспечение редко им пользоваться; вместо этого приложения продолжали напрямую манипулировать оборудованием, чтобы получить необходимое текстовое отображение. [ нужна цитация ] ANSI.SYS и подобные драйверы продолжали работать в Windows 9x вплоть до Windows Me , а также в системах, производных от NT, для 16-битных устаревших программ, выполняющихся под NTVDM .

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

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

В 2016 году Microsoft выпустила обновление Windows 10 версии 1511 , в котором неожиданно реализована поддержка escape-последовательностей ANSI, спустя более двух десятилетий после дебюта Windows NT. [12] Это было сделано вместе с подсистемой Windows для Linux , что позволило Unix-подобному программному обеспечению на базе терминала использовать последовательности в консоли Windows. По умолчанию оно отключено, но в Windows PowerShell 5.1 оно включено. PowerShell 6 позволил встроить необходимый символ ESC в строку с помощью `e. [13]

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

Описание

Коды управления C0

Почти все пользователи берут на себя некоторые функции некоторых однобайтовых символов. Первоначально определенный как часть ASCII, набор управляющих кодов C0 по умолчанию теперь определен в ISO 6429 (ECMA-48), что делает его частью того же стандарта, что и набор C1, вызываемый escape-последовательностями ANSI (хотя ISO 2022 допускает использование ISO 6429). Набор C0 будет использоваться без набора C1 ISO 6429, и наоборот , при условии, что 0x1B всегда соответствует ESC). Это используется для сокращения объема передаваемых данных или для выполнения некоторых функций, недоступных из escape-последовательностей:

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

Fe Escape-последовательности

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

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

Последовательности CSI (представитель управляющей последовательности)

Для команд Control Sequence Introducer, или CSI, за символом ESC [(написанным как \e[или \033[на нескольких языках программирования) следует любое количество (в том числе отсутствие) «байтов параметров» в диапазоне 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), устанавливает атрибуты отображения. В одной последовательности можно задать несколько атрибутов, разделенных точкой с запятой. [24] Каждый атрибут отображения остается в силе до тех пор, пока следующее появление SGR не сбросит его. [5] Если коды не указаны, это рассматривается как (сброс/нормальный).CSI n mCSI mCSI 0 m

Цвета

3-битные и 4-битные

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

В таблице ниже показано несколько примеров того, как стандарт VGA и современные эмуляторы терминала преобразуют 4-битные цветовые коды в 24-битные цветовые коды.

8-битный

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

ЭСК[38;5; ⟨n⟩ m Выберите цвет переднего плана, где n — число из таблицы ниже.ЭСК[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 шага.

Информационная технология ITU T.416 - Архитектура открытого документа (ODA) и формат обмена: Архитектура символьного содержимого [36] вместо этого использует «:» в качестве символов-разделителей:

ESC[38:5: ⟨n⟩ m Выберите цвет переднего плана, где n — число из таблицы ниже.ESC[48:5: ⟨n⟩ m Выбор цвета фона

Также существовало похожее, но несовместимое 88-цветное кодирование с использованием той же escape-последовательности, которое можно увидеть в rxvtи xterm-88color. О схеме мало что известно, кроме цветовых кодов. Он использует цветной куб 4×4×4.

24-битный

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

ЭСК[38;2; ⟨р⟩ ; ⟨грамм⟩ ; ⟨b⟩ m Выбор цвета переднего плана RGBЭСК[48;2; ⟨р⟩ ; ⟨грамм⟩ ; ⟨b⟩ m Выбор цвета фона RGB

Синтаксис, вероятно, основан на архитектуре открытых документов (ODA) ITU T.416 и формате обмена: архитектуры символьного контента [36] , который был принят как ISO/IEC 8613-6, но в конечном итоге потерпел неудачу с коммерческой точки зрения. [ нужна цитация ] Версия ODA более сложна и, следовательно, несовместима:

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

Вариант ITU-RGB поддерживается xterm, при этом идентификатор цветового пространства и параметры допуска игнорируются. Более простая схема с использованием точек с запятой изначально встречается в Konsole. [16] : Могу ли я установить цвет по его номеру? 

Переменные среды Unix, относящиеся к поддержке цвета

Прежде чем termcap и terminfo смогли указать поддержку цветов, библиотека S-Lang использовалась $COLORTERMдля указания того, может ли эмулятор терминала вообще использовать цвета, а позже добавляла значения, указывающие, поддерживает ли она 24-битный цвет. [41] [42] Эта система, хотя и плохо документированная, стала достаточно распространенной, чтобы Fedora и RHEL рассмотрели возможность ее использования в качестве более простого и универсального механизма обнаружения по сравнению с запросом к обновленным библиотекам. [43]

Некоторые эмуляторы терминала (urxvt, konsole) настроены $COLORFGBGсообщать цветовую схему терминала (в основном светлый или темный фон). Такое поведение возникло в S-Lang [42] и используется vim. Gnome-terminal отказывается добавлять такое поведение, поскольку синтаксис значения не согласован, значение не может быть изменено при изменении палитры во время выполнения, а более «правильные» последовательности xterm OSC 4/10/11 уже существуют. [44]

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

Большинство последовательностей команд операционной системы были определены Xterm, но многие из них также поддерживаются другими эмуляторами терминала. По историческим причинам Xterm может завершать команду как BEL(0x07), так и стандартно ST(0x9C или 0x1B 0x5C). [16] Например, Xterm позволяет устанавливать заголовок окна с помощью ESC ]0;this is the window title BEL.

Расширением, отличным от xterm, является гиперссылка ESC ]8;;link STс 2017 года, используемая VTE, [45] [ обсуждение ] iTerm2, [45] и mintty, [46] среди других. [47]

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

Fs Escape-последовательности

Если ESCза символом следует байт в диапазоне 0x60—0x7E , escape-последовательность имеет тип . Этот тип используется для функций управления, индивидуально зарегистрированных в реестре ISO-IR . [49] Их таблица приведена в ISO/IEC 2022 .Fs

Escape-последовательности Fp

Если ESCза параметром следует байт в диапазоне 0x30—0x3F , escape-последовательность имеет тип , который выделен для шестнадцати функций управления частного использования. [15] : 6.5.3 Fp

nF Escape-последовательности

Если ESCза символом следует байт в диапазоне 0x20—0x2F , escape-последовательность имеет тип . За указанным байтом следует любое количество дополнительных байтов в этом диапазоне, а затем байт в диапазоне 0x30-0x7E . Эти escape-последовательности подразделяются на подкатегории по двум младшим битам первого байта, например, «тип » для последовательностей, где первый байт равен 0x22 ; и от того, находится ли последний байт в диапазоне 0x30–0x3F , что указывает на частное использование (например, «тип ») или нет (например, «тип »). [15] : 13.2.1 nF2F2Fp2Ft

Большинство последовательностей nFtпредназначены для изменения текущего набора символов и перечислены в ISO/IEC 2022 . Некоторые другие:

Если первый байт равен «#», общедоступные последовательности зарезервированы для дополнительных зарегистрированных в ISO-IR индивидуальных функций управления. [15] : 6.5.2  В настоящее время такие последовательности не зарегистрированы. [49] Последовательности типов 3Fp(в том числе начинающиеся с «#») доступны для функций управления частного использования. [15] : 6.5.3 

Примеры

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

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, которые поддерживаются более широко.

В сценариях оболочки

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

лс --цвет

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

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

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

flasher () { while true; do printf \\e[?5h \\e[?5l; sleep 0.1; printf ; read -s -n1 -t1 && break; done; }

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

printf \ 033c 

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

В С

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

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

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

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

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

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

<символ> -> символ<esc> <nochar> -> esc<esc> <esc> -> esc<esc> <char> -> Alt-клавиша или последовательность клавиш<esc> '[' <nochar> -> Alt-[<esc> '[' (<модификатор>) <char> -> последовательность кодов клавиш, <модификатор> — десятичное число, по умолчанию равное 1 (xterm)<esc> '[' (<код ключа>) (';'<модификатор>) '~' -> последовательность кода ключа, <код ключа> и <модификатор> являются десятичными числами и по умолчанию равны 1 (vt)

Если завершающим символом является «~», первое число должно присутствовать и является номером кода клавиши, второе число — необязательное значение модификатора. Если завершающим символом является буква, эта буква является значением кода клавиши, а необязательное число — значением модификатора.

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

Другими словами, модификатор представляет собой сумму следующих чисел:

последовательности vt:<esc>[1~ - Домой <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 - Конец <esc>[1P - F1 <esc>[Z -<esc>[G — Клавиатура 5 <esc>[1Q — F2 <esc>[H - Домой <esc>[1R - F3 <esc>[I - <esc>[1S - F4 <esc>[J - <esc>[T -

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

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

Смотрите также

Примечания

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

Рекомендации

  1. ^ ab «Стандарт ECMA-48: Функции управления для устройств ввода-вывода символов» (PDF) (Второе изд.). Экма Интернешнл . Август 1979 года. Краткая история.
  2. ^ Уильямс, Пол (2006). «Цифровые видеотерминалы». VT100.net . Проверено 17 августа 2011 г.
  3. ^ Компания Heathkit (1979). «Каталог Heathkit 1979». Компания Хиткит. Архивировано из оригинала 13 января 2012 года . Проверено 4 ноября 2011 г.
  4. ^ «Изъято из списка FIPS по номеру» (PDF) . Национальный институт стандартов и технологий . 15 декабря 2016 года . Проверено 2 января 2022 г.
  5. ^ abcdefghijklmno «Стандарт ECMA-48: Функции управления для наборов кодированных символов» (PDF) (Пятое изд.). Экма Интернешнл . Июнь 1991 года.
  6. ^ «Определения команд принтера Amiga» . Коммодор . Проверено 10 июля 2013 г.
  7. ^ «Руководство пользователя PTS-DOS 2000 Pro» (PDF) . Буггинген, Германия: Paragon Technology GmbH . 1999. Архивировано (PDF) из оригинала 12 мая 2018 года . Проверено 12 мая 2018 г.
  8. ^ Гюнтер, Йенс; Эрнст, Тобиас (25 апреля 2004 г.) [1996]. Эллсэссер, Вольфганг (ред.). «Inoffizielle deutschsprachige PTS-DOS-FAQ (PTS/FAQD)» [Неофициальные немецкие часто задаваемые вопросы по PTS-DOS] (на немецком языке) . Проверено 2 октября 2018 г.
  9. ^ Интернет-документация CCI Multiuser DOS 7.22 GOLD . Concurrent Controls, Inc. (CCI). 10 февраля 1997 г. HELP.HLP.
  10. ^ Худ, Джейсон (2005). «Обработка escape-последовательностей ANSI для консольных программ Windows». Домашняя страница Джейсона Худа . Проверено 9 мая 2013 г.
  11. ^ "Колорама · PyPI" . Индекс пакетов Python . Проверено 27 февраля 2022 г.
  12. ^ немного сумасшедший. «Последовательности виртуального терминала консоли — консоль Windows». docs.microsoft.com . Проверено 30 мая 2018 г.
  13. ^ «Справка PowerShell: о специальных символах» . 12 января 2023 г.
  14. ^ «Дорожная карта консоли Windows и экосистемы терминалов» . Майкрософт. 2018 . Проверено 13 марта 2021 г. это включает в себя отказ от классического пользовательского интерфейса хоста консоли из его положения по умолчанию в пользу Windows Terminal, ConPTY и последовательностей виртуального терминала.
  15. ^ abcdefghi «Стандарт ECMA-35: структура кода символов и методы расширения» (PDF) (шестое изд.). Экма Интернешнл . 1994.
  16. ^ abcdefghijklmn Мой, Эдвард; Гильдеа, Стивен; Дики, Томас (2019). «Управляющие последовательности XTerm (ctlseqs)». Невидимый остров .
  17. ^ Фрэнк да Круз; Кристин Джаноне (1997). Использование Си-Кермита. Цифровая пресса. п. 278. ИСБН 978-1-55558-164-0.
  18. ^ «SCOSC — сохранить текущую позицию курсора» . Информация о программаторе видеотерминала VT510 . ДЕК .
  19. ^ «DECSLRM — установите левое и правое поля» . Информация о программаторе видеотерминала VT510 . ДЕК .
  20. ^ «SCORC — восстановить сохраненную позицию курсора» . Информация о программаторе видеотерминала VT510 . ДЕК .
  21. ^ Мой, Эдвард; Гильдеа, Стивен; Дикки, Томас. «Управляющие последовательности XTerm». Функции, использующие CSI, упорядоченные по последнему символу(ам) . Проверено 4 февраля 2022 г.
  22. ^ Конрад Ирвин (апрель 2013 г.). «режим вставки в скобках». cirw.in. _
  23. ^ Мой, Эдвард; Гильдеа, Стивен; Дикки, Томас. «Управляющие последовательности XTerm». Режим вставки в квадратных скобках . Проверено 4 февраля 2022 г.
  24. ^ «console_codes(4) — страница руководства Linux» . man7.org . Проверено 23 марта 2018 г.
  25. ^ ab "экран (HW)". Руководство по SCO OpenServer версии 5.0.7 . 11 февраля 2003 г.
  26. ^ «Ошибка 791596 — Мысли о обмороке (SGR 2)» . bugzilla.gnome.org .
  27. ^ abc «Кудрявые и цветные подчеркивания (#6382) · Проблемы · Джордж Нахман / iterm2». ГитЛаб . 11 декабря 2017 г.
  28. ^ abc «Расширения протокола xterm». документация по котенку . Проверено 1 июля 2020 г.
  29. ^ «Кудрявые и цветные подчеркивания» . Система отслеживания ошибок KDE . 27 августа 2022 г.
  30. ^ "консоль-термиореализатор" . jdebp.uk .
  31. ^ "console_codes(4)". Руководство программиста Linux . 5.10. Проект справочных страниц Linux .
  32. ^ ab «mintty/mintty: Атрибуты текста и рендеринг». Гитхаб .
  33. ^ «Ярлык по умолчанию в Windows переназначает цвета ANSI 35,36 · Проблема № 4266 · PowerShell/PowerShell». Гитхаб . Проверено 21 декабря 2022 г.
  34. ^ Изменено с 0, 0, 205 в июле 2004 г. «Патч № 192 – 2004/7/12 – XFree86 4.4.99.9».
  35. ^ Изменено с 0, 0, 255 в июле 2004 г. «Патч № 192 – 2004/7/12 – XFree86 4.4.99.9».
  36. ^ abc «Информационные технологии T.416 - Архитектура открытого документа (ODA) и формат обмена: Архитектура символьного контента».
  37. ^ "color-spaces.pl (копия 256colors2.pl из xterm от 11 июля 1999 г.)" . КДЕ. 6 декабря 2006 г.[ постоянная мертвая ссылка ]
  38. ^ "README.moreColors" . КДЕ. 22 апреля 2010 г.
  39. ^ «Отчет об ошибках и исправлениях libvte: поддержка 16 миллионов цветов» . ГНОМ Багзилла. 4 апреля 2014 года . Проверено 5 июня 2016 г.
  40. ^ «Как включить поддержку 24-битного истинного цвета в терминале Gnome?».
  41. ^ "Midnight Commander: lib/tty/color-slang.c" . Фосси .
  42. ^ аб Дики, Томас Э. (2017). «NCURSES — комментарии к S-Lang». invisible-island.net .
  43. ^ «Функции/256 цветных терминалов — Wiki проекта Fedora» . Проект Федора . Архивировано из оригинала 4 октября 2012 года.
  44. ^ «Ошибка 733423 — Установите переменную среды COLORFGBG для автоматического определения цвета» . bugzilla.gnome.org .
  45. ^ аб Коблингер, Эгмонт. «Гиперссылки (также известные как HTML-подобные якоря) в эмуляторах терминала». GitHub Gists .
  46. ^ «mintty/mintty: управляющие последовательности» . Гитхаб .
  47. ^ Коблингер, Эгмонт. «Внедрение OSC 8 в эмуляторах терминала». Гитхаб .
  48. ^ «console_codes — escape-последовательности и управляющие последовательности консоли Linux» . Руководство программиста Linux .
  49. ^ ab ISO-IR: Международный реестр наборов кодированных символов ISO/IEC для использования с escape-последовательностями (PDF) . ITSCJ/ IPSJ . Проверено 12 мая 2023 г.
  50. ^ АБ Цифровой . «DECSC — Сохранить курсор». Информация о программаторе видеотерминала VT510 .
  51. ^ ab Escape-последовательности ANSI - VT100 / VT52, заархивировано из оригинала 27 февраля 2009 г. , получено 21 августа 2020 г.
  52. ^ Цифровой . «DECSWL — линия одинарной ширины и одинарной высоты». Информация о программаторе видеотерминала VT510 .
  53. ^ Цифровой . «DECDWL — линия двойной ширины и одинарной высоты». Информация о программаторе видеотерминала VT510 .
  54. ^ «Глава 9. Системные советы» . debian.org .
  55. ^ «VT100.net: Руководство пользователя цифрового VT100» . Проверено 19 января 2015 г.
  56. ^ «bash – Как получить уведомление, когда мои команды выполнены – Спросите другое» . Проверено 19 января 2015 г.
  57. ^ Дики, Томас. «Часто задаваемые вопросы по XTerm: сравнение версий путем подсчета элементов управления». Невидимый остров . Проверено 25 января 2020 г.
  58. ^ Дики, Томас (2016). «Таблица функциональных клавиш для XTerm и других эмуляторов терминала». Невидимый остров . Проверено 25 января 2020 г.
  59. ^ «CSI u — Документация — iTerm2 — Замена терминала macOS» . iTerm2 . Проверено 15 августа 2023 г.

Внешние ссылки