stringtranslate.com

Escape-код ANSI

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

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

Хотя в XXI веке аппаратные текстовые терминалы встречаются все реже, актуальность стандарта 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 отозвал свой стандарт в пользу международного стандарта.

Терминал 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» с различной степенью совместимости на многих других брендах. Популярность этих режимов постепенно привела к появлению все большего количества программного обеспечения (особенно систем досок объявлений и других онлайн-сервисов ), предполагающего, что последовательности выхода работают, что привело к тому, что почти все новые терминалы и программы-эмуляторы поддерживали их.

В 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 отмечает используемые в них расширения как зарезервированные.

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

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

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

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

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

ДОС и Windows

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

DOS версии 2.0 включала дополнительную поддержку с драйвером устройства под названием ANSI.SYS . Низкая производительность и тот факт, что он не устанавливался по умолчанию, означали, что программное обеспечение редко использовало его преимущества. Некоторые другие системы пытались удовлетворить потребность в этих последовательностях, многие клоны DOS обрабатывали их без драйвера, а OS/2 имела команду ANSI , которая включала последовательности.

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

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

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

Описание

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

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

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

Последовательности выхода Fe

Если за 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 ), но таким образом не экономится место.

Последовательности 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 (выбор графической визуализации)

Управляющая последовательность , называемая Select Graphic Rendition (SGR), устанавливает атрибуты отображения. Несколько атрибутов могут быть установлены в одной и той же последовательности, разделенные точкой с запятой. [21] Каждый атрибут отображения остается в силе до тех пор, пока следующее появление 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 цветов стали обычным явлением на графических картах, были добавлены управляющие последовательности для выбора из предопределенного набора из 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.

24-битный

Поскольку графические карты "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] : Могу ли я задать цвет по его номеру? 

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

Вместо того, чтобы использовать поддержку цвета в 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]

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

Большинство последовательностей команд операционной системы были определены 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 и сформирует правильную, игнорируемую последовательность для других терминалов. [ необходима цитата ]

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

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

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

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

nF Последовательности выхода

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

Большинство 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.

В С

Вывод примера программы на Gnome Terminal
#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>[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>[Э - <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>[Ato <esc>[Dсовпадают с выходными последовательностями ANSI. <modifier>Обычно опускается, если не нажаты клавиши-модификаторы, но большинство реализаций всегда выдают for <modifier>– . (черновик)F1F4

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

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

Примечания

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

Ссылки

  1. ^ ab "Стандарт ECMA-48: Функции управления для устройств ввода-вывода с отображением символов" (PDF) (Второе издание). Ecma International . Август 1979. Краткая история.
  2. ^ Уильямс, Пол (2006). "Digital's Video Terminals". VT100.net . Получено 17 августа 2011 г.
  3. ^ Heathkit Company (1979). "Heathkit Catalog 1979". Heathkit Company. Архивировано из оригинала 13 января 2012 года . Получено 4 ноября 2011 года .
  4. ^ "Отмененный FIPS, перечисленный по номеру" (PDF) . Национальный институт стандартов и технологий . 15 декабря 2016 г. . Получено 2 января 2022 г. .
  5. ^ abcdefghijklmno "Стандарт ECMA-48: Функции управления для кодированных наборов символов" (PDF) (Пятое издание). Ecma International . Июнь 1991 г.
  6. ^ "Определения команд принтера Amiga". Commodore . Получено 10 июля 2013 г.
  7. ^ Худ, Джейсон (2005). "Обработка управляющих последовательностей ANSI для консольных программ Windows". Домашняя страница Джейсона Худа . Получено 9 мая 2013 г.
  8. ^ "colorama · PyPI". Индекс пакетов Python . Получено 27 февраля 2022 г.
  9. ^ bitcrazed. "Последовательности виртуального терминала консоли - Консоль Windows". docs.microsoft.com . Получено 30 мая 2018 г. .
  10. ^ «Справка PowerShell: О специальных символах». 12 января 2023 г.
  11. ^ «Дорожная карта экосистемы консоли и терминала Windows». Microsoft. 2018. Получено 13 марта 2021 г. Это включает в себя отказ от классического пользовательского интерфейса хоста консоли с его позиции по умолчанию в пользу Windows Terminal, ConPTY и последовательностей виртуальных терминалов.
  12. ^ abcdefghi "Стандарт ECMA-35: Структура кодов символов и методы расширения" (PDF) (Шестое изд.). Ecma International . 1994.
  13. ^ abcdefghijklmn Мой, Эдвард; Джилдеа, Стивен; Дики, Томас (2019). "XTerm Control Sequences (ctlseqs)". Невидимый остров .
  14. ^ Франк да Круз; Кристин Джианоне (1997). Использование C-Kermit. Digital Press. стр. 278. ISBN 978-1-55558-164-0.
  15. ^ "SCOSC — Сохранить текущую позицию курсора". Информация о программисте видеотерминала VT510 . DEC .
  16. ^ "DECSLRM — Установить левое и правое поля". Информация о программисте видеотерминала VT510 . DEC .
  17. ^ "SCORC — Восстановление сохраненной позиции курсора". Информация о программисте видеотерминала VT510 . DEC .
  18. ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas. "XTerm Control Sequences". Функции, использующие CSI, упорядоченные по последнему символу(ам) . Получено 4 февраля 2022 г.
  19. Конрад Ирвин (апрель 2013 г.). «режим вставки в скобках». cirw.in .
  20. ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas. "XTerm Control Sequences". Режим вставки в скобках . Получено 4 февраля 2022 г.
  21. ^ "console_codes(4) - Страница руководства Linux". man7.org . Получено 23 марта 2018 г. .
  22. ^ ab "screen(HW)". Руководство SCO OpenServer Release 5.0.7 . 11 февраля 2003 г.
  23. ^ «Ошибка 791596 – Мысли об обмороке (SGR 2)». bugzilla.gnome.org .
  24. ^ abc "Кудрявые и цветные подчеркивания (#6382) · Проблемы · Джордж Нахман / iterm2". GitLab . 11 декабря 2017 г.
  25. ^ abc "Расширения протокола xterm". kitty documentation . Получено 1 июля 2020 г.
  26. ^ "Кудрявые и цветные подчеркивания". KDE bugtracker . 27 августа 2022 г.
  27. ^ "console-termio-realizer". jdebp.uk .
  28. ^ "console_codes(4)". Руководство программиста Linux . 5.10. Проект man-pages Linux .
  29. ^ abc "mintty/mintty: Атрибуты текста и рендеринг". GitHub .
  30. ^ "сочетание клавиш по умолчанию в Windows переназначает цвета ANSI 35,36 · Проблема № 4266 · PowerShell/PowerShell". GitHub . Получено 21 декабря 2022 г. .
  31. ^ "Настоящая палитра CGA и цветовой вывод IBM 5153". VileR. 11 июня 2022 г. Получено 18 мая 2024 г.
  32. Изменено с 0, 0, 205 в июле 2004 г. «Патч № 192 – 2004/7/12 – XFree86 4.4.99.9».
  33. Изменено с 0, 0, 255 в июле 2004 г. «Патч № 192 – 2004/7/12 – XFree86 4.4.99.9».
  34. ^ abc "T.416 Информационные технологии - Открытая архитектура документов (ODA) и формат обмена: Архитектуры символьного контента".
  35. ^ "color-spaces.pl (копия 256colors2.pl из xterm от 11.07.1999)". KDE. 6 декабря 2006 г.[ постоянная мертвая ссылка ]
  36. ^ "README.moreColors" . КДЕ. 22 апреля 2010 г.
  37. ^ "Отчет об ошибках и исправления libvte: Поддержка 16 миллионов цветов". GNOME Bugzilla. 4 апреля 2014 г. Получено 5 июня 2016 г.
  38. ^ «Как включить поддержку 24-битного истинного цвета в терминале Gnome?».
  39. ^ "История". curs_color(3X) - управление цветами терминала с помощью curses.
  40. ^ "Midnight Commander: lib/tty/color-slang.c". Фосси .
  41. ^ ab Dickey, Thomas E. (2017). "NCURSES — комментарии к S-Lang". invisible-island.net .
  42. ^ "Features/256 Color Terminals - Fedora Project Wiki". Fedora Project . Архивировано из оригинала 4 октября 2012 г.
  43. ^ «Ошибка 733423 – Установите переменную среды COLORFGBG для автоматического определения цвета». bugzilla.gnome.org .
  44. ^ ab Koblinger, Egmont. "Гиперссылки (они же HTML-подобные якоря) в эмуляторах терминала". GitHub Gists .
  45. ^ "mintty/mintty: Управляющие последовательности". GitHub .
  46. ^ Коблингер, Эгмонт. «Внедрение OSC 8 в эмуляторах терминала». GitHub .
  47. ^ "console_codes — Последовательности управления и выхода из консоли Linux". Руководство программиста Linux .
  48. ^ ab ISO-IR: Международный регистр кодированных наборов символов ISO/IEC для использования с управляющими последовательностями (PDF) . ITSCJ/ IPSJ . Получено 12 мая 2023 г. .
  49. ^ ab Digital . "DECSC—Сохранить курсор". Информация о программисте видеотерминала VT510 .
  50. ^ ab ANSI Escape sequences - VT100 / VT52, архивировано из оригинала 27 февраля 2009 г. , извлечено 21 августа 2020 г.
  51. ^ Цифровой . "DECSWL — одинарная ширина, одинарная высота линии". Информация о программисте видеотерминала VT510 .
  52. ^ Цифровой . "DECDWL — строка двойной ширины и одинарной высоты". Информация о программисте видеотерминала VT510 .
  53. ^ "Глава 9. Советы по системе". debian.org .
  54. ^ "VT100.net: Руководство пользователя цифрового VT100" . Получено 19 января 2015 г.
  55. ^ "bash – Как получить уведомление о завершении моих команд – Ask Different" . Получено 19 января 2015 г. .
  56. ^ Дики, Томас. "XTerm FAQ: Сравнение версий с помощью подсчета элементов управления". Invisible Island . Получено 25 января 2020 г.
  57. ^ Дики, Томас (2016). "Таблица функциональных клавиш для XTerm и других эмуляторов терминала". Invisible Island . Получено 25 января 2020 г.
  58. ^ "CSI u - Документация - iTerm2 - Замена терминала macOS". iTerm2 . Получено 15 августа 2023 г. .

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