stringtranslate.com

Código de escape ANSI

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.

Historia

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 ESCcarácter, un Ycará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 ~, DC1y, 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 diferentes secuencias de control 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.

Terminal DEC VT100
El terminal de visualización de vídeo DEC VT100.

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.

Soporte de plataforma

Emulador de terminal Xterm
El emulador de terminal Xterm.

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 ]

DOS y Windows

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]

Descripción

Códigos de control de C0

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.

Secuencias de escape de Fe

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 Fesecuencias 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.

Secuencias CSI (Introductor de secuencia de control)

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;;3actúa como si el número del medio fuera 0, y ningún parámetro en absoluto ESC[mactúa como un 0código de reinicio). Algunas secuencias (como CUU) tratan 0como 1para 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 ]

Parámetros de SGR (selección de representación gráfica)

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 mCSI mCSI 0 m

Bandera

3 bits y 4 bits

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.

8 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 rxvty 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.

24 bits

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? 

Variables de entorno de Unix relacionadas con la compatibilidad de colores

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 $COLORTERMpara 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 $COLORFGBGpara 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]

Secuencias OSC (comandos del sistema operativo)

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 STde 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 bbpara cambiar la paleta, lo cual, si está codificado en una aplicación, puede bloquear otras terminales. [47] Sin embargo, STLinux ignorará la adición y formará una secuencia adecuada que otras terminales podrán ignorar. [ cita requerida ]

Secuencias de escape Fs

Si ESCva 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

Secuencias de escape Fp

Si ESCva 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

Secuencias de escape nF

Si ESCva 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 nF2F2Fp2Ft

La mayoría de las nFtsecuencias 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 

Ejemplos

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 mque 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 ulo restaurará a la posición. Digamos que la posición actual del cursor es 7(y) y 10(x). La secuencia CSI sguardará 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 Ho 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 8en su lugar, que son más compatibles.

En scripts de shell

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 reseten 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).

Salida del programa de ejemplo en la terminal de Gnome
#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 ; }

Secuencias de entrada de terminales

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>[5CCtrl

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>[Ato <esc>[Dson 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]

Véase también

Notas

  1. ^ Colores típicos que se utilizan al arrancar una PC y dejarla en modo texto, que utiliza una tabla de colores de 16 entradas. Los colores son diferentes en los modos gráficos EGA/VGA.
  2. ^ Visto en Windows XP hasta Windows 8.1
  3. ^ El acceso directo predeterminado de PowerShell .lnk , sin cambios durante más de una década, reasigna el amarillo y el magenta para brindar a PowerShell colores de primer plano y fondo distintivos en comparación con el Símbolo del sistema. [30] PowerShell 7 no se ve afectado.
  4. ^ Consola de depuración, tema "Dark+"
  5. ^ Tema Campbell, utilizado a partir de la versión 1709 de Windows 10.
  6. ^ Para terminales virtuales, desde /etc/vtrgb.
  7. ^ En terminales basados ​​en hardware compatible con CGA , como ANSI.SYS que se ejecuta en DOS, este color de primer plano de intensidad normal se representa como naranja. Los monitores CGA RGBI contenían hardware para modificar el color amarillo oscuro a un color naranja/marrón al reducir el componente verde [31]

Referencias

  1. ^ ab "Estándar ECMA-48: Funciones de control para dispositivos de E/S de imágenes de caracteres" (PDF) (Segunda edición). Ecma International . Agosto de 1979. Breve historia.
  2. ^ Williams, Paul (2006). "Terminales de vídeo digitales". VT100.net . Consultado el 17 de agosto de 2011 .
  3. ^ Heathkit Company (1979). «Catálogo Heathkit 1979». Heathkit Company. Archivado desde el original el 13 de enero de 2012. Consultado el 4 de noviembre de 2011 .
  4. ^ "Fips retirados enumerados por número" (PDF) . Instituto Nacional de Estándares y Tecnología . 15 de diciembre de 2016 . Consultado el 2 de enero de 2022 .
  5. ^ abcdefghijklmnop "Estándar ECMA-48: Funciones de control para conjuntos de caracteres codificados" (PDF) (Quinta edición). Ecma International . Junio ​​de 1991.
  6. ^ "Definiciones de comandos de impresora de Amiga". Commodore . Consultado el 10 de julio de 2013 .
  7. ^ Hood, Jason (2005). "Procesar secuencias de escape ANSI para programas de consola de Windows". Página de inicio de Jason Hood . Consultado el 9 de mayo de 2013 .
  8. ^ "colorama · PyPI". Índice de paquetes de Python . Consultado el 27 de febrero de 2022 .
  9. ^ bitcrazed. "Secuencias de terminal virtual de consola - Consola de Windows". docs.microsoft.com . Consultado el 30 de mayo de 2018 .
  10. ^ "Ayuda de PowerShell: Acerca de los caracteres especiales". 12 de enero de 2023.
  11. ^ "Hoja de ruta del ecosistema de consola y terminal de Windows". Microsoft. 2018. Consultado el 13 de marzo de 2021. Esto 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.
  12. ^ abcdefghi "Estándar ECMA-35: Estructura del código de caracteres y técnicas de extensión" (PDF) (sexta edición). Ecma International . 1994.
  13. ^ abcdefghijklmn Moy, Edward; Gildea, Stephen; Dickey, Thomas (2019). "Secuencias de control de XTerm (ctlseqs)". La isla invisible .
  14. ^ Frank da Cruz; Christine Gianone (1997). Utilizando C-Kermit. Digital Press. p. 278. ISBN 978-1-55558-164-0.
  15. ^ "SCOSC—Guardar la posición actual del cursor". Información del programador de terminal de video VT510 . DEC .
  16. ^ "DECSLRM—Establecer márgenes izquierdo y derecho". Información del programador de terminal de video VT510 . DEC .
  17. ^ "SCORC—Restaurar posición de cursor guardada". Información del programador de terminal de video VT510 . DEC .
  18. ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas. "Secuencias de control de XTerm". Funciones que utilizan CSI, ordenadas por el/los carácter(es) final(es) . Consultado el 4 de febrero de 2022 .
  19. ^ Conrad Irwin (abril de 2013). "modo de pegado entre corchetes". cirw.in .
  20. ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas. "Secuencias de control de XTerm". Modo de pegado entre corchetes . Consultado el 4 de febrero de 2022 .
  21. ^ "console_codes(4) - Página del manual de Linux". man7.org . Consultado el 23 de marzo de 2018 .
  22. ^ ab "screen(HW)". Manual de SCO OpenServer versión 5.0.7 . 11 de febrero de 2003.
  23. ^ "Error 791596 – Pensamientos sobre el desmayo (SGR 2)". bugzilla.gnome.org .
  24. ^ abc "Subrayados rizados y coloreados (#6382) · Problemas · George Nachman / iterm2". GitLab . 11 de diciembre de 2017.
  25. ^ abc "Extensiones del protocolo xterm". documentación de kitty . Consultado el 1 de julio de 2020 .
  26. ^ "Subrayados rizados y coloreados". KDE bugtracker . 27 de agosto de 2022.
  27. ^ "consola-termio-realizador". jdebp.uk .
  28. ^ "console_codes(4)". Manual del programador de Linux . 5.10. Proyecto de páginas de manual de Linux .
  29. ^ abc "mintty/mintty: Atributos de texto y representación". GitHub .
  30. ^ "El acceso directo predeterminado en Windows reasigna los colores ANSI 35,36 · Problema n.° 4266 · PowerShell/PowerShell". GitHub . Consultado el 21 de diciembre de 2022 .
  31. ^ "Paleta CGA real y salida de color del IBM 5153". VileR. 11 de junio de 2022. Consultado el 18 de mayo de 2024 .
  32. ^ Cambiado de 0, 0, 205 en julio de 2004 "Parche n.° 192 – 12/7/2004 – XFree86 4.4.99.9".
  33. ^ Cambiado de 0, 0, 255 en julio de 2004 "Parche n.° 192 – 12/7/2004 – XFree86 4.4.99.9".
  34. ^ abc "T.416 Tecnología de la información - Arquitectura de Documento Abierto (ODA) y formato de intercambio: Arquitecturas de contenido de caracteres".
  35. ^ "color-spaces.pl (una copia de 256colors2.pl de xterm con fecha del 11 de julio de 1999)". KDE. 6 de diciembre de 2006.[ enlace muerto permanente ]
  36. ^ "README.másColores". KDE. 22 de abril de 2010.
  37. ^ "Informe de errores y parches de libvte: compatibilidad con 16 millones de colores". Bugzilla de GNOME. 4 de abril de 2014. Consultado el 5 de junio de 2016 .
  38. ^ "¿Cómo habilitar el soporte de color verdadero de 24 bits en la terminal Gnome?".
  39. ^ "Historial". curs_color(3X) - manipula los colores de la terminal con curses.
  40. ^ "Comandante de medianoche: lib/tty/color-slang.c". Fossies .
  41. ^ ab Dickey, Thomas E. (2017). "NCURSES — comentarios sobre S-Lang". invisible-island.net .
  42. ^ "Características/Terminales de 256 colores - Wiki del Proyecto Fedora". Proyecto Fedora . Archivado desde el original el 4 de octubre de 2012.
  43. ^ "Error 733423: configure la variable de entorno COLORFGBG para la detección automática de color". bugzilla.gnome.org .
  44. ^ de Koblinger, Egmont. "Hipervínculos (también conocidos como anclas tipo HTML) en emuladores de terminal". GitHub Gists .
  45. ^ "mintty/mintty: secuencias de control". GitHub .
  46. ^ Koblinger, Egmont. "Adopción de OSC 8 en emuladores de terminal". GitHub .
  47. ^ "console_codes — secuencias de control y escape de la consola de Linux". Manual del programador de Linux .
  48. ^ ab ISO-IR: Registro internacional ISO/IEC de conjuntos de caracteres codificados para su uso con secuencias de escape (PDF) . ITSCJ/ IPSJ . Consultado el 12 de mayo de 2023 .
  49. ^ ab Digital . "DECSC—Guardar cursor". Información del programador de terminal de video VT510 .
  50. ^ ab ANSI Escape sequences - VT100 / VT52, archivado desde el original el 27 de febrero de 2009 , consultado el 21 de agosto de 2020
  51. ^ Digital . "DECSWL: línea de un solo ancho y una sola altura". Información del programador de terminal de video VT510 .
  52. ^ Digital . "DECDWL: línea de doble ancho y altura simple". Información del programador de terminal de video VT510 .
  53. ^ "Capítulo 9. Consejos del sistema". debian.org .
  54. ^ "VT100.net: Guía del usuario de la cámara digital VT100" . Consultado el 19 de enero de 2015 .
  55. ^ "bash – Cómo recibir una notificación cuando se ejecutan mis comandos – Ask Different" . Consultado el 19 de enero de 2015 .
  56. ^ Dickey, Thomas. «Preguntas frecuentes sobre XTerm: comparación de versiones mediante el recuento de controles». La isla invisible . Consultado el 25 de enero de 2020 .
  57. ^ Dickey, Thomas (2016). «Tabla de teclas de función para XTerm y otros emuladores de terminal». Invisible Island . Consultado el 25 de enero de 2020 .
  58. ^ "CSI u - Documentación - iTerm2 - Reemplazo de terminal macOS". iTerm2 . Consultado el 15 de agosto de 2023 .

Enlaces externos