Escape-код ANSI

редактировать
Метод с использованием внутриполосной сигнализации для управления форматированием, цветом и другими параметрами вывода на видеотекстовых терминалах

ANSI X3.64 (ISO 6429)
Вывод системного монитора htop, приложения ncurses (которое использует SGR и другие управляющие последовательности ANSI / ISO).
Стандарт
КлассификацияISO / IEC 2022 на основе код управления и набор управляющих последовательностей
Другая связанная кодировка (и)Другие стандарты функций управления: ITU T.101, JIS X 0207, ISO 6630, DIN 31626, ETS 300706

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

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

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

Содержание

  • 1 История
  • 2 Поддержка платформ
    • 2.1 Unix-подобные системы
    • 2.2 DOS и Windows
    • 2.3 Atari ST
    • 2.4 AmigaOS
    • 2.5 VMS / OpenVMS
  • 3 escape-последовательности
  • 4 последовательности CSI
  • 5 выходных последовательностей терминала
  • 6 параметров SGR
  • 7 цветов
    • 7,1 3/4 бита
    • 7,2 8 бит
    • 7,3 24 бита
  • 8 Примеры
    • 8.1 Пример использования в сценариях оболочки
    • 8.2 Пример использования в C
  • 9 Терминальные входные последовательности
    • 9.1 Используемые недопустимые и неоднозначные последовательности
  • 10 См. Также
  • 11 Примечания
  • 12 Ссылки
  • 13 Внешние ссылки

История

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

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

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

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

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

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

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

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

Unix-подобных систем

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

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

DOS и Windows

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

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

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

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

В 2016 году Microsoft выпустила обновление Windows 10 версии 1511, которое неожиданно реализовало поддержку управляющих последовательностей ANSI. Это изменение было разработано, чтобы дополнить подсистему Windows для Linux, добавив к хосту консоли Windows, используемому командной строкой, поддержку кодов перехода символов, используемых терминальным программным обеспечением для Unix. -подобные системы. Это не поведение по умолчанию и должно быть включено программно с помощью Win32 API через SetConsoleMode (handle, ENABLE_VIRTUAL_TERMINAL_PROCESSING). Это было включено в CMD.EXE, но не изначально в PowerShell ; однако Windows PowerShell 5.1 теперь включает это по умолчанию. Возможность создания строковой константы, содержащей ESC, была добавлена ​​в PowerShell 6 с помощью (например) "ʻe [32m"; для PowerShell 5 вам пришлось использовать [char] 0x1B + "[32m".

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

Atari ST

В Atari ST использовалась система команд, адаптированная из VT52, с некоторыми расширениями для поддержки цвета, вместо поддержки выхода ANSI. коды.

AmigaOS

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

VMS / OpenVMS

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

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

Escape-последовательности различаются по длине. Общий формат управляющей последовательности, совместимой с ANSI, определен в ANSI X3.41 (эквивалент ECMA-35 или ISO / IEC 2022). За ESC (27 / шестнадцатеричный 0x1B / окт 033) следует ноль или более промежуточных байтов «I» между шестнадцатеричным 0x20 и 0x2F включительно, за которым следует последний байт «F» между 0x30 и 0x7E включительно.

Кроме того, некоторые функции управления принимают дополнительные данные параметров после самой последовательности ESC, то есть после Fбайт последовательности ESC. В частности, после самой последовательности ESC для CSI (0x1B 0x5Bили ESC [) следует последовательность параметров и промежуточных байтов, за которыми следует последний байт между 0x40 и 0x7E; вся последовательность, включая как последовательность ESC для CSI, так и последующие байты параметра и идентификатора, дублируется ECMA-48 (ANSI X3.64 / ISO 6429) как «управляющая последовательность». Кроме того, последовательности ESC для DCS, SOS, OSC, PM и APC сопровождаются последовательностью данных параметров переменной длины, заканчивающейся ST ; это известно как «управляющая строка».

ANSI X3.41 / ECMA-35 делит escape-последовательности на несколько широких категорий:

  • escape-последовательности без байтов Iи Fбайт между 0x40 и 0x5F включительно, классифицируются как последовательности «тип Fe» и делегируются применимому стандарту кода управления C1. Соответственно, все escape-последовательности, соответствующие управляющим кодам C1 из ANSI X3.64 / ECMA-48, следуют этому формату.
  • Escape-последовательности без байтов Iи Fбайты от 0x60 до 0x7E включительно, классифицируются как последовательности типа Fsи используются для функций управления, индивидуально зарегистрированных в реестре ISO-IR и, следовательно, доступны даже в контекстах, где используется другой набор управляющих кодов C1. В частности, они соответствуют отдельным функциям управления, утвержденным ISO / IEC JTC 1 / SC 2 и стандартизированным ISO или признанным ISO органом. Некоторые из них указаны в ECMA-35 (ISO 2022 / ANSI X3.41), другие - в ECMA-48 (ISO 6429 / ANSI X3.64). ECMA-48 называет их "независимыми функциями управления".
  • Управляющие последовательности без байтов Iи байты Fмежду 0x30 и 0x3F включительно относятся к категории как последовательности «type Fp» и выделены для функций управления частным использованием.
  • Escape-последовательности с одним или несколькими байтами Iотносятся к категории «type <272»>nF"последовательности. Кроме того, они подразделяются на четыре младших бита первого байта I, например "type 2F" для последовательностей, в которых первый байт Iравен 0x22, и по тому, находится ли байт Fв диапазоне частного использования. от 0x30 до 0x3F включительно (например, «тип 2Fp») или нет (например, «тип 2Ft»). Они в основном используются для механизмов переключения кода ANSI / ISO, таких как те, которые используются в ISO-2022-JP, за исключением последовательностей типа 3F(тех, у которых первый промежуточный байт 0x23), которые используются для отдельных функций управления. Последовательности типа 3Ftзарезервированы для дополнительных зарегистрированных в ISO-IR индивидуальных функций управления, в то время как последовательности типа 3Fpдоступны для функций управления частного использования.

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

Другие коды C0, помимо ESC - обычно BEL, BS, CR, LF, FF, TAB, VT, SO и SI - при выводе производят аналогичные или идентичные эффекты некоторым управляющим последовательностям.

Некоторый тип Fe(элемент набора C1) escape-последовательности ANSI (не исчерпывающий список)
ПоследовательностьC1КороткаяИмяЭффект
ESC N0x8ESS2Single Shift TwoВыберите один символ из одного из альтернативные наборы символов. SS2 выбирает набор символов G2, а SS3 выбирает набор символов G3. В 7-битной среде за ним следует один или несколько байтов GL (0x20–0x7F), определяющих символ из этого набора. В 8-битной среде это могут быть байты GR (0xA0–0xFF).
ESC O0x8FSS3Single Shift Three
ESC P0x90DCSСтрока управления устройствомЗавершается ST. Xterm использует эту последовательность, включая определение определяемых пользователем ключей, а также запрос или установку данных Termcap / Terminfo.
ESC [0x9BCSIControl Sequence IntroducerБольшинство полезных последовательностей, см. следующий раздел.
ESC \0x9CSTString TerminatorЗавершает строки в других элементах управления.
ESC]0x9DOSCКоманда операционной системыЗапускает управляющую строку для использования операционной системой , прекращено СТ. В xterm они также могут быть прерваны BEL. Например, xterm позволяет установить заголовок окна как \ x1b] 0, это заголовок окна \ x07.

Не-xterm расширение - это гиперссылка OSC 8 с 2017 года, используемая VTE и iTerm2.

ESC X0x98SOSНачало StringПринимает аргумент текстовой строки, заканчивающейся ST. Использование этих последовательностей управления строками определяется приложением или дисциплиной конфиденциальности. Эти функции редко реализуются, и аргументы игнорируются xterm.
ESC ^0x9EPMPrivacy Message
ESC _0x9FAPCКоманда прикладной программы
Некий тип Fs(независимая функция) Управляющие последовательности ANSI, распознаваемые терминалами
ПоследовательностьКороткоеИмяЭффект
ESC cRISСброс в исходное состояниеЗапускает полный сброс терминала в исходное состояние. Это может включать (если применимо): сброс графического представления, очистку остановок табуляции, сброс шрифта по умолчанию и многое другое.
Некоторые типы 0Ft(объявление) escape-последовательности ANSI, распознаваемые терминалами (не исчерпывающий список )
ПоследовательностьКраткоеИмяЭффект
ESC SP FACS6
S7C1T
Объявление Структура кода 6
Отправить 7-битный управляющий символ C1 на хост
Определено в ECMA-35 (ANSI X3.41 / ISO 2022). Заставляет функциональные клавиши отправлять ESC + букву вместо кода C1.
ESC SP GACS7
S8C1T
Структура кода объявления 7
Отправить 8-битный управляющий символ C1 к хосту
Определено в ECMA-35. Заставляет функциональные клавиши отправлять коды C1.
Управляющие последовательности некоторого типа Fpили 3Fp(частное использование), распознаваемые VT100, его преемниками и / или эмуляторы терминала, такие как xterm
SequenceShortNameEffect
ESC 7DECSCDEC Save CursorСохраняет позицию курсора, состояние сдвига кодирования и атрибуты форматирования.
ESC 8DECRCDECRC Restore CursorВосстанавливает позицию курсора, состояние сдвига кодирования и атрибуты форматирования из предыдущего DECSC, если таковые были, в противном случае сбрасывает их все до значений по умолчанию.
ESC # 3DECDHLDEC Double-Height Letters, Top HalfУвеличивает высоту символов текущей строки в два раза. Этот код предназначен для верхней половины.
ESC # 4DECDHLБуквы двойной высоты DEC, нижняя половинаДелает текущую строку, используя символы в два раза больше. Этот код предназначен для нижней половины.
ESC # 5DECSWLDEC Single-Width LineЗаставляет текущую строку использовать одинарные символы в соответствии с поведение по умолчанию.
ESC # 6DECDWLDEC Double-Width LineЗаставляет текущую строку использовать символы двойной ширины, отбрасывая любые символы во второй половине

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

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

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

Во всех распространенных последовательностях параметры просто используются в виде последовательности чисел, разделенных точкой с запятой, например 1; 2; 3. Отсутствующие числа обрабатываются как 0(1 ;; 3действует как среднее номер 0, и никаких параметров в ESC [mдействует как код сброса 0). Некоторые последовательности (например, CUU) обрабатывают 0как 1, чтобы сделать отсутствующие параметры полезными. Байты, отличные от цифр и точки с запятой, похоже, не используются.

Пример последовательности CSI, которая очищает всю строку : \ e [2K

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

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

Выходные последовательности терминала

Некоторые ANSI управляющие последовательности (не исчерпывающий список)
КодКраткоеИмяЭффект
CSI nACUUКурсор вверхПеремещает курсор n(по умолчанию 1) ячеек в заданном направлении. Если курсор уже находится на краю экрана, это не действует.
CSI nBCUDКурсор вниз
CSI nCCUFКурсор вперед
CSI nDCUBКурсор назад
CSI nECNLКурсор Следующая строкаПеремещает курсор в начало строки n(по умолчанию 1) строк вниз. (не ANSI.SYS )
CSI nFCPLКурсор Предыдущая строкаПеремещает курсор в начало строки n(по умолчанию 1) строк вверх. (Не ANSI.SYS )
CSI nGCHAАбсолютный горизонтальный курсорПеремещает курсор в столбец n(по умолчанию 1). (не ANSI.SYS )
CSI n; mHCUPПозиция курсораПеремещает курсор в строку n, столбец m. Значения отсчитываются от 1 и по умолчанию равны 1(верхний левый угол), если он опущен. Последовательность, например CSI; 5Hявляется синонимом CSI 1; 5H, а также CSI 17; Hсовпадает с CSI 17Hи CSI 17; 1H
CSI nJEDСтереть на дисплееОчищает часть экрана. Если nравно 0(или отсутствует), очистить от курсора до конца экрана. Если nравно 1, очистить от курсора до начала экрана. Если nравно 2, очистить весь экран (и перемещает курсор в верхний левый угол в DOS ANSI.SYS ). Если n= 3, очистить весь экран и удалить все строки, сохраненные в буфере обратной прокрутки (эта функция была добавлена ​​для xterm и поддерживается другими терминальными приложениями).
CSI nKELErase in LineУдаляет часть строки. Если nравно 0(или отсутствует), очистите от курсора до конца строки. Если nравно 1, очистить от курсора до начала строки. Если nравно 2, очистить всю строку. Положение курсора не меняется.
CSI nSSUПрокрутка вверхПрокрутка всей страницы вверх на n(по умолчанию 1) строк. Новые строки добавляются внизу. (не ANSI.SYS )
CSI nTSDПрокрутка внизПрокрутка всей страницы вниз на n(по умолчанию 1). Новые строки добавляются вверху. (не ANSI.SYS )
CSI n; mfHVPГоризонтальное положение по вертикалиТо же, что и CUP, но считается функция эффектора формата (например, CR или LF ), а не функция редактора (например, CUD или CNL). Это может привести к различной обработке в определенных режимах терминала.
CSI nmSGRВыбрать графическое представлениеУстанавливает внешний вид следующих символов, см. параметры SGR ниже.
CSI 5iAUX Port OnВключить дополнительный последовательный порт обычно для локального последовательного принтера
CSI 4iAUX Port OffОтключение дополнительного последовательного порта обычно для локального последовательного принтера
CSI 6nDSRDevice Отчет о состоянииСообщает приложению положение курсора (CPR) как (как если бы он вводился с клавиатуры) ESC [n; mR, где n- строка и m- столбец.)
S Некоторые популярные частные последовательности
CodeEffect
CSI sSCP / SCOSC: Сохранить текущую позицию курсора. Сохраняет позицию / состояние курсора в режиме консоли SCO. В режиме вертикального разделения экрана вместо этого используется для установки (как CSI n; ns) или сброса левого и правого полей.
CSI uRCP / SCORC: восстановление сохраненного положения курсора. Восстанавливает положение / состояние курсора в режиме консоли SCO.
CSI? 25 hDECTCEM Показывает курсор из VT320.
CSI? 25 lDECTCEM Скрывает курсор.
CSI? 1049 hВключить альтернативный экранный буфер
CSI? 1049 lОтключить альтернативный экранный буфер
CSI? 2004 hВключить режим вставки в скобках. Текст, вставленный в терминал, будет окружен ESC [200 ~и ESC [201 ~, и символы в нем не должны рассматриваться как команды (например, в Vim). Из эмуляторов терминала Unix.
CSI? 2004 lОтключить режим вставки в скобках.

Параметры SGR

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

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

КодЭффектПримечание
0Сброс / НормальныйВсе атрибуты отключены
1Полужирный шрифт или повышенная интенсивностьКак и в случае с тусклым, изменение цвета - это изобретение ПК (SCO / CGA ).
2Слабая или пониженная интенсивностьтакже известная как Тусклый (с насыщенный цвет). Может быть реализован как легкий шрифт, например полужирный.
3КурсивШироко не поддерживается. Иногда рассматривается как инверсия или мигание.
4ПодчеркнутыйСуществуют расширения стиля для Kitty, VTE, mintty и iTerm2.
5Медленное миганиеменее 150 в минуту
6Быстрое миганиеMS-DOS ANSI.SYS, 150+ в минуту; не широко поддерживается
7Обратное видео поменять местами цвета переднего плана и фона, то есть инвертировать; несовместимая эмуляция
8Conceal, также известная как Hide, широко не поддерживается.
9Зачеркнутый он же Strike, символы разборчивы, но помечены, как если бы они были удалены.
10Основной (по умолчанию) шрифт
11–19Альтернативный шрифтВыбрать альтернативный шрифт n - 10
20Fraktur Редко поддерживается
21Двойное подчеркивание илиПолужирный шрифтДвойное подчеркивание согласно ECMA-48. См. обсуждение
22Нормальный цвет или интенсивностьНи жирный, ни бледный
23Не курсив, не фрактур
24Подчеркнутый выключенНе подчеркнут отдельно или дважды
25Мигает выключен
26Пропорциональный интервалITU T.61 и T.416, не известно, что они используются на терминалах
27Обратное / инверсное выключено
28ПоказатьСкрыть выключено
29Не зачеркнуто
30–37Установить цвет переднего планаСм. Таблицу цветов ниже
38Установить цвет переднего планаСледующие аргументы: 5; nили 2; r; g; b, см. Ниже
39Цвет переднего плана по умолчаниюреализация определена (согласно стандарту)
40–47Установить цвет фонаСм. таблицу цветов ниже
48Установить цвет фонаСледующие аргументы: 5; nили 2; r; g; b, см. Ниже
49Цвет фона по умолчаниюреализация определена (согласно стандарту rd)
50Отключить пропорциональный интервалT.61 и T.416
51FramedРеализовано как «Селектор вариантов смайликов "в цветах mintty.
52Обведен
53Перекрыт
54Без рамки или обведен
55Без наложения
58Установить цвет подчеркиванияKitty, VTE, mintty и iTerm2. (не входит в стандарт)
Следующие аргументы: 5; nили 2; r; g; b, см. ниже
59Цвет подчеркивания по умолчаниюКитти, VTE, mintty и iTerm2. (не входит в стандарт)
60подчеркивание идеограммы или правая боковая линияРедко поддерживается
61двойное подчеркивание идеограммы или
двойная линия на правая сторона
62верхняя линия идеограммы или левая боковая линия
63двойная верхняя линия идеограммы или
двойная линия слева
64маркировка напряжения идеограммы
65атрибуты идеограммы отключенысбрасывают эффекты всех 6064
73надстрочного индексаmintty (не в стандарт)
74нижний индекс
90–97Установить яркий цвет переднего планаaixterm (не входит в стандарт)
100–107Установить яркий цвет фона

Цвета

3/4 бита

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

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

ИмяКод FGКод BGVGAКонсоль Windows Windows PowerShell Код Visual Studio

Консоль отладки

(по умолчанию Dark + Theme)

Консоль Windows 10
PowerShell 6
Terminal.app PuTTY mIRC xterm Ubuntu
Черный30400,0,012,12,120,0 , 01,1,1
Красный3141170,0,0128,0,0205 , 49, 49197,15,31194,54,33187,0,0127,0,0205,0,0222,56,43
Зеленый32420,170,00,128,013, 188, 12119,161,1437,188,360,187,00,147,00,205 , 057,181,74
Желтый3343170,85,0128,128,0238,237,240229, 229, 16193,156,0173,173,39187,187,0252,127,0205,205 , 0255,199,6
Синий34440,0,1700,0,12836, 114, 2000, 55,21873,46,2250,0,1870,0,1270,0,2380,111,184
Пурпурный3545170,0,170128,0,1281,36,86188, 63, 188136, 23,152211,56,211187,0,187156,0,156205,0,205118,38,113
Голубой36460,170,1700,128,12817, 168, 20558,150,22151,187,2000,187,1870,147,1470,205,20544,181,233
Белый3747170,170,170192,192,192229 , 229, 229204,204,204203,204,205187,187,187210,210,210229,229,229204,204,204
Яркий Черный (Серый)9010085,85,85128,128,128102, 102, 102118,118,118129,131,13185,85,85127,127,12712 7,127,127128,128,128
Ярко-красный91101255,85,85255,0,0241, 76, 76231,72,86252,57,31255,85,85255,0,0255,0,0255,0,0
Ярко-зеленый9210285,255,850,255,035 , 209, 13922,198,1249,231,3485,255,850,252,00,255,00,255,0
Ярко-желтый93103255,255,85255,255,0245, 245, 67249,241,165234,236,35255,255,85255,255,0255,255,0255,255,0
Ярко-синий9410485,85,2550,0,25559, 142, 23459,120,25588 , 51,25585,85,2550,0,25292,92,2550,0,255
Ярко-пурпурный95105255,85,255255,0,255214, 112, 214180,0,158249,53,248255,85,255255,0,255255,0,2 55255,0,255
Ярко-голубой9610685,255,2550,255,25541, 184, 21997,214,21420,240,24085,255,2550,255,2550,255,2550,255,255
Ярко-белый97107255,255,255255,255,255229, 229, 229242,242,242233,235,235255,255,255255,255,255255,255,255255,255,255

8-бит

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

ESC[ 38;5;⟨n⟩ m Select foreground color ESC[ 48;5;⟨n⟩ m Select background color 0- 7: standard colors (as in ESC [ 30–37 m) 8- 15: high intensity colors (as in ESC [ 90–97 m) 16-231: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b ( 0 ≤ r, g, b ≤ 5) 232-255: grayscale from black to white in 24 steps

The ITU 's T.416 Information technology - Open Document Archite cture (ODA) and interchange format: Character content architectures uses ':' as separator characters instead:

ESC[ 38:5:⟨n⟩ m Select foreground color ESC[ 48:5:⟨n⟩ m Select background color
256-color mode — foreground: ESC[38;5;#m background: ESC[48;5;#m
Standard colorsHigh-intensity colors
0123456789101112131415
216 colors
161718192021222324252627 282930313233343536373839404142434445464748495051
525354555657585960616263646566676869707172737475767778798081828384858687
888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
Цвета в оттенках серого
232233234235236237238239240241242243244245246247248249250251252253254255

24-бит

Поскольку графические карты «истинного цвета» с 16–24 битами цвета стали обычным явлением, Xterm, KDE Кон sole, iTerm, а также все терминалы на основе libvte (включая GNOME Terminal ) поддерживают 24-битную настройку цвета переднего плана и фона.

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

The ITU ' s Информационная технология T.416 - Архитектура открытого документа (ODA) и формат обмена: Архитектура символьного содержимого, принятая в качестве международного стандарта ISO / IEC 8613-6, дает альтернативную версию, которая, по-видимому, менее поддерживается. Параметры после "2", т.е. даже r, g, b, необязательны. Обратите внимание, что это не просто приведенная выше последовательность с точкой с запятой, замененной двоеточием, есть ведущий «идентификатор цветового пространства» (этот факт был упущен многими эмуляторами терминала, похоже, это упущение пришло из KDE Konsole). Определение идентификатора цветового пространства не включено в этот документ, поэтому оно может быть пустым для представления неопределенного значения по умолчанию. Помимо значения '2' для указания формата красный-зеленый-синий (и '5' выше для индексированного цвета 0-255), существуют альтернативы '0' для определенной реализации и '1' для прозрачного - ни то, ни другое какие есть дополнительные параметры; «3» задает цвета с использованием схемы «голубой-пурпурный-желтый», а «4» - для схемы «голубой-пурпурный-желтый-черный», причем последний использует позицию, помеченную как «неиспользуемая» для компонента черного:

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

Примеры

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

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

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 ф. Теперь, если вы используете последовательность CSI u, позиция курсора вернется к 7 (y) и 10 (x). Некоторым терминалам вместо этого требуются последовательности DEC ESC 7/ ESC 8, которые широко поддерживаются.

Пример использования в сценариях оболочки

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

ls --color

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

make 2>& 1 | sed -e 's /.* \ bWARN. * / \ x1b [7m & \ x1b [0m / i' -e 's /.* \ bERR. * / \ x1b [93; 41m & \ x1b [0m / i'

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

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

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

printf \\ 033c

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

Пример использования в C

1 #include 2 3 int main (void) 4 {5 int i, j, n; 6 7 для разрыва (i = 0; i < 11; i++) { 8 for (j = 0; j < 10; j++) { 9 n = 10*i + j; 10 if (n >108); 11 printf ("\ 033 [% dm% 3d \ 033 [m", n, n); 12} 13 printf ("\ п"); 14} 15 return (0); 16}

Входные последовательности терминала

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

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

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

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

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

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

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

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

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

Используемые недопустимые и неоднозначные последовательности

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

См. также

Примечания

Ссылки

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

Последняя правка сделана 2021-06-07 21:58:48
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте