Lista de secuencias de escape de color ANSI

225

En la mayoría de los terminales, es posible colorear la salida utilizando la \033secuencia de escape ANSI.

Estoy buscando una lista de todos los colores y opciones compatibles (como brillante y parpadeante).

Como probablemente existan diferencias entre los terminales que los admiten, me interesan principalmente las secuencias compatibles con terminales compatibles con xterm.

ThiefMaster
fuente
En realidad, se puede utilizar colores en las ventanas cmd. stackoverflow.com/questions/41207496/…
Joel
Y desde MSDN
Joel

Respuestas:

510

Las secuencias de escape ANSI que está buscando son el subconjunto Seleccionar representación gráfica. Todos estos tienen la forma

\033[XXXm

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

Para decir, haga el texto rojo, en negrita y subrayado (discutiremos muchas otras opciones a continuación) en C que podría 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).

Como se describe en la tabla a continuación, hay una gran cantidad de propiedades de texto que puede establecer, como negrita, fuente, subrayado, etc. (¿No es tonto que StackOverflow no le permita poner 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 los colores del terminal comenzaron con opciones limitadas (4 bits). La siguiente tabla enumera los valores RGB de los colores de fondo y primer plano utilizados para estos por una variedad de emuladores de terminal:

Tabla de colores ANSI implementados por varios emuladores de terminal

Usando lo anterior, puede hacer 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 color: su universalidad y evolución", Brent Berlin y Paul Kay utilizaron datos recopilados de veinte idiomas diferentes de una gama de familias de idiomas 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 las once categorías de color máximas, los colores siguieron 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 brillantes).
  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 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 puede ser por qué la Biblia no contiene el color azul. La Odisea de Homero contiene negro casi 200 veces y blanco unas 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 idiomas también son interesantes: tenga en cuenta la profusión de 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 formas distintas. ( Más información )

Nombres de colores chinos vs ingleses.  Imagen adaptada de "muyueh.com"

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

8 bits (256) colores

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

Modo de color de 256 bits para secuencias de escape ANSI

Usando estos anteriores, puede hacer un texto rosa de la siguiente manera:

\033[38;5;206m     #That is, \033[38;5;<FG COLOR>m

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

\033[48;5;57m      #That is, \033[48;5;<BG COLOR>m

Y, por supuesto, puedes combinar estos:

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

Los colores de 8 bits se organizan así:

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;<r>;<g>;<b>m     #Select RGB foreground color
\033[48;2;<r>;<g>;<b>m     #Select RGB background color

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

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

El soporte para terminales de "color verdadero" se enumera aquí .

Gran parte de lo anterior proviene de la página de Wikipedia " Código de escape ANSI ".

Un guión útil para recordarte

Como a menudo estoy en la posición de tratar de recordar qué colores son qué, tengo un útil script llamado ~/bin/ansi_colours:

#!/usr/bin/python

print "\\033[XXm"

for i in range(30,37+1):
    print "\033[%dm%d\t\t\033[%dm%d" % (i,i,i+60,i+60);

print "\033[39m\\033[39m - Reset colour"
print "\\033[2K - Clear Line"
print "\\033[<L>;<C>H OR \\033[<L>;<C>f puts the cursor at line L and column C."
print "\\033[<N>A Move the cursor up N lines"
print "\\033[<N>B Move the cursor down N lines"
print "\\033[<N>C Move the cursor forward N columns"
print "\\033[<N>D Move the cursor backward N columns"
print "\\033[2J Clear the screen, move to (0,0)"
print "\\033[K Erase to end of line"
print "\\033[s Save cursor position"
print "\\033[u Restore cursor position"
print " "
print "\\033[4m  Underline on"
print "\\033[24m Underline off"
print "\\033[1m  Bold on"
print "\\033[21m Bold off"

Esto imprime

Colores ANSI simples

Ricardo
fuente
44
El conjunto completo de códigos de escape ANSI: ascii-table.com/ansi-escape-sequences-vt-100.php
formixian
3
@giusti: Tanto echo -e "\033[38;05;34;1mHi"y echo -e "\033[38;05;34m\033[1mHi"trabajado para mí, a pesar de los efectos de fuente anti-aliasing causó la aparición del color para cambiar un poco menos de la negrita en el que el terminal estaba probando esto.
Richard
44
Los \033[códigos SGR ( ) que comienzan con 38 y 48 deben separarse con el que está reservado :como un sub-separador, aunque esto no está completamente claro en las fuentes primarias en: ecma-international.org/publications/files/ECMA-ST/Ecma -048.pdf e itu.int/rec/… . Además, algunas interpretaciones olvidan el ID del espacio de color en los 2formularios (16M-color RGB) / 3(16M-color CMY) / 4(??? CMYK), por ejemplo, ¡debe ser \033[38:2::255:255:255mpara un primer plano de 16M de color blanco y no \033[38:2:255:255:255m!
SlySven
2
La razón por la que sigo sobre esto es porque un proyecto Mudlet que codifico tiene que manejar ambos formularios y recientemente me puse de rodillas para lograr que funcione mejor ...
SlySven
44
Solo quería encontrar una lista de colores ANSI y pasé demasiado tiempo leyendo artículos sobre "términos básicos de color". Gracias por la gran distracción! :)
mzuther
14

Qué tal si:

ECMA-48 - Funciones de control para juegos de caracteres codificados, 5a edición (junio de 1991) - Un estándar 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 un estándar conjunto ITU, IEC e ISO, que viene en varias partes y que (entre muchas otras cosas) documenta el SGR 38/48 secuencias de control para color directo y color indexado :

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

sinelaw
fuente
4

Está absolutamente relacionado con su terminal. TEV no apoyar abrir y cerrar, si se utiliza gnome-terminal, tilda, guake, terminator, xfce4-terminaly así sucesivamente de acuerdo con TEV, usted no tiene un abrir y cerrar.
Si usa o quiere usar blink en VTE, debe usarlo 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,
Golfo pérsico
fuente
VTE 0.52 / gnome-terminal 3.28 agrega soporte para texto parpadeante (por lo que también funcionará en otros emuladores basados ​​en VTE).
egmont
1

Para aquellos que no obtienen resultados adecuados que no sean los lenguajes mencionados, si está utilizando C # para imprimir un texto en la ventana de la consola (terminal), debe reemplazar "\ 033" con "\ x1b ". En Visual Basic sería Chrw (27) .

HolyRandom
fuente