Las secuencias de escape ANSI son un estándar para la señalización en banda que permite controlar la ubicación del cursor, el color, el estilo de fuente y otras opciones en terminales de texto de video y emuladores de terminal . Ciertas secuencias de bytes , la mayoría de las cuales comienzan con un carácter de escape ASCII y un carácter de corchete , se incrustan en el texto. El terminal interpreta estas secuencias como comandos, en lugar de texto para mostrarlas textualmente.
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. Aunque las terminales de texto de hardware se han vuelto cada vez más raras en el siglo XXI, la relevancia del estándar ANSI persiste porque una gran mayoría de emuladores de terminales y consolas de comandos interpretan al menos una parte del estándar ANSI.
Casi todos los fabricantes de terminales de vídeo añadieron secuencias de escape específicas del proveedor para realizar operaciones como la colocación del cursor en posiciones arbitrarias de la pantalla. Un ejemplo es el terminal VT52 , que permitía colocar el cursor en una posición x,y de la pantalla enviando el ESC
carácter, un Y
carácter y, a continuación, dos caracteres que representaban valores numéricos iguales a la posición x,y más 32 (empezando así por el carácter de espacio ASCII y evitando los caracteres de control). El Hazeltine 1500 tenía una función similar, que se invocaba utilizando ~
, DC1
y, a continuación, las posiciones X e Y separadas por una coma. Aunque los dos terminales tenían una funcionalidad idéntica en este sentido, se debían utilizar secuencias de control diferentes para invocarlos.
Como estas secuencias eran diferentes para los distintos 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 enviar números (como filas y columnas) 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ó resolver estos problemas creando un conjunto de comandos que todos los terminales utilizarían y exigiendo 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, el primero de los cuales fue ECMA-6 de 1965, un estándar de 7 bits del que se originó 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 admitió 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 cuales el primero y más popular fue 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 los admitieran.
En 1981, el gobierno de los EE. UU. adoptó la norma ANSI X3.64 mediante la publicación FIPS 86. Más tarde, el gobierno de los EE. UU. dejó de duplicar estándares industriales, por lo que se retiró la publicación FIPS 86. [4]
La ECMA-48 se ha actualizado varias veces y actualmente se encuentra en su quinta edición, de 1991. También es adoptada por ISO e IEC como estándar ISO/IEC 6429. [5] Una versión es adoptada como Estándar Industrial Japonés , como JIS X 0211 .
Entre los estándares relacionados se encuentran el estándar Teletex ITU T.61 y el estándar Open Document Architecture ISO/IEC 8613 (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 son necesariamente significativas para los terminales de computadora. Ambos sistemas cayeron rápidamente en desuso, pero ECMA-48 marca las extensiones utilizadas en ellos como reservadas.
A principios de los años 80, una gran cantidad de software utilizaba directamente estas secuencias para actualizar las pantallas. Esto incluía todo lo que se encontraba en VMS (que suponía terminales DEC), la mayoría del software diseñado para ser portátil en ordenadores domésticos 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 personales y domésticas. En Unix, los emuladores de terminal como xterm también pueden comunicarse con software que se ejecuta en la misma máquina y, por lo tanto, el software que se ejecuta en X11 bajo 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 incorporadas comenzaron a admitirlas, lo que permitió que el software fuera portátil entre sistemas CP/M. Hubo intentos de extender las secuencias de escape para admitir impresoras [6] y, como un formato de almacenamiento de documentos similar al PDF, la Arquitectura de Documento Abierto . [ cita requerida ]
El IBM PC, presentado en 1983, no admitía estas ni ninguna otra secuencia de escape para actualizar la pantalla. El BIOS subyacente solo interpretaba unos pocos caracteres de control ( BEL , CR , LF , BS ). Cualquier efecto de visualización debía realizarse con llamadas al BIOS, que eran notoriamente lentas, o manipulando directamente el hardware del IBM PC. Esto hacía que cualquier software interesante no fuera portátil y condujo a la necesidad de duplicar los detalles del hardware de visualización en PC Clones .
La versión 2.0 de DOS incluía un controlador de dispositivo opcional llamado ANSI.SYS . Su bajo rendimiento y el hecho de que no se instalara de forma predeterminada implicaban que el software rara vez (o nunca) lo aprovechaba.
La consola de Windows no admitía secuencias de escape ANSI, ni tampoco Microsoft proporcionaba ningún método para habilitarlas. Algunos sustitutos, como TCC de JP Software (anteriormente 4NT), ANSI.COM de Michael J. Mefford, ANSICON de Jason Hood [7] y ConEmu de Maximus5, habilitaban secuencias de escape ANSI. El software como el paquete Python colorrama [8] o Cygwin modificaban el texto en proceso a medida que se enviaba a la consola, extrayendo las secuencias de escape ANSI y emulándolas con llamadas de Windows.
En 2016, Microsoft lanzó la actualización de la versión 1511 de Windows 10 que inesperadamente implementó soporte para secuencias de escape ANSI, más de tres décadas después del debut de Windows. [9] Esto se hizo junto con el Subsistema de Windows para Linux , aparentemente para permitir que el software basado en terminal similar a Unix use la Consola de Windows. Windows PowerShell 5.1 habilitó esto de manera predeterminada, y PowerShell 6 hizo posible incrustar el carácter ESC necesario en una cadena con . [10]`e
Windows Terminal , introducido en 2019, admite las 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 está definido 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 el conjunto C0 de ISO 6429 se use sin el conjunto C1 de ISO 6429, y viceversa , siempre que 0x1B sea siempre ESC). Esto se usa 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 longitud. 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 es 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 en el estándar de 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 individuales en el rango 0x80–0x9F. [5] : 5.3.b Esto es posible en codificaciones de caracteres que cumplen con las disposiciones para un código de 8 bits realizadas en ISO 2022, como la serie ISO 8859. Sin embargo, en codificaciones de caracteres utilizadas en dispositivos modernos como UTF-8 o CP-1252 , esos códigos se utilizan a menudo 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 de Controles C1 y Suplemento Latin-1 da como resultado un código de dos bytes diferente (por ejemplo, 0xC2,0x8E para U+008E ), pero de esta manera no se ahorra espacio.
En el caso de los comandos de introducción de secuencia de control o CSI, el ESC [
(escrito como \e[
o \033[
en varios lenguajes de programación) va seguido de cualquier número (incluso ninguno) de "bytes de parámetro" en el rango 0x30–0x3F (ASCII 0–9:;<=>?
), luego de cualquier número de "bytes intermedios" en el rango 0x20–0x2F (ASCII espacio y !"#$%&'()*+,-./
), y finalmente de 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
. [5] : 5.4.2 Los números faltantes se tratan como 0
( 1;;3
actúa como si el número del medio fuera 0
, y ningún parámetro en absoluto ESC[m
actúa como un 0
código de reinicio). Algunas secuencias (como CUU) tratan 0
como 1
para que los parámetros faltantes sean útiles. [5] : F.4.2
Se declaró "privado" un subconjunto de disposiciones para que los fabricantes de terminales pudieran insertar sus propias secuencias sin entrar en conflicto con el estándar. 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 en que una secuencia CSI contenga algún carácter fuera del rango 0x20–0x7E. Estos caracteres ilegales son caracteres de control C0 (rango 0–0x1F), DEL (0x7F) o bytes con el bit alto activado. Las posibles respuestas son ignorar el byte, procesarlo inmediatamente y, además, continuar con la secuencia CSI, abortarla inmediatamente o ignorar el resto. [ cita requerida ]
La secuencia de control , denominada Select Graphic Rendition (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 ocurrencia de SGR lo restablezca. [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 seleccionaban el color de primer plano, mientras que 40–47 seleccionaban el de fondo. Unas cuantas 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 se podían obtener como colores de fondo, aunque a veces el video inverso (código SGR 7) lo permitía. Ejemplos: para obtener letras negras sobre fondo blanco, use ESC[30;47m
, para obtener rojo, use ESC[31m
, para obtener rojo brillante, use ESC[1;31m
. Para restablecer los colores a sus valores predeterminados, use ESC[39;49m
(no compatible con algunas terminales) o restablezca todos los atributos con ESC[0m
. Las terminales posteriores agregaron la capacidad de especificar directamente los colores "brillantes" con 90–97 y 100–107.
La siguiente tabla muestra algunos ejemplos de cómo el estándar VGA y los emuladores de terminal modernos traducen los códigos de color de 4 bits en códigos de color de 24 bits.
A medida que las tablas de búsqueda de 256 colores se hicieron comunes en las tarjetas gráficas, se agregaron secuencias de escape para seleccionar entre un conjunto predefinido de 256 colores: [ cita requerida ]
ESC[38;5; ⟨n⟩ m Selecciona 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 de 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
La 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 lugar de:
ESC[38:5: ⟨n⟩ m Selecciona el color de primer plano donde n es un número de la tabla siguienteESC[48:5: ⟨n⟩ m Seleccionar color de fondo
También se ha utilizado una codificación de 88 colores similar pero incompatible que utiliza la misma secuencia de escape, como se vio en rxvt
y xterm-88color
. No se sabe mucho sobre el esquema, aparte de los códigos de color. Utiliza un cubo de color de 4×4×4.
A medida que las tarjetas gráficas de "color verdadero" con 16 a 24 bits de color se hicieron 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 de 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 Selecciona el color de primer plano RGBESC[48;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m Selecciona 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 en 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 requerida ] La versión ODA es más elaborada y, por lo tanto, incompatible:
ESC[38:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨ CS tolerance ⟩ : ⟨Color-Space asociado con la tolerancia: 0 para "CIELUV"; 1 para "CIELAB"⟩ m Seleccionar color de primer plano RGBESC[48:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨CS tolerance⟩ : ⟨Color-Space asociado con la tolerancia: 0 para "CIELUV"; 1 para "CIELAB"⟩ m Seleccionar color de fondo RGB
La variante ITU-RGB es compatible con xterm, sin tener en cuenta los parámetros de tolerancia e identificación del espacio de color. El esquema más simple que utiliza punto y coma se encuentra inicialmente en Konsole. [13] : ¿Puedo establecer un color por su número?
En lugar de utilizar 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) utilizó una variable de entorno separada $COLORTERM
para indicar si un emulador de terminal podía usar colores, y más tarde agregó valores para indicar si admitía color de 24 bits. [40] [41] Este sistema, aunque pobremente documentado, se generalizó lo suficiente para que Fedora y RHEL consideraran usarlo como un mecanismo de detección más simple y universal en comparación con la consulta de las bibliotecas ahora actualizadas. [42]
Algunos emuladores de terminal (urxvt, konsole) están configurados $COLORFGBG
para informar el esquema de colores de la terminal (principalmente fondo claro vs. fondo oscuro). Este comportamiento se originó en S-Lang [41] y lo utiliza vim. Gnome-terminal se niega a agregar este comportamiento, ya que no se ha acordado la sintaxis para el valor, el valor no se puede cambiar en un cambio de paleta en tiempo de ejecución y ya existen secuencias xterm OSC 4/10/11 más "adecuadas". [43]
La mayoría de las secuencias de comandos del sistema operativo fueron definidas por Xterm, pero muchas de ellas 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 con ESC ]0;this is the window title BEL
.
Una extensión que no es xterm es el hipervínculo, ESC ]8;;link ST
de 2017, utilizado por VTE, [44] [ discutir ] iTerm2, [44] y mintty, [45] entre otros. [46]
La consola de Linux se utiliza ESC ] P n rr gg bb
para cambiar la paleta, lo cual, si está codificado en una aplicación, puede bloquear otras terminales. [47] Sin embargo, ST
Linux ignorará la adición y formará una secuencia adecuada que otras terminales podrán ignorar. [ cita requerida ]
Si ESC
va seguido de un byte en el rango 0x60—0x7E , la secuencia de escape es del tipo . Este tipo se utiliza para funciones de control registradas individualmente con el registro ISO-IR . [48] En ISO/IEC 2022 se incluye una tabla de estas .Fs
Si ESC
va seguido de un byte en el rango 0x30—0x3F , la secuencia de escape es del 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 del tipo . Dicho byte va seguido de cualquier número de bytes adicionales en este rango, y luego de un byte en el rango 0x30-0x7E . Estas secuencias de escape se subcategorizan a su vez por los dos bits inferiores del primer byte, p. ej., "type " 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 un uso privado (p. ej., "type ") o no (p. ej., "type "). [12] : 13.2.1 nF
2F
2Fp
2Ft
La mayoría de las nFt
secuencias sirven para cambiar el conjunto de caracteres actual y están incluidas en la norma ISO/IEC 2022. Otras:
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 No hay secuencias de este tipo registradas actualmente. [48] Las secuencias de tipo 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 limpia 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 desee habilitar Negrita con la secuencia CSI 1 m
que lo haría verde brillante, o combinado como CSI 32 ; 1 m
. Algunas implementaciones usan 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 buffer del teclado la cadena "DIR" y ENTER, que en la línea de comandos DOS mostraría el contenido del directorio actual. (Solo MS-DOS ANSI.SYS) Esto se usaba a veces para bombas ANSI . Este es un código de uso privado (como lo indica la letra p), que usa una extensión no estándar para incluir un parámetro con valor de cadena. Seguir la letra del estándar consideraría que la secuencia termina en la letra D.
CSI s
— Esto guarda la posición del cursor. El uso de 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 puede moverse a una posición de cursor diferente, como 20(y) y 3(x), utilizando la secuencia CSI 20 ; 3 H
o CSI 20 ; 3 f
. Ahora, si utiliza la secuencia CSI u, la posición del cursor volverá a 7(y) y 10(x). Algunas terminales requieren las secuencias DEC ESC 7
/ ESC 8
en su lugar, que son más compatibles.
Los códigos de escape ANSI se utilizan a menudo en terminales UNIX y similares para resaltar la sintaxis . Por ejemplo, en terminales compatibles, el siguiente comando list 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 GNU sed 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 flashea el terminal (alternando códigos de modo de video inverso y normal) hasta que el usuario presione 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 reiniciará la consola, de forma 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 (que no sean Linux).
#incluir <stdio.h> int principal ( vacío ) { entero i , j , n ; para ( i = 0 ; i < 11 ; i ++ ) { para ( j = 0 ; j < 10 ; j ++ ) { n = 10 * i + j ; si ( n > 108 ) se rompe ; printf ( " \033 [%dm %3d \033 [m" , n , n ); } printf ( " \n " ); } devuelve 0 ; }
Al presionar teclas especiales en el teclado, además de generar muchas secuencias CSI, DCS u OSC de xterm, a menudo se produce una secuencia CSI, DCS u OSC, enviada desde la 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. En el caso de las teclas que tienen una función de salida equivalente, como las teclas del 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 que se pueda utilizar.
Existen varios esquemas de codificación y, lamentablemente, la mayoría de los terminales mezclan secuencias de diferentes esquemas, por lo que el software host debe poder manejar secuencias de entrada que utilicen 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.
(sección borrador)
<carácter> -> carácter<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 de tecla, <modificador> es un número decimal y el valor predeterminado es 1 (xterm)<esc> '[' (<keycode>) (';'<modifier>) '~' -> secuencia de código de tecla, <keycode> y <modifier> son números decimales y el valor predeterminado es 1 (vt)
Si el carácter de terminación es '~', el primer número debe estar presente y es un número de código de tecla, el segundo número es un valor modificador opcional. Si el carácter de terminación es una letra, la letra es el valor de código de tecla y el número opcional es el valor modificador.
El valor del modificador predeterminado es 1 y, después de restar 1, aparece un mapa de bits de las teclas modificadoras presionadas: Meta+ Ctrl+ Alt+ ⇧ Shift. 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
to <esc>[D
son las mismas que las secuencias de salida ANSI. <modifier>
Normalmente se omite si no se presiona ninguna tecla modificadora, pero la mayoría de las implementaciones siempre emiten for <modifier>
– . (sección borrador)F1F4
Xterm tiene una página de documentación completa sobre los distintos esquemas de secuencias de entrada de teclas de función y de ratón de los terminales VT de DEC y otros terminales que emula. [13] Thomas Dickey le ha añadido mucho soporte con el tiempo; [56] también mantiene una lista de teclas predeterminadas utilizadas por otros emuladores de terminal para comparación. [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
a cualquier carácter que se escriba con la tecla Alt presionada. Esto crea ambigüedad para letras mayúsculas y símbolos @[\]^_
, que formarían códigos C1. [ Aclaración necesaria ]SS3 modifiers char
F1F4Esto incluye retirar la interfaz de usuario del host de consola clásica de su posición predeterminada a favor de Windows Terminal, ConPTY y secuencias de terminal virtual.