Las secuencias de escape ANSI son un estándar para la señalización dentro de banda para controlar la ubicación del cursor, el color, el estilo de fuente y otras opciones en terminales de texto de video y emuladores de terminales . Ciertas secuencias de bytes , la mayoría que comienzan con un carácter de escape ASCII y un carácter de corchete , están incrustadas en el texto. El terminal interpreta estas secuencias como comandos, en lugar de texto para mostrar palabra por palabra.
Las secuencias ANSI se introdujeron en la década de 1970 para reemplazar las secuencias específicas de los proveedores y se generalizaron en el mercado de equipos informáticos a principios de la década de 1980. Se utilizan en aplicaciones de desarrollo, científicas y comerciales basadas en texto, así como en sistemas de tableros de anuncios para ofrecer una funcionalidad estandarizada.
Aunque los terminales de texto de hardware se han vuelto cada vez más raros en el siglo XXI, la relevancia del estándar ANSI persiste porque una gran mayoría de emuladores de terminales y consolas de comando interpretan al menos una parte del estándar ANSI.
Casi todos los fabricantes de terminales de vídeo agregaron secuencias de escape específicas del proveedor para realizar operaciones como colocar el cursor en posiciones arbitrarias de la pantalla. Un ejemplo es el terminal VT52 , que permitía colocar el cursor en una ubicación x,y de la pantalla enviando el ESC
carácter, un Y
carácter y luego dos caracteres que representan valores numéricos iguales a la ubicación x,y más 32 (comenzando así en el carácter de espacio ASCII y evitando los caracteres de control). El Hazeltine 1500 tenía una característica similar, se invocaba usando ~
y DC1
luego las posiciones X e Y separadas por una coma. Si bien los dos terminales tenían una funcionalidad idéntica a este respecto, se debían utilizar diferentes secuencias de control para invocarlos.
Como estas secuencias eran diferentes para diferentes terminales, se tuvieron que crear bibliotecas elaboradas como termcap ("capacidades de terminal") y utilidades como tput para que los programas pudieran usar la misma API para trabajar con cualquier terminal. Además, muchos de estos terminales requerían el envío de números (como fila y columna) como valores binarios de los caracteres; para algunos lenguajes de programación y para sistemas que no usaban ASCII internamente, a menudo era difícil convertir un número en el carácter correcto.
El estándar ANSI intentó abordar estos problemas creando un conjunto de comandos que todos los terminales usarían y requiriendo que toda la información numérica se transmitiera como números ASCII. El primer estándar de la serie fue ECMA-48, adoptado en 1976. [1] Fue una continuación de una serie de estándares de codificación de caracteres, siendo el primero el ECMA-6 de 1965, un estándar de 7 bits del que se origina ISO 646. . El nombre "secuencia de escape ANSI" data de 1979 cuando ANSI adoptó ANSI X3.64. El comité ANSI X3L2 colaboró con el comité ECMA TC 1 para producir estándares casi idénticos. Estos dos estándares se fusionaron en un estándar internacional, ISO 6429. [1] En 1994, ANSI retiró su estándar a favor del estándar internacional.
El primer terminal de vídeo popular que admitía estas secuencias fue el Digital VT100 , presentado en 1978. [2] Este modelo tuvo mucho éxito en el mercado, lo que provocó una variedad de clones del VT100, entre los primeros y más populares se encontraba el mucho más asequible Zenith Z-19 en 1979. [3] Otros incluyeron el Qume QVT-108, Televideo TVI-970, Wyse WY-99GT, así como los modos opcionales "VT100" o "VT103" o "ANSI" con distintos grados de compatibilidad en muchas otras marcas. La popularidad de estos llevó gradualmente a que cada vez más software (especialmente sistemas de tablones de anuncios y otros servicios en línea ) asumieran que las secuencias de escape funcionaban, lo que llevó a que casi todos los nuevos terminales y programas emuladores las admitieran.
En 1981, se adoptó ANSI X3.64 para su uso en el gobierno de EE. UU. mediante la publicación FIPS 86. Más tarde, el gobierno de EE. UU. dejó de duplicar los estándares de la industria, por lo que FIPS pub. 86 fueron retirados. [4]
ECMA-48 ha sido actualizado varias veces y actualmente se encuentra en su quinta edición, de 1991. También es adoptado por ISO e IEC como estándar ISO/IEC 6429 . [5] Se adopta una versión como norma industrial japonesa , como JIS X 0211 .
Los estándares relacionados incluyen ITU T.61 , el estándar Teletex , e ISO/IEC 8613 , el estándar de Arquitectura de Documento Abierto (principalmente ISO/IEC 8613-6 o ITU T.416). Los dos sistemas comparten muchos códigos de escape con el sistema ANSI, con extensiones que no necesariamente son significativas para los terminales de computadora. Ambos sistemas cayeron rápidamente en desuso, pero ECMA-48 sí marca como reservadas las extensiones utilizadas en ellos.
A principios de la década de 1980, grandes cantidades de software utilizaban directamente estas secuencias para actualizar las visualizaciones en pantalla. Esto incluía todo lo relacionado con VMS (que suponía terminales Dec), la mayor parte del software diseñado para ser portátil en computadoras domésticas CP/M e incluso mucho software Unix, ya que era más fácil de usar que las bibliotecas termcap, como los ejemplos de scripts de shell que aparecen a continuación en Este artículo.
Los emuladores de terminal para comunicarse con máquinas remotas casi siempre implementan códigos de escape ANSI. Esto incluye cualquier cosa escrita para comunicarse con sistemas de tablones de anuncios en computadoras domésticas y personales. En Unix, los emuladores de terminal como xterm también pueden comunicarse con el software que se ejecuta en la misma máquina y, por lo tanto, el software que se ejecuta en X11 en un emulador de terminal podría asumir la capacidad de escribir estas secuencias.
A medida que las computadoras se volvieron más potentes, incluso las pantallas integradas comenzaron a admitirlas, lo que permitió que el software fuera portátil entre sistemas CP/M. Hubo intentos de ampliar las secuencias de escape para admitir impresoras [6] y como uno de los primeros formatos de almacenamiento de documentos similares a PDF, la Open Document Architecture . [ cita necesaria ]
La PC IBM, introducida en 1983, no admitía estas ni ninguna otra secuencia de escape para actualizar la pantalla. El BIOS subyacente solo interpretó unos pocos caracteres de control ( BEL , CR , LF , BS ). Cualquier efecto de visualización tenía que realizarse con llamadas al BIOS, que eran notoriamente lentas, o manipulando directamente el hardware de la PC IBM. Esto hizo que cualquier software interesante no fuera portátil y generó la necesidad de duplicar detalles del hardware de visualización en PC Clones .
La versión 2.0 de DOS incluía soporte opcional con un controlador de dispositivo llamado ANSI.SYS . El bajo rendimiento y el hecho de que no estuviera instalado de forma predeterminada significaban que el software rara vez lo aprovechaba. Algunos otros sistemas intentaron satisfacer la necesidad de estas secuencias, muchos clones de DOS las manejaban sin un controlador y OS/2 tenía un comando ANSI que habilitaba las secuencias.
La consola de Windows no admitía secuencias de escape ANSI y Microsoft tampoco proporcionó ningún método para habilitarlas. Algunos reemplazos o adiciones para la ventana de la consola, como TCC de JP Software (anteriormente 4NT), ANSI.COM de Michael J. Mefford, ANSICON de Jason Hood [7] y ConEmu de Maximus5 interpretaron secuencias de escape ANSI impresas por programas. Un paquete de Python llamado colorama [8] interpreta internamente secuencias de escape ANSI en el texto que se imprime, traduciéndolas a llamadas win32 para modificar el estado del terminal, para facilitar la transferencia del código Python usando ANSI a Windows. Cygwin realiza una traducción similar a todos los resultados escritos en la consola utilizando descriptores de archivos Cygwin; el filtrado se realiza mediante las funciones de salida de cygwin1.dll , para permitir la migración del código POSIX C a Windows.
En 2016, Microsoft lanzó la actualización 1511 de Windows 10 que inesperadamente implementó soporte para secuencias de escape ANSI, más de dos décadas después del debut de Windows NT. [9] Esto se hizo junto con el Subsistema de Windows para Linux , aparentemente para permitir que el software basado en terminal tipo Unix use la Consola de Windows. Windows PowerShell 5.1 habilitó esto de forma predeterminada y PowerShell 6 hizo posible incrustar el carácter ESC necesario en una cadena con . [10]`e
Windows Terminal , presentado en 2019, admite secuencias de forma predeterminada y Microsoft tiene la intención de reemplazar la consola de Windows con Windows Terminal. [11]
Casi todos los usuarios asumen algunas funciones de algunos caracteres de un solo byte. Inicialmente definido como parte de ASCII, el conjunto de códigos de control C0 predeterminado ahora se define en ISO 6429 (ECMA-48), lo que lo convierte en parte del mismo estándar que el conjunto C1 invocado por las secuencias de escape ANSI (aunque ISO 2022 permite que ISO 6429 El conjunto C0 se utilizará sin el conjunto C1 ISO 6429, y viceversa , siempre que 0x1B sea siempre ESC). Esto se utiliza para acortar la cantidad de datos transmitidos o para realizar algunas funciones que no están disponibles en las secuencias de escape:
Las secuencias de escape varían en duración. El formato general para una secuencia de escape compatible con ANSI está definido por ANSI X3.41 (equivalente a ECMA-35 o ISO/IEC 2022). [12] : 13.1 Las secuencias de escape constan únicamente de bytes en el rango 0x20—0x7F (todos los caracteres ASCII que no son de control) y se pueden analizar sin mirar hacia adelante. El comportamiento cuando se encuentra un carácter de control, un byte con el bit alto establecido o un byte que no forma parte de ninguna secuencia válida antes del final no está definido.
Si el ESC va seguido de un byte en el rango de 0x40 a 0x5F, la secuencia de escape es de tipo Fe
. Su interpretación se delega a la norma del código de control C1 aplicable . [12] : 13.2.1 En consecuencia, todas las secuencias de escape correspondientes a los códigos de control C1 de ANSI X3.64/ECMA-48 siguen este formato. [5] : 5.3.a
El estándar dice que, en entornos de 8 bits, las funciones de control correspondientes a Fe
secuencias de escape de tipo (aquellas del conjunto de códigos de control C1 ) se pueden representar como bytes únicos en el rango 0x80–0x9F. [5] : 5.3.b Esto es posible en codificaciones de caracteres que cumplan con las disposiciones para un código de 8 bits realizadas en ISO 2022, como la serie ISO 8859 . Sin embargo, en las codificaciones de caracteres utilizadas en dispositivos modernos como UTF-8 o CP-1252 , esos códigos suelen utilizarse para otros fines, por lo que normalmente solo se utiliza la secuencia de 2 bytes. En el caso de UTF-8, representar un código de control C1 a través del bloque Controles C1 y Suplemento Latin-1 da como resultado un código diferente de dos bytes (por ejemplo, 0xC2,0x8E para U+008E ), pero no se guarda espacio de esta manera.
Para los comandos del Introductor de secuencia de control, o CSI, ESC [
(escrito como \e[
o \033[
en varios lenguajes de programación) va seguido de cualquier número (incluido ninguno) de "bytes de parámetros" en el rango 0x30–0x3F (ASCII 0–9:;<=>?
), luego de cualquier número de " bytes intermedios" en el rango 0x20–0x2F (espacio ASCII y !"#$%&'()*+,-./
), y finalmente por un único "byte final" en el rango 0x40–0x7E (ASCII @A–Z[\]^_`a–z{|}~
). [5] : 5.4
Todas las secuencias comunes simplemente usan los parámetros como una serie de números separados por punto y coma, como 1;2;3
. Los números faltantes se tratan como 0
( 1;;3
actúa como el número del medio 0
y ningún parámetro ESC[m
actúa como un 0
código de reinicio). Algunas secuencias (como CUU) se tratan 0
como 1
para que los parámetros faltantes sean útiles. [5] : F.4.2
Un subconjunto de disposiciones se declaró "privado" para que los fabricantes de terminales pudieran insertar sus propias secuencias sin entrar en conflicto con la norma. Las secuencias que contienen los bytes de parámetros <=>?
o los bytes finales 0x70–0x7E ( p–z{|}~
) son privadas.
El comportamiento del terminal no está definido en el caso de que una secuencia CSI contenga cualquier carácter fuera del rango 0x20–0x7E. Estos caracteres ilegales son caracteres de control C0 (el rango 0–0x1F), DEL (0x7F) o bytes con el bit alto establecido. Las posibles respuestas son ignorar el byte, procesarlo inmediatamente y, además, continuar con la secuencia CSI, abortarla inmediatamente o ignorar el resto. [ cita necesaria ]
La secuencia de control , denominada Seleccionar representación gráfica (SGR), establece los atributos de visualización. Se pueden establecer varios atributos en la misma secuencia, separados por punto y coma. [21] Cada atributo de visualización permanece vigente hasta que una siguiente aparición de SGR lo restablece. [5] Si no se proporcionan códigos, se trata como (reinicio/normal).CSI n m
CSI m
CSI 0 m
La especificación original solo tenía 8 colores y solo les daba nombres. Los parámetros SGR 30–37 seleccionaron el color de primer plano, mientras que 40–47 seleccionaron el fondo. Un buen número de terminales implementaron "negrita" (código SGR 1) como un color más brillante en lugar de una fuente diferente, proporcionando así 8 colores de primer plano adicionales. Por lo general, no es posible obtenerlos como colores de fondo, aunque a veces el video inverso (código SGR 7) lo permite. Ejemplos: para obtener letras negras sobre fondo blanco ESC[30;47m
, use, para obtener rojo ESC[31m
, para obtener rojo brillante ESC[1;31m
. Para restablecer los colores a sus valores predeterminados, utilice ESC[39;49m
(no compatible con algunos terminales) o restablezca todos los atributos con ESC[0m
. Los terminales posteriores agregaron la capacidad de especificar directamente los colores "brillantes" con 90–97 y 100–107.
El siguiente cuadro muestra algunos ejemplos de cómo los emuladores de terminales modernos y estándar VGA traducen los códigos de color de 4 bits a códigos de color de 24 bits.
A medida que las tablas de búsqueda de 256 colores se volvieron comunes en las tarjetas gráficas, se agregaron secuencias de escape para seleccionar entre un conjunto predefinido de 256 colores: [ cita necesaria ]
ESC[38;5; ⟨n⟩ m Seleccione el color de primer plano donde n es un número de la siguiente tablaESC[48;5; ⟨n⟩ m Seleccionar color de fondo 0- 7: colores estándar (como en ESC [ 30–37 m) 8- 15: colores de alta intensidad (como en ESC [ 90–97 m) 16-231: Cubo 6 × 6 × 6 (216 colores): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)232-255: escala de grises de oscuro a claro en 24 pasos
Tecnología de la información T.416 de la UIT - Arquitectura de documento abierto (ODA) y formato de intercambio: arquitecturas de contenido de caracteres [34] utiliza ":" como caracteres separadores en su lugar:
ESC[38:5: ⟨n⟩ m Seleccione el color de primer plano donde n es un número de la siguiente tablaESC[48:5: ⟨n⟩ m Seleccionar color de fondo
También ha habido una codificación de 88 colores similar pero incompatible usando la misma secuencia de escape, vista en rxvt
y xterm-88color
. No se sabe mucho sobre el esquema además de los códigos de color. Utiliza un cubo de colores de 4×4×4.
A medida que las tarjetas gráficas de "color verdadero" con 16 a 24 bits de color se volvieron comunes, las aplicaciones comenzaron a admitir colores de 24 bits. Los emuladores de terminal que admiten la configuración de colores de primer plano y fondo de 24 bits con secuencias de escape incluyen Xterm, [13] Konsole de KDE , [35] [36] e iTerm, así como todos los terminales basados en libvte, [37] incluido GNOME Terminal . [38]
ESC[38;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m Seleccione el color de primer plano RGBESC[48;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m Seleccione el color de fondo RGB
Es probable que la sintaxis se base en la Arquitectura de Documento Abierto (ODA) T.416 de la UIT y el formato de intercambio: Arquitecturas de contenido de caracteres, [34] que se adoptó como ISO/IEC 8613-6 pero terminó siendo un fracaso comercial. [ cita necesaria ] La versión ODA es más elaborada y, por lo tanto, incompatible:
ESC[38:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨ Tolerancia CS ⟩ : ⟨Color-Space asociado con la tolerancia: 0 para "CIELUV"; 1 para "CIELAB"⟩ m Seleccione el color de primer plano RGBESC[48:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨Tolerancia CS⟩ : ⟨Color-Space asociado con la tolerancia: 0 para "CIELUV"; 1 para "CIELAB"⟩ m Seleccione color de fondo RGB
La variación ITU-RGB es compatible con xterm, y se ignoran el ID del espacio de color y los parámetros de tolerancia. El esquema más simple que utiliza punto y coma se encuentra inicialmente en Konsole. [13] : ¿Puedo configurar un color por su número?
En lugar de usar el soporte de color en termcap y terminfo introducido en SVr3.2 (1987), [39] la biblioteca S-Lang (versión 0.99-32, junio de 1996) usó una variable de entorno separada $COLORTERM
para indicar si un emulador de terminal podía usar colores. en absoluto, y luego agregó valores para indicar si admitía color de 24 bits. [40] [41] Este sistema, aunque mal documentado, se generalizó lo suficiente como para que Fedora y RHEL consideraran usarlo como un mecanismo de detección más simple y universal en comparación con consultar las bibliotecas ahora actualizadas. [42]
Algunos emuladores de terminal (urxvt, konsole) están configurados $COLORFGBG
para informar la combinación de colores del terminal (principalmente fondo claro versus fondo oscuro). Este comportamiento se originó en S-Lang [41] y es utilizado por vim. Gnome-terminal se niega a agregar este comportamiento, ya que la sintaxis para el valor no está acordada, el valor no se puede cambiar al cambiar la paleta en tiempo de ejecución y ya existen más secuencias xterm OSC 4/10/11 "adecuadas". [43]
La mayoría de las secuencias de comandos del sistema operativo fueron definidas por Xterm, pero muchas también son compatibles con otros emuladores de terminal. Por razones históricas, Xterm puede finalizar el comando con BEL(0x07) así como con el estándar ST
(0x9C o 0x1B 0x5C). [13] Por ejemplo, Xterm permite que el título de la ventana se establezca mediante ESC ]0;this is the window title BEL
.
Una extensión que no es de xterm es el hipervínculo, ESC ]8;;link ST
de 2017, utilizado por VTE, [44] [ discute ] iTerm2, [44] y mintty, [45] entre otros. [46]
La consola de Linux utiliza ESC ] P n rr gg bb
para cambiar la paleta, que, si está codificada en una aplicación, puede bloquear otras terminales. [47] Sin embargo, ST
Linux ignorará los anexos y formará una secuencia adecuada e ignorable para otros terminales. [ cita necesaria ]
Si ESC
va seguido de un byte en el rango 0x60—0x7E , la secuencia de escape es de tipo . Este tipo se utiliza para funciones de control registradas individualmente en el registro ISO-IR . [48] En ISO/IEC 2022 se incluye una tabla de estos .Fs
Si ESC
va seguido de un byte en el rango 0x30—0x3F , la secuencia de escape es de tipo , que está reservada para hasta dieciséis funciones de control de uso privado. [12] : 6.5.3 Fp
Si ESC
va seguido de un byte en el rango 0x20—0x2F , la secuencia de escape es de tipo . Dicho byte es seguido por cualquier número de bytes adicionales en este rango, y luego un byte en el rango 0x30-0x7E . Estas secuencias de escape están además subcategorizadas por los dos bits inferiores del primer byte, por ejemplo, "tipo " para secuencias en las que el primer byte es 0x22 ; y por si el byte final está en el rango 0x30—0x3F, lo que indica uso privado (por ejemplo, "tipo ") o no (por ejemplo, "tipo "). [12] : 13.2.1 nF
2F
2Fp
2Ft
La mayoría de las nFt
secuencias sirven para cambiar el juego de caracteres actual y se enumeran en ISO/IEC 2022 . Algunos otros:
Si el primer byte es '#', las secuencias públicas están reservadas para funciones de control individuales registradas ISO-IR adicionales. [12] : 6.5.2 Actualmente no se han registrado secuencias de este tipo. [48] Las secuencias de tipos 3Fp
(que incluyen las que comienzan con '#') están disponibles para funciones de control de uso privado. [12] : 6.5.3
CSI 2 J
— Esto borra la pantalla y, en algunos dispositivos, ubica el cursor en la posición y,x 1,1 (esquina superior izquierda).
CSI 32 m
— Esto hace que el texto sea verde. El verde puede ser un verde oscuro y opaco, por lo que es posible que desees habilitar Negrita con la secuencia CSI 1 m
que lo haría verde brillante, o combinarlo como CSI 32 ; 1 m
. Algunas implementaciones utilizan el estado Negrita para hacer que el carácter sea Brillante.
CSI 0 ; 6 8 ; "DIR" ; 13 p
— Esto reasigna la tecla F10 para enviar al búfer del teclado la cadena "DIR" y ENTER, que en la línea de comando de DOS mostraría el contenido del directorio actual. (Sólo MS-DOS ANSI.SYS) A veces se utilizaba para bombas ANSI . Este es un código de uso privado (como lo indica la letra p), que utiliza una extensión no estándar para incluir un parámetro con valor de cadena. Siguiendo la letra de la norma se consideraría que la secuencia terminara en la letra D.
CSI s
— Esto guarda la posición del cursor. Usar la secuencia CSI u
lo restaurará a la posición. Digamos que la posición actual del cursor es 7(y) y 10(x). La secuencia CSI s
guardará esos dos números. Ahora puedes moverte a una posición diferente del cursor, como 20(y) y 3(x), usando la secuencia CSI 20 ; 3 H
o CSI 20 ; 3 f
. Ahora, si usa la secuencia CSI u, la posición del cursor volverá a 7(y) y 10(x). Algunos terminales requieren las secuencias DEC ESC 7
/ ESC 8
en su lugar, que es más ampliamente compatible.
Los códigos de escape ANSI se utilizan a menudo en UNIX y terminales similares a UNIX para resaltar la sintaxis . Por ejemplo, en terminales compatibles, el siguiente comando de lista codifica por colores los nombres de archivos y directorios por tipo.
ls-color
Los usuarios pueden emplear códigos de escape en sus scripts incluyéndolos como parte de la salida estándar o del error estándar . Por ejemplo, el siguiente comando sed de GNU embellece la salida del comando make mostrando líneas que contienen palabras que comienzan con "WARN" en video inverso y palabras que comienzan con "ERR" en amarillo brillante sobre un fondo rojo oscuro ( se ignoran las mayúsculas y minúsculas ). Las representaciones de los códigos están resaltadas. [53]
hacer 2>&1 | sed -e 's/.*\bWARN.*/ \x1b[7m & \x1b[0m /i' -e 's/.*\bERR.*/ \x1b[93;41m & \x1b[0m /i '
La siguiente función Bash hace parpadear el terminal (enviando alternativamente códigos de modo de video inverso y normal) hasta que el usuario presiona una tecla. [54]
flasher () { while true; do printf
\\e[?5h \\e[?5l; sleep 0.1; printf
; read -s -n1 -t1 && break; done; }
Esto se puede utilizar para alertar a un programador cuando finaliza un comando largo, como con make ; flasher
. [55]
imprimirf \\ 033c
Esto restablecerá la consola, similar al comando reset
en los sistemas Linux modernos; sin embargo, debería funcionar incluso en sistemas Linux más antiguos y en otras variantes de UNIX (no Linux).
#incluir <stdio.h> int principal ( vacío ) { int yo , j , n ; para ( yo = 0 ; yo < 11 ; yo ++ ) { para ( j = 0 ; j < 10 ; j ++ ) { norte = 10 * yo + j ; si ( n > 108 ) se rompe ; printf ( " \033 [%dm %3d \033 [m" , n , n ); } printf ( " \n " ); } devolver 0 ; }
Al presionar teclas especiales en el teclado, además de generar muchas secuencias xterm CSI, DCS u OSC, a menudo se produce una secuencia CSI, DCS u OSC, enviada desde el terminal a la computadora como si el usuario la hubiera escrito.
Al escribir en un terminal, las pulsaciones de teclas fuera del área normal del teclado alfanumérico principal se pueden enviar al host como secuencias ANSI. Para las teclas que tienen una función de salida equivalente, como las teclas de cursor, estas suelen reflejar las secuencias de salida. Sin embargo, para la mayoría de las pulsaciones de teclas no existe una secuencia de salida equivalente a utilizar.
Existen varios esquemas de codificación y, desafortunadamente, la mayoría de los terminales mezclan secuencias de diferentes esquemas, por lo que el software anfitrión debe poder manejar secuencias de entrada utilizando cualquier esquema. Para complicar el asunto, los propios terminales VT tienen dos esquemas de entrada, modo normal y modo de aplicación que pueden ser conmutados por la aplicación.
(borrador de sección)
<carácter> -> carbón<esc> <nochar> -> esc<esc> <esc> -> esc<esc> <char> -> Pulsación de tecla Alt o secuencia de código de tecla<esc> '[' <nochar> -> Alt-[<esc> '[' (<modificador>) <char> -> secuencia de código clave, <modificador> es un número decimal y el valor predeterminado es 1 (xterm)<esc> '[' (<código clave>) (';'<modificador>) '~' -> secuencia de código clave, <código clave> y <modificador> son números decimales y el valor predeterminado es 1 (vt)
Si el carácter final es '~', el primer número debe estar presente y es un número de código clave, el segundo número es un valor modificador opcional. Si el carácter final es una letra, la letra es el valor del código clave y el número opcional es el valor del modificador.
El valor del modificador tiene por defecto 1 y, después de restar 1, aparece un mapa de bits de las teclas modificadoras que se presionan: Meta+ Ctrl+ Alt+ ⇧ Shift. Entonces, por ejemplo, <esc>[4;2~
es + , es tecla de función , es + .⇧ ShiftEnd<esc>[20~
F9<esc>[5C
Ctrl→
En otras palabras, el modificador es la suma de los siguientes números:
secuencias vt:<esc>[1~ - Inicio <esc>[16~ - <esc>[31~ - F17<esc>[2~ - Insertar <esc>[17~ - F6 <esc>[32~ - F18<esc>[3~ - Eliminar <esc>[18~ - F7 <esc>[33~ - F19<esc>[4~ - Fin <esc>[19~ - F8 <esc>[34~ - F20<esc>[5~ - Re Pág <esc>[20~ - F9 <esc>[35~ -<esc>[6~ - AvPág <esc>[21~ - F10 <esc>[7~ - Inicio <esc>[22~ - <esc>[8~ - Fin <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~ -secuencias xterm:<esc>[A - Arriba <esc>[K - <esc>[U -<esc>[B - Abajo <esc>[L - <esc>[V -<esc>[C - Derecha <esc>[M - <esc>[W -<esc>[D - Izquierda <esc>[N - <esc>[X -<esc>[E - <esc>[O - <esc>[Y -<esc>[F - Fin <esc>[1P - F1 <esc>[Z -<esc>[G - Teclado 5 <esc>[1Q - F2 <esc>[H - Inicio <esc>[1R - F3 <esc>[I - <esc>[1S - F4 <esc>[J-<esc>[T-
<esc>[A
son <esc>[D
las mismas que las secuencias de salida ANSI. Normalmente se <modifier>
omite si no se presiona ninguna tecla modificadora, pero la mayoría de las implementaciones siempre emiten <modifier>
for – . (borrador de sección)F1F4
Xterm tiene una página de documentación completa sobre los diversos esquemas de secuencia de entrada de teclas de función y mouse de los terminales VT de DEC y varios otros terminales que emula. [13] Thomas Dickey le ha agregado mucho apoyo a lo largo del tiempo; [56] también mantiene una lista de claves predeterminadas utilizadas por otros emuladores de terminal para comparar. [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
cualquier carácter que se escribe con la tecla Alt presionada. Esto crea ambigüedad para las letras mayúsculas y los símbolos @[\]^_
, que formarían códigos C1. [ se necesita aclaración ]SS3 modifiers char
F1F4esto incluye retirar la interfaz de usuario del host de consola clásica de su posición predeterminada en favor de Windows Terminal, ConPTY y secuencias de terminal virtual.