Escape-последовательности 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-битный стандарт, из которого произошел ISO 646. Название «последовательность управления 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» с различной степенью совместимости на многих других брендах. Популярность этих режимов постепенно привела к появлению все большего количества программного обеспечения (особенно систем досок объявлений и других онлайн-сервисов ), предполагающего, что управляющие последовательности работают, что привело к тому, что почти все новые терминалы и программы-эмуляторы поддерживали их.
В 1981 году ANSI X3.64 был принят для использования в правительстве США публикацией FIPS 86. Позднее правительство США прекратило дублирование отраслевых стандартов, поэтому публикация FIPS 86 была отозвана. [4]
ECMA-48 обновлялся несколько раз и в настоящее время находится в пятом издании, выпущенном в 1991 году. Он также принят ISO и IEC в качестве стандарта ISO/IEC 6429. [ 5] Одна из версий принята в качестве японского промышленного стандарта под названием JIS X 0211 .
Связанные стандарты включают ITU T.61 , стандарт Teletex , и ISO/IEC 8613 , стандарт Open Document Architecture (в основном ISO/IEC 8613-6 или ITU T.416). Эти две системы разделяют много кодов escape с системой ANSI, с расширениями, которые не обязательно имеют смысл для компьютерных терминалов. Обе системы быстро вышли из употребления, но ECMA-48 отмечает расширения, используемые в них, как зарезервированные.
В начале 1980-х годов большое количество программного обеспечения напрямую использовало эти последовательности для обновления экранных дисплеев. Это включало все на VMS (что предполагало терминалы DEC), большую часть программного обеспечения, разработанного для переносимости на домашние компьютеры CP/M , и даже много программного обеспечения Unix, поскольку его было проще использовать, чем библиотеки termcap, например, примеры сценариев оболочки ниже в этой статье.
Терминальные эмуляторы для связи с удаленными машинами почти всегда реализуют escape-коды ANSI. Это включает в себя все, что написано для связи с системами досок объявлений на домашних и персональных компьютерах. В Unix терминальные эмуляторы, такие как xterm, также могут взаимодействовать с программным обеспечением, работающим на той же машине, и, таким образом, программное обеспечение, работающее в X11 под терминальным эмулятором, может предполагать возможность записи этих последовательностей.
По мере того, как компьютеры становились мощнее, их стали поддерживать даже встроенные дисплеи, что позволило переносить программное обеспечение между системами CP/M. Были попытки расширить escape-последовательности для поддержки принтеров [6] и как раннего формата хранения документов, похожего на PDF, Open Document Architecture . [ необходима цитата ]
IBM PC, представленный в 1983 году, не поддерживал эти или какие-либо другие escape-последовательности для обновления экрана. Только несколько управляющих символов ( BEL , CR , LF , BS ) интерпретировались базовым BIOS. Любые эффекты отображения приходилось делать с помощью вызовов BIOS, которые были печально известны своей медлительностью, или путем прямого манипулирования оборудованием IBM PC. Это делало любое интересное программное обеспечение непереносимым и приводило к необходимости дублировать детали оборудования дисплея в PC Clones .
DOS версии 2.0 включала дополнительный драйвер устройства под названием ANSI.SYS . Низкая производительность и тот факт, что он не устанавливался по умолчанию, означали, что программное обеспечение редко (если вообще когда-либо) использовало его.
Консоль Windows не поддерживала escape-последовательности ANSI, и Microsoft не предоставила никакого метода для их включения. Некоторые замены, такие как TCC (ранее 4NT) от JP Software, ANSI.COM от Michael J. Mefford, ANSICON [7] от Jason Hood и ConEmu от Maximus5, включали escape-последовательности ANSI. Программное обеспечение, такое как пакет Python colorama [8] или Cygwin, изменяло текст в процессе его отправки на консоль, извлекая escape-последовательности ANSI и эмулируя их вызовами Windows.
В 2016 году Microsoft выпустила обновление Windows 10 версии 1511 , в котором неожиданно реализована поддержка escape-последовательностей ANSI, спустя более чем три десятилетия после дебюта Windows. [9] Это было сделано вместе с подсистемой Windows для Linux , по-видимому, чтобы позволить терминальному программному обеспечению на основе Unix использовать консоль Windows. Windows PowerShell 5.1 включила это по умолчанию, а PowerShell 6 позволила встроить необходимый символ ESC в строку с помощью `e
. [10]
Windows Terminal , представленный в 2019 году, поддерживает последовательности по умолчанию, и Microsoft намерена заменить Windows Console на Windows Terminal. [11]
Почти все пользователи предполагают некоторые функции некоторых однобайтовых символов. Первоначально определенный как часть ASCII, набор управляющих кодов C0 по умолчанию теперь определен в ISO 6429 (ECMA-48), что делает его частью того же стандарта, что и набор C1, вызываемый escape-последовательностями ANSI (хотя ISO 2022 позволяет использовать набор ISO 6429 C0 без набора ISO 6429 C1, и наоборот , при условии, что 0x1B всегда является ESC). Это используется для сокращения объема передаваемых данных или для выполнения некоторых функций, которые недоступны из escape-последовательностей:
Escape-последовательности различаются по длине. Общий формат для escape-последовательности, соответствующей ANSI, определен в ANSI X3.41 (эквивалент ECMA-35 или ISO/IEC 2022). [12] : 13.1 Escape-последовательности состоят только из байтов в диапазоне 0x20—0x7F (все неуправляющие символы ASCII) и могут быть проанализированы без просмотра вперед. Поведение, когда управляющий символ, байт с установленным старшим битом или байт, который не является частью какой-либо допустимой последовательности, встречается до конца, не определено.
Если за ESC следует байт в диапазоне от 0x40 до 0x5F, то escape-последовательность имеет тип Fe
. Ее интерпретация делегируется применимому стандарту управляющего кода C1 . [12] : 13.2.1 Соответственно, все escape-последовательности, соответствующие управляющим кодам C1 из ANSI X3.64 / ECMA-48, следуют этому формату. [5] : 5.3.a
Стандарт гласит, что в 8-битных средах функции управления, соответствующие управляющим Fe
последовательностям типа (из набора управляющих кодов 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 ), но таким образом не экономится место.
Для команд 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
. [5] : 5.4.2 Отсутствующие числа обрабатываются как 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, немедленно прервать ее или игнорировать ее остальную часть. [ необходима цитата ]
Управляющая последовательность , называемая Select Graphic Rendition (SGR), устанавливает атрибуты отображения. Несколько атрибутов могут быть установлены в одной и той же последовательности, разделенные точкой с запятой. [21] Каждый атрибут отображения остается в силе до тех пор, пока следующее появление SGR не сбросит его. [5] Если коды не указаны, рассматривается как (сброс / нормальный).CSI n m
CSI m
CSI 0 m
В исходной спецификации было всего 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-битные цветовые коды.
Поскольку таблицы поиска на 256 цветов стали обычным явлением на графических картах, были добавлены управляющие последовательности для выбора из предопределенного набора из 256 цветов: [ необходима ссылка ]
ESC[38;5; ⟨n⟩ m Выберите цвет переднего плана, где n — число из таблицы ниже.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) и формат обмена: Архитектуры символьного контента» [34] в качестве разделительных символов используются «:»:
ESC[38:5: ⟨n⟩ m Выберите цвет переднего плана, где n — число из таблицы ниже.ESC[48:5: ⟨n⟩ m Выберите цвет фона
Также существовала похожая, но несовместимая 88-цветная кодировка с использованием той же escape-последовательности, которая была замечена в rxvt
и xterm-88color
. О схеме мало что известно, кроме цветовых кодов. Она использует цветовой куб 4×4×4.
Поскольку графические карты "true color" с 16-24 битами цвета стали обычным явлением, приложения начали поддерживать 24-битные цвета. Эмуляторы терминалов, поддерживающие установку 24-битных цветов переднего плана и фона с помощью escape-последовательностей, включают Xterm, [13] Konsole от KDE , [35] [36] и iTerm, а также все терминалы на основе libvte, [37] включая GNOME Terminal . [38]
ESC[38;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m Выбор цвета переднего плана RGBESC[48;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m Выбор цвета фона RGB
Синтаксис, скорее всего, основан на открытой архитектуре документов (ODA) T.416 МСЭ и формате обмена: архитектуры символьного контента, [34] который был принят как ISO/IEC 8613-6, но в конечном итоге оказался коммерчески неудачным. [ необходима цитата ] Версия ODA более сложная и, следовательно, несовместимая:
ESC[38:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨ CS допуск ⟩ : ⟨Color-Space, связанный с допуском: 0 для "CIELUV"; 1 для "CIELAB"⟩ m Выбор цвета переднего плана RGBESC[48:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨CS-допуск⟩ : ⟨Color-Space, связанный с допуском: 0 для "CIELUV"; 1 для "CIELAB"⟩ m Выберите цвет фона RGB
Вариант ITU-RGB поддерживается xterm, при этом параметры идентификатора цветового пространства и допуска игнорируются. Более простая схема с использованием точек с запятой изначально находится в Konsole. [13] : Могу ли я задать цвет по его номеру?
Вместо того, чтобы использовать поддержку цвета в termcap и terminfo, представленную в SVr3.2 (1987), [39] библиотека S-Lang (версия 0.99-32, июнь 1996) использовала отдельную переменную среды $COLORTERM
для указания того, может ли эмулятор терминала вообще использовать цвета, а позже добавила значения для указания того, поддерживает ли он 24-битный цвет. [40] [41] Эта система, хотя и плохо документированная, стала достаточно распространенной, чтобы Fedora и RHEL могли рассмотреть возможность ее использования в качестве более простого и универсального механизма обнаружения по сравнению с запросом обновленных библиотек. [42]
Некоторые эмуляторы терминала (urxvt, konsole) настроены $COLORFGBG
на сообщение цветовой схемы терминала (в основном светлый или темный фон). Это поведение возникло в S-Lang [41] и используется vim. Gnome-terminal отказывается добавлять это поведение, поскольку синтаксис для значения не согласован, значение не может быть изменено при изменении палитры во время выполнения, и более «правильные» последовательности xterm OSC 4/10/11 уже существуют. [43]
Большинство последовательностей команд операционной системы были определены Xterm, но многие из них также поддерживаются другими эмуляторами терминала. По историческим причинам Xterm может заканчивать команду как BEL(0x07), так и стандартными ST
(0x9C или 0x1B 0x5C). [13] Например, Xterm позволяет задать заголовок окна с помощью ESC ]0;this is the window title BEL
.
Расширение, не относящееся к xterm, — это гиперссылка, ESC ]8;;link ST
с 2017 года используемая VTE, [44] [ обсудить ] iTerm2, [44] и mintty, [45] среди прочих. [46]
Консоль Linux использует ESC ] P n rr gg bb
для изменения палитры, которая, если жестко закодирована в приложении, может повесить другие терминалы. [47] Однако добавление ST
будет проигнорировано Linux и сформирует правильную, игнорируемую последовательность для других терминалов. [ необходима цитата ]
Если ESC
за следует байт в диапазоне 0x60—0x7E , то escape-последовательность имеет тип . Этот тип используется для функций управления, индивидуально зарегистрированных в реестре ISO-IR . [48] Таблица этих функций приведена в ISO/IEC 2022 .Fs
Если ESC
за следует байт в диапазоне 0x30—0x3F , то escape-последовательность имеет тип , который выделен для шестнадцати функций управления частного использования. [12] : 6.5.3 Fp
Если ESC
за следует байт в диапазоне 0x20—0x2F , то escape-последовательность имеет тип . За указанным байтом следует любое количество дополнительных байтов в этом диапазоне, а затем байт в диапазоне 0x30-0x7E . Эти escape-последовательности далее подразделяются по младшим двум битам первого байта, например, «type » для последовательностей, где первый байт равен 0x22 ; и по тому, находится ли последний байт в диапазоне 0x30—0x3F, указывая на частное использование (например, «type ») или нет (например, «type »). [12] : 13.2.1 nF
2F
2Fp
2Ft
Большинство nFt
последовательностей предназначены для изменения текущего набора символов и перечислены в ISO/IEC 2022. Некоторые другие:
Если первый байт — «#», то общедоступные последовательности зарезервированы для дополнительных зарегистрированных индивидуальных функций управления ISO-IR. [12] : 6.5.2 В настоящее время такие последовательности не зарегистрированы. [48] Типовые 3Fp
последовательности (включая те, которые начинаются с «#») доступны для функций управления частного использования. [12] : 6.5.3
CSI 2 J
— Это очищает экран и на некоторых устройствах помещает курсор в позицию y,x 1,1 (верхний левый угол).
CSI 32 m
— Это делает текст зеленым. Зеленый может быть темным, тусклым зеленым, поэтому вы можете включить Bold с последовательностью CSI 1 m
, которая сделает его ярко-зеленым, или объединить как CSI 32 ; 1 m
. Некоторые реализации используют состояние Bold, чтобы сделать символ ярким.
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-подобных терминалах для подсветки синтаксиса . Например, на совместимых терминалах следующая команда list выделяет цветом имена файлов и каталогов по типу.
ls --цвет
Пользователи могут использовать escape-коды в своих скриптах, включая их как часть стандартного вывода или стандартной ошибки . Например, следующая команда GNU sed украшает вывод команды make , отображая строки, содержащие слова, начинающиеся с «WARN», в обратном видео , а слова, начинающиеся с «ERR», ярко-желтым цветом на темно-красном фоне ( регистр букв игнорируется). Представления кодов подсвечиваются. [53]
сделать 2>&1 | sed -e 's/.*\bWARN.*/ \x1b[7m & \x1b[0m /i' -e 's/.*\bERR.*/ \x1b[93;41m & \x1b[0m /i'
Следующая функция Bash мигает на терминале (поочередно отправляя коды обратного и обычного видеорежима) до тех пор, пока пользователь не нажмет клавишу. [54]
flasher () { while true; do printf
\\e[?5h \\e[?5l; sleep 0.1; printf
; read -s -n1 -t1 && break; done; }
Это можно использовать для оповещения программиста о завершении длинной команды, например, с помощью make ; flasher
. [55]
printf \\ 033c
Это приведет к сбросу консоли, аналогично команде reset
в современных системах Linux; однако она должна работать даже в старых системах Linux и в других (не Linux) вариантах UNIX.
#include <stdio.h> int main ( пустота ) { int i , j , n ; для ( я = 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> '[' (<модификатор>) <символ> -> последовательность кода клавиши, <модификатор> — десятичное число, по умолчанию 1 (xterm)<esc> '[' (<keycode>) (';'<modifier>) '~' -> последовательность кодов клавиш, <keycode> и <modifier> являются десятичными числами и по умолчанию равны 1 (vt)
Если конечный символ — «~», то первая цифра должна присутствовать и является номером кода клавиши, вторая цифра — необязательное значение модификатора. Если конечный символ — буква, то буква является значением кода клавиши, а необязательное число — значением модификатора.
Значение модификатора по умолчанию равно 1, и после вычитания 1 получается битовая карта нажатых клавиш-модификаторов: Meta+ Ctrl+ Alt+ ⇧ Shift. Так, например, <esc>[4;2~
is + , is function key , is + .⇧ ShiftEnd<esc>[20~
F9<esc>[5C
Ctrl→
Другими словами, модификатор представляет собой сумму следующих чисел:
последовательности 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>[Э - <esc>[О - <esc>[Й -<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
to <esc>[D
совпадают с выходными последовательностями ANSI. <modifier>
Обычно опускается, если не нажаты клавиши-модификаторы, но большинство реализаций всегда выдают for <modifier>
– . (черновик)F1F4
Xterm имеет подробную страницу документации по различным схемам последовательностей ввода функциональных клавиш и мыши из терминалов VT компании DEC и различных других терминалов, которые он эмулирует. [13] Томас Дики добавил к нему много поддержки с течением времени; [56] он также ведет список клавиш по умолчанию, используемых другими эмуляторами терминалов для сравнения. [57]
CSI [ char
[
SS3 1; modifiers char
F1F4CSI row ; column R
CSI 1 ; modifiers R
F3row == 1
CSI ? 6 n
CSI ? row ; column R
ESC
к любому символу, набранному с нажатой клавишей alt. Это создает неоднозначность для заглавных букв и символов @[\]^_
, которые образуют коды C1. [ необходимо разъяснение ]SS3 modifiers char
F1F4включает в себя отказ от классического пользовательского интерфейса хоста консоли с его позиции по умолчанию в пользу Windows Terminal, ConPTY и последовательностей виртуальных терминалов.