Lista de secuencias de escape de color ANSI

En la mayoría de los terminales (con la excepción del cmd.exe de Windows, por supuesto) es posible colorear el resultado usando la secuencia de escape ANSI \033 .

Ahora estoy buscando una lista de todos los colores y opciones compatibles (como shiny y parpadeante).

Como probablemente existan algunas diferencias entre los terminales que los soportan: estoy interesado principalmente en aquellas secuencias soportadas por terminales compatibles con xterm.

Las secuencias de escape ANSI que está buscando son el subconjunto Select Rendition Gráfico. Todos estos tienen la forma

 \033[XXXm 

donde XXX es una serie de parámetros separados por punto y coma.

Para decir, hacer que el texto sea rojo, negrita y subrayado (hablaremos de muchas otras opciones a continuación) en C, puede escribir:

 printf("\033[31;1;4mHello\033[0m"); 

En C ++ usarías

 std::cout<<"\033[31;1;4mHello\033[0m"; 

En Python3 usarías

 print("\033[31;1;4mHello\033[0m") 

y en Bash usarías

 echo -e "\033[31;1;4mHello\033[0m" 

donde la primera parte hace que el texto sea rojo ( 31 ), negrita ( 1 ), subrayado ( 4 ) y la última parte borra todo esto ( 0 ).

Tal como se describe en la tabla siguiente, hay una gran cantidad de propiedades de texto que puede establecer, como negrita, fuente, subrayado, & c. (¿No es una tontería que StackOverflow no te permita poner las tablas adecuadas en las respuestas?)

Efectos de fuente

 ╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗ ║ Code ║ Effect ║ Note ║ ╠══════════╬════════════════════════════════╬═════════════════════════════════════════════════════════════════════════╣ ║ 0 ║ Reset / Normal ║ all attributes off ║ ║ 1 ║ Bold or increased intensity ║ ║ ║ 2 ║ Faint (decreased intensity) ║ Not widely supported. ║ ║ 3 ║ Italic ║ Not widely supported. Sometimes treated as inverse. ║ ║ 4 ║ Underline ║ ║ ║ 5 ║ Slow Blink ║ less than 150 per minute ║ ║ 6 ║ Rapid Blink ║ MS-DOS ANSI.SYS; 150+ per minute; not widely supported ║ ║ 7 ║ [[reverse video]] ║ swap foreground and background colors ║ ║ 8 ║ Conceal ║ Not widely supported. ║ ║ 9 ║ Crossed-out ║ Characters legible, but marked for deletion. Not widely supported. ║ ║ 10 ║ Primary(default) font ║ ║ ║ 11–19 ║ Alternate font ║ Select alternate font `n-10` ║ ║ 20 ║ Fraktur ║ hardly ever supported ║ ║ 21 ║ Bold off or Double Underline ║ Bold off not widely supported; double underline hardly ever supported. ║ ║ 22 ║ Normal color or intensity ║ Neither bold nor faint ║ ║ 23 ║ Not italic, not Fraktur ║ ║ ║ 24 ║ Underline off ║ Not singly or doubly underlined ║ ║ 25 ║ Blink off ║ ║ ║ 27 ║ Inverse off ║ ║ ║ 28 ║ Reveal ║ conceal off ║ ║ 29 ║ Not crossed out ║ ║ ║ 30–37 ║ Set foreground color ║ See color table below ║ ║ 38 ║ Set foreground color ║ Next arguments are `5;n` or `2;r;g;b`, see below ║ ║ 39 ║ Default foreground color ║ implementation defined (according to standard) ║ ║ 40–47 ║ Set background color ║ See color table below ║ ║ 48 ║ Set background color ║ Next arguments are `5;n` or `2;r;g;b`, see below ║ ║ 49 ║ Default background color ║ implementation defined (according to standard) ║ ║ 51 ║ Framed ║ ║ ║ 52 ║ Encircled ║ ║ ║ 53 ║ Overlined ║ ║ ║ 54 ║ Not framed or encircled ║ ║ ║ 55 ║ Not overlined ║ ║ ║ 60 ║ ideogram underline ║ hardly ever supported ║ ║ 61 ║ ideogram double underline ║ hardly ever supported ║ ║ 62 ║ ideogram overline ║ hardly ever supported ║ ║ 63 ║ ideogram double overline ║ hardly ever supported ║ ║ 64 ║ ideogram stress marking ║ hardly ever supported ║ ║ 65 ║ ideogram attributes off ║ reset the effects of all of 60-64 ║ ║ 90–97 ║ Set bright foreground color ║ aixterm (not in standard) ║ ║ 100–107 ║ Set bright background color ║ aixterm (not in standard) ║ ╚══════════╩════════════════════════════════╩═════════════════════════════════════════════════════════════════════════╝ 

Colores de 2 bits

Ya tienes esto!

Colores de 4 bits

Los estándares que implementan colores de terminal comenzaron con opciones limitadas (4 bits). La siguiente tabla enumera los valores RGB de los colores de fondo y primer plano utilizados por una variedad de emuladores de terminal:

Tabla de colores ANSI implementados por varios emuladores de terminal

Usando lo anterior, puedes hacer un texto rojo sobre un fondo verde (pero ¿por qué?) Usando:

 \033[31;42m 

11 colores (un interludio)

En su libro "Términos básicos de colores: su universalidad y evolución", Brent Berlin y Paul Kay utilizaron datos recostackdos de veinte idiomas diferentes de una gama de familias lingüísticas para identificar once posibles categorías básicas de color: blanco, negro, rojo, verde, amarillo, azul, marrón, morado, rosa, naranja y gris.

Berlin y Kay descubrieron que, en idiomas con menos de once categorías de color, los colores seguían un patrón evolutivo específico. Este patrón es el siguiente:

  1. Todos los idiomas contienen términos para negro (colores fríos) y blanco (colores shinys).
  2. Si un idioma contiene tres términos, entonces contiene un término para rojo.
  3. Si un idioma contiene cuatro términos, entonces contiene un término para verde o amarillo (pero no para ambos).
  4. Si un idioma contiene cinco términos, entonces contiene términos para ambos, verde y amarillo.
  5. Si un idioma contiene seis términos, entonces contiene un término para azul.
  6. Si un idioma contiene siete términos, entonces contiene un término para marrón.
  7. Si un idioma contiene ocho o más términos, entonces contiene términos para púrpura, rosa, naranja o gris.

Esta puede ser la razón por la cual la historia Beowulf solo contiene los colores negro, blanco y rojo. También es posible que la Biblia no contenga el color azul. Homer's Odyssey contiene negro casi 200 veces y blanco aproximadamente 100 veces. El rojo aparece 15 veces, mientras que el amarillo y el verde aparecen solo 10 veces. ( Más información aquí )

Las diferencias entre los idiomas también son interesantes: tenga en cuenta la profusión de las distintas palabras de color utilizadas por el inglés frente al chino. Sin embargo, profundizar en estos idiomas muestra que cada uno usa el color de distintas maneras. ( Más información )

Nombres de color chino vs inglés. Imagen adaptada de

En términos generales, la denominación, el uso y la agrupación de colores en los idiomas humanos son fascinantes. Ahora, de vuelta al espectáculo.

8 bits (256) colores

La tecnología avanzó y las tablas de 256 colores preseleccionados quedaron disponibles, como se muestra a continuación.

Modo de color de 256 bits para secuencias de escape ANSI

Utilizando los anteriores, puede hacer que el texto rosa sea así:

 \033[38;5;206m #That is, \033[38;5;m 

Y crea un fondo azul temprano en la mañana usando

 \033[48;5;57m #That is, \033[48;5;m 

Y, por supuesto, puedes combinar estos:

 \033[38;5;206;48;5;57m 

Los colores de 8 bits están dispuestos de esta manera:

 0x00-0x07: standard colors (same as the 4-bit colours) 0x08-0x0F: high intensity colors 0x10-0xE7: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) 0xE8-0xFF: grayscale from black to white in 24 steps 

TODOS LOS COLORES

Ahora estamos viviendo en el futuro, y el espectro RGB completo está disponible usando:

 \033[38;2;;;m #Select RGB foreground color \033[48;2;;;m #Select RGB background color 

Para que pueda poner texto rosado en un fondo marrón con

 \033[38;2;255;82;197;48;2;155;106;0mHello 

Soporte para terminales de "color verdadero" se detalla aquí .

Gran parte de lo anterior se extrae de la página de Wikipedia " código de escape ANSI ".

Esta página tiene un gran resumen:

Secuencias de escape ANSI

Qué tal si:

ECMA-48 – Funciones de control para juegos de caracteres codificados, 5ª edición (junio de 1991) – Una norma que define los códigos de control de color, que aparentemente también es compatible con xterm.

SGR 38 y 48 fueron originalmente reservados por ECMA-48, pero se desarrollaron unos años más tarde en una norma conjunta ITU, IEC e ISO, que viene en varias partes y que (entre muchas otras cosas) documenta el SGR 38/48 secuencias de control para el color directo y el color indexado :

  • Tecnología de la información – Open Document Architecture (ODA) y formato de intercambio: estructuras de documentos . T.412. Unión Internacional de Telecomunicaciones.
  • Tecnología de la información – Open Document Architecture (ODA) y formato de intercambio: architectures de contenido de caracteres . T.416. Unión Internacional de Telecomunicaciones.
  • Tecnología de la información: architecture de documento abierta (ODA) y formato de intercambio: architectures de contenido de caracteres . ISO / CEI 8613-6: 1994. Organización Internacional de Normalización.

Hay una columna para xterm en esta tabla en la página de Wikipedia para códigos de escape ANSI

Está relacionado absolutamente con tu terminal. VTE no admite el parpadeo. Si usa gnome-terminal , tilda , guake , terminator , xfce4-terminal y así sucesivamente para VTE, no tendrá parpadeo.
Si usa desea utilizar el parpadeo en VTE, debe usar el comando xterm .
Puede usar el comando infocmp con el nombre del terminal:

 #infocmp vt100 #infocmp xterm #infocmp vte 

Por ejemplo :

 # infocmp vte # Reconstructed via infocmp from file: /usr/share/terminfo/v/vte vte|VTE aka GNOME Terminal, am, bce, mir, msgr, xenl, colors#8, cols#80, it#8, lines#24, ncv#16, pairs#64, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, enacs=\E)0, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8, kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\E[E, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\EOH, kich1=\E[2~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, kslt=\E[4~, meml=\El, memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, ritm=\E[23m, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\Ec, rs2=\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;, sgr0=\E[0m\017, sitm=\E[3m, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd, 
    Intereting Posts