stringtranslate.com

código de escape ANSI

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

Historia

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 ESCcarácter, un Ycará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 DC1luego 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.

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

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. Posteriormente, 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.

Soporte de plataforma

Emulador de terminal Xterm
El emulador de terminal Xterm.

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 asumí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 ]

DOS y Windows

Un duro golpe para la popularidad de las secuencias fue que la IBM PC, introducida en 1983, no las admitía para programas locales (esto era común en las computadoras domésticas "todo en uno", pero poco común en máquinas de esta complejidad). El BIOS subyacente solo interpretó unos pocos caracteres de control ( BEL , CR , LF , BS ), lo que hace casi imposible realizar cualquier tipo de aplicación en pantalla completa. 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 .

DOS 2.0 introdujo la capacidad de agregar un controlador de dispositivo para las secuencias de escape ANSI: ANSI.SYS . La lentitud y el hecho de que no estuviera instalado por defecto hacía que el software rara vez lo aprovechara; en cambio, las aplicaciones continuaron manipulando directamente el hardware para obtener la visualización del texto necesaria. [ cita necesaria ] ANSI.SYS y controladores similares continuaron funcionando en Windows 9x hasta Windows Me , y en sistemas derivados de NT para programas heredados de 16 bits que se ejecutan bajo NTVDM .

Muchos clones de DOS pudieron interpretar las secuencias y no requieren la carga de un controlador ANSI independiente. PTS-DOS [7] [8] así como DOS concurrente , DOS multiusuario [9] y REAL/32 tienen soporte integrado (además de varias extensiones). 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 [10] y ConEmu de Maximus5 interpretaron secuencias de escape ANSI impresas por programas. Un paquete de Python llamado colorama [11] 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 transferencia 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. [12] Esto se hizo junto con el Subsistema de Windows para Linux , permitiendo que el software basado en terminal similar a Unix use las secuencias en la Consola de Windows. De forma predeterminada, está desactivado, pero Windows PowerShell 5.1 lo habilitó. PowerShell 6 hizo posible incrustar el carácter ESC necesario en una cadena con . [13]`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. [14]

Descripción

Códigos de control 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 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). [15] : 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.

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 a la norma del código de control C1 aplicable . [15] : 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 ú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.

Secuencias CSI (Introductor de Secuencia de Control)

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

Parámetros SGR (Seleccionar representación gráfica)

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. [24] 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 mCSI mCSI 0 m

Colors

3-bit and 4-bit

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.

8 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 [36] 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 rxvty 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.

24 bits

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, [16] Konsole de KDE , [37] [38] e iTerm, así como todos los terminales basados ​​en libvte, [39] incluido GNOME Terminal . [40]

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, [36] 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. [16] : ¿Puedo configurar un color por su número? 

Variables de entorno Unix relacionadas con la compatibilidad con el color

En lugar de usar el soporte de color en termcap y terminfo introducido en SVr3.2 (1987), [41] la biblioteca S-Lang (versión 0.99-32, junio de 1996) usó una variable de entorno separada $COLORTERMpara 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. [42] [43] 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. [44]

Algunos emuladores de terminal (urxvt, konsole) están configurados $COLORFGBGpara informar la combinación de colores del terminal (principalmente fondo claro versus fondo oscuro). Este comportamiento se originó en S-Lang [43] 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". [45]

Secuencias OSC (comando del sistema operativo)

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). [16] 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 STde 2017, utilizado por VTE, [46] [ discute ] iTerm2, [46] y mintty, [47] entre otros. [48]

La consola de Linux utiliza ESC ] P n rr gg bbpara cambiar la paleta, que, si está codificada en una aplicación, puede bloquear otras terminales. [49] Sin embargo, STLinux ignorará los anexos y formará una secuencia adecuada e ignorable para otros terminales. [ cita necesaria ]

Secuencias de escape Fs

Si ESCva 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 . [50] En ISO/IEC 2022 se incluye una tabla de estos .Fs

Secuencias de escape fp

Si ESCva 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. [15] : 6.5.3 Fp

nF Secuencias de escape

Si ESCva 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 "). [15] : 13.2.1 nF2F2Fp2Ft

La mayoría de las nFtsecuencias 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. [15] : 6.5.2  Actualmente no se han registrado secuencias de este tipo. [50] Las secuencias de tipos 3Fp(que incluyen las que comienzan con '#') están disponibles para funciones de control de uso privado. [15] : 6.5.3 

Ejemplos

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 mque 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 buffer 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 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 puedes moverte a una posición diferente del cursor, como 20(y) y 3(x), usando la secuencia CSI 20 ; 3 Ho 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 secuencias DEC ESC 7/ ESC 8en su lugar, que es más ampliamente compatible.

En secuencias de comandos de shell

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. [55]

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. [56]

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. [57]

imprimirf \\ 033c 

Esto restablecerá la consola, 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 (no Linux).

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

Secuencias de entrada de terminales

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 del teclado alfanumérico principal normal 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>[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>[Ason <esc>[Dlas 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. [16] Thomas Dickey le ha añadido mucho apoyo a lo largo del tiempo; [58] también mantiene una lista de claves predeterminadas utilizadas por otros emuladores de terminal para comparar. [59]

Ver también

Notas

  1. ^ La visualización de la pantalla se puede reemplazar dibujando todo el contenido de la nueva pantalla en la parte inferior y desplazando la pantalla anterior hacia arriba lo suficiente como para borrar todo el texto anterior. El usuario vería el desplazamiento y el cursor de hardware quedaría en la parte inferior. Algunos de los primeros archivos por lotes lograron visualizaciones rudimentarias de "pantalla completa" de esta manera.
  2. ^ Colores típicos que se utilizan al iniciar las PC y dejarlas en modo texto, que utiliza una tabla de colores de 16 entradas. Los colores son diferentes en los modos gráficos EGA/VGA.
  3. ^ Visto en Windows XP hasta Windows 8.1
  4. ^ El acceso directo predeterminado de PowerShell .lnk , sin cambios durante más de una década, reasigna el amarillo y el magenta para darle a PowerShell colores de primer plano y fondo distintivos en comparación con el símbolo del sistema. [33] PowerShell 7 no se ve afectado.
  5. ^ Consola de depuración, tema "Oscuro+"
  6. ^ Tema Campbell, utilizado a partir de Windows 10 versión 1709.
  7. ^ Para terminales virtuales, desde /etc/vtrgb.
  8. ^ 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 reduciendo el componente verde. Vea este arte ansi Archivado el 25 de julio de 2011 en Wayback Machine como ejemplo.

Referencias

  1. ^ ab "Estándar ECMA-48: funciones de control para dispositivos de E/S de imágenes de caracteres" (PDF) (Segunda ed.). ECMA Internacional . Agosto de 1979. Breve Historia.
  2. ^ Williams, Paul (2006). "Terminales de vídeo de Digital". VT100.net . Consultado el 17 de agosto de 2011 .
  3. ^ Compañía Heathkit (1979). "Catálogo Heathkit 1979". Compañía Heathkit. 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. ^ abcdefghijklmno "Estándar ECMA-48: funciones de control para juegos de caracteres codificados" (PDF) (Quinta ed.). ECMA Internacional . Junio ​​de 1991.
  6. ^ "Definiciones de comandos de la impresora Amiga". Comodoro . Consultado el 10 de julio de 2013 .
  7. ^ "Manual de usuario de PTS-DOS 2000 Pro" (PDF) . Buggingen, Alemania: Paragon Technology GmbH . 1999. Archivado (PDF) desde el original el 12 de mayo de 2018 . Consultado el 12 de mayo de 2018 .
  8. ^ Gunther, Jens; Ernst, Tobias (25 de abril de 2004) [1996]. Ellsässer, Wolfgang (ed.). "Inoffizielle deutschsprachige PTS-DOS-FAQ (PTS/FAQD)" [Preguntas frecuentes no oficiales en alemán sobre PTS-DOS] (en alemán) . Consultado el 2 de octubre de 2018 .
  9. ^ Documentación en línea de CCI multiusuario DOS 7.22 GOLD . Controles concurrentes, Inc. (CCI). 10 de febrero de 1997. AYUDA.HLP.
  10. ^ Capucha, 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 .
  11. ^ "colorama·PyPI". Índice de paquetes de Python . Consultado el 27 de febrero de 2022 .
  12. ^ un poco loco. "Secuencias de terminal virtual de consola: consola de Windows". docs.microsoft.com . Consultado el 30 de mayo de 2018 .
  13. ^ "Ayuda de PowerShell: acerca de los caracteres especiales". 12 de enero de 2023.
  14. ^ "Hoja de ruta del ecosistema de terminales y consolas 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 en favor de Windows Terminal, ConPTY y secuencias de terminal virtual.
  15. ^ abcdefghi "Estándar ECMA-35: estructura de código de caracteres y técnicas de extensión" (PDF) (Sexta ed.). ECMA Internacional . 1994.
  16. ^ abcdefghijklmn Moy, Edward; Gildea, Esteban; Dickey, Thomas (2019). "Secuencias de control XTerm (ctlseqs)". Isla Invisible .
  17. ^ Frank da Cruz; Cristina Gianone (1997). Usando C-Kermit. Prensa digital. pag. 278.ISBN 978-1-55558-164-0.
  18. ^ "SCOSC: guardar la posición actual del cursor". Información del programador del terminal de vídeo VT510 . DIC .
  19. ^ "DECSLRM: establecer márgenes izquierdo y derecho". Información del programador del terminal de vídeo VT510 . DIC .
  20. ^ "SCORC: restaurar la posición guardada del cursor". Información del programador del terminal de vídeo VT510 . DIC .
  21. ^ Moy, Eduardo; Gildea, Esteban; Dickey, Thomas. "Secuencias de control XTerm". Funciones que utilizan CSI, ordenadas por carácter(es) final(es) . Consultado el 4 de febrero de 2022 .
  22. ^ Conrad Irwin (abril de 2013). "modo de pegado entre corchetes". cirw.en.
  23. ^ Moy, Eduardo; Gildea, Esteban; Dickey, Thomas. "Secuencias de control XTerm". Modo de pegado entre corchetes . Consultado el 4 de febrero de 2022 .
  24. ^ "console_codes(4) - página del manual de Linux". man7.org . Consultado el 23 de marzo de 2018 .
  25. ^ ab "pantalla (HW)". Manual de versión 5.0.7 de SCO OpenServer . 11 de febrero de 2003.
  26. ^ "Error 791596 - Pensamientos sobre el desmayo (SGR 2)". bugzilla.gnome.org .
  27. ^ abc "Subrayados rizados y de colores (#6382) · Problemas · George Nachman / iterm2". GitLab . 11 de diciembre de 2017.
  28. ^ abc "Extensiones del protocolo xterm". documentación del gatito . Consultado el 1 de julio de 2020 .
  29. ^ "Subrayados rizados y de colores". Rastreador de errores de KDE . 27 de agosto de 2022.
  30. ^ "consola-termio-realizador". jdebp.uk .
  31. ^ "códigos_consola (4)". Manual del programador de Linux . 5.10. Proyecto de páginas de manual de Linux .
  32. ^ ab "mintty/mintty: atributos de texto y representación". GitHub .
  33. ^ "El acceso directo predeterminado en Windows reasigna los colores ANSI 35,36 · Número de edición 4266 · PowerShell/PowerShell". GitHub . Consultado el 21 de diciembre de 2022 .
  34. ^ Modificado de 0, 0, 205 en julio de 2004 "Parche n.° 192 - 12/7/2004 - XFree86 4.4.99.9".
  35. ^ Modificado de 0, 0, 255 en julio de 2004 "Parche n.º 192 - 12/7/2004 - XFree86 4.4.99.9".
  36. ^ abc "T.416 Tecnología de la información - Arquitectura de documento abierto (ODA) y formato de intercambio: arquitecturas de contenido de caracteres".
  37. ^ "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 ]
  38. ^ "README.másColores". KDE. 22 de abril de 2010.
  39. ^ "Informe de errores y parches de libvte: compatibilidad con 16 millones de colores". GNOME Bugzilla. 4 de abril de 2014 . Consultado el 5 de junio de 2016 .
  40. ^ "¿Cómo habilitar la compatibilidad con colores reales de 24 bits en el terminal Gnome?".
  41. ^ "Historia". curs_color(3X): manipula los colores de los terminales con maldiciones.
  42. ^ "Comandante de medianoche: lib/tty/color-slang.c". Fossies .
  43. ^ ab Dickey, Thomas E. (2017). "NCURSES - comentarios sobre S-Lang". isla-invisible.net .
  44. ^ "Características/Terminales de 256 colores - Wiki del proyecto Fedora". Proyecto Fedora . Archivado desde el original el 4 de octubre de 2012.
  45. ^ "Error 733423: configure la variable de entorno COLORFGBG para la detección automática del color". bugzilla.gnome.org .
  46. ^ ab Koblinger, Egmont. "Hipervínculos (también conocidos como anclajes tipo HTML) en emuladores de terminal". Lo esencial de GitHub .
  47. ^ "mintty/mintty: secuencias de control". GitHub .
  48. ^ Koblinger, Egmont. "Adopción de OSC 8 en emuladores de terminal". GitHub .
  49. ^ "console_codes: secuencias de control y escape de la consola Linux". Manual del programador de Linux .
  50. ^ ab ISO-IR: Registro internacional ISO/IEC de juegos de caracteres codificados para utilizar con secuencias de escape (PDF) . ITSCJ/ IPSJ . Consultado el 12 de mayo de 2023 .
  51. ^ abDigital . "DECSC: guardar cursor". Información del programador del terminal de vídeo VT510 .
  52. ^ ab Secuencias de escape ANSI - VT100 / VT52, archivado desde el original el 27 de febrero de 2009 , consultado el 21 de agosto de 2020
  53. ^ Digitales . "DECSWL: línea de un solo ancho y una sola altura". Información del programador del terminal de vídeo VT510 .
  54. ^ Digitales . "DECDWL: línea de doble ancho y altura única". Información del programador del terminal de vídeo VT510 .
  55. ^ "Capítulo 9. Consejos del sistema". debian.org .
  56. ^ "VT100.net: Guía del usuario de Digital VT100" . Consultado el 19 de enero de 2015 .
  57. ^ "bash - Cómo recibir una notificación cuando finalicen mis comandos - Preguntar diferente" . Consultado el 19 de enero de 2015 .
  58. ^ Dickey, Thomas. "Preguntas frecuentes de XTerm: comparación de versiones contando controles". Isla Invisible . Consultado el 25 de enero de 2020 .
  59. ^ Dickey, Thomas (2016). "Tabla de teclas de función para XTerm y otros emuladores de terminal". Isla Invisible . Consultado el 25 de enero de 2020 .
  60. ^ "CSI u - Documentación - iTerm2 - Reemplazo de terminal macOS". iTerm2 . Consultado el 15 de agosto de 2023 .

enlaces externos