Lista de seqüências de escape de cores ANSI

225

Na maioria dos terminais, é possível colorir a saída usando a \033sequência de escape ANSI.

Estou procurando uma lista de todas as cores e opções suportadas (como brilhante e intermitente).

Como provavelmente existem diferenças entre os terminais que os suportam, estou interessado principalmente em sequências suportadas por terminais compatíveis com xterm.

ThiefMaster
fonte
Na verdade, você pode usar cores no Windows cmd. stackoverflow.com/questions/41207496/…
Joel
E do MSDN
Joel

Respostas:

510

As seqüências de escape ANSI que você está procurando são o subconjunto Select Graphic Rendition. Todos estes têm a forma

\033[XXXm

onde XXXé uma série de parâmetros separados por ponto e vírgula.

Para dizer, deixe o texto em vermelho, negrito e sublinhado (discutiremos muitas outras opções abaixo) em C, você pode escrever:

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

Em C ++ você usaria

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

No Python3 você usaria

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

e no Bash você usaria

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

onde a primeira parte torna o texto vermelho ( 31), negrito ( 1), sublinhado ( 4) e a última parte limpa tudo isso ( 0).

Conforme descrito na tabela abaixo, há um grande número de propriedades de texto que você pode definir, como negrito, fonte, sublinhado, etc. (Não é tolice o StackOverflow não permitir que você coloque tabelas adequadas nas respostas?)

Efeitos de fonte

╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║  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)                                              ║
╚══════════╩════════════════════════════════╩═════════════════════════════════════════════════════════════════════════╝

Cores de 2 bits

Você já tem isso!

Cores de 4 bits

Os padrões que implementam as cores dos terminais começaram com opções limitadas (4 bits). A tabela abaixo lista os valores RGB das cores de plano de fundo e primeiro plano usadas para isso por uma variedade de emuladores de terminal:

Tabela de cores ANSI implementadas por vários emuladores de terminal

Usando o exposto, você pode criar texto em vermelho sobre um fundo verde (mas por quê?) Usando:

\033[31;42m

11 cores (um interlúdio)

Em seu livro "Termos básicos de cores: universalidade e evolução", Brent Berlin e Paul Kay usaram dados coletados em vinte idiomas diferentes de várias famílias de idiomas para identificar onze possíveis categorias básicas de cores: branco, preto, vermelho, verde, amarelo, azul, marrom, roxo, rosa, laranja e cinza.

Berlin e Kay descobriram que, em idiomas com menos do que o máximo de onze categorias de cores, as cores seguiam um padrão evolutivo específico. Esse padrão é o seguinte:

  1. Todos os idiomas contêm termos para preto (cores frias) e branco (cores brilhantes).
  2. Se um idioma contiver três termos, ele conterá um termo para vermelho.
  3. Se um idioma contiver quatro termos, ele conterá um termo para verde ou amarelo (mas não ambos).
  4. Se um idioma contiver cinco termos, ele conterá termos para verde e amarelo.
  5. Se um idioma contém seis termos, ele contém um termo para azul.
  6. Se um idioma contém sete termos, ele contém um termo para marrom.
  7. Se um idioma contém oito ou mais termos, contém termos para roxo, rosa, laranja ou cinza.

Talvez por isso a história Beowulf contenha apenas as cores preto, branco e vermelho. Também pode ser por isso que a Bíblia não contém a cor azul. A Odisséia de Homero contém preto quase 200 vezes e branco cerca de 100 vezes. Vermelho aparece 15 vezes, enquanto amarelo e verde aparecem apenas 10 vezes. ( Mais informações aqui )

As diferenças entre os idiomas também são interessantes: observe a profusão de palavras de cores distintas usadas pelo inglês x chinês. No entanto, se aprofundar nesses idiomas mostra que cada um usa cores de maneiras distintas. ( Mais informações )

Nomes de cores em chinês e inglês.  Imagem adaptada de "muyueh.com"

De um modo geral, o nome, o uso e o agrupamento de cores nas línguas humanas são fascinantes. Agora, de volta ao show.

Cores de 8 bits (256)

Tecnologia avançada, e tabelas de 256 cores pré-selecionadas ficaram disponíveis, como mostrado abaixo.

Modo de cores de 256 bits para sequências de escape ANSI

Usando estes itens acima, você pode criar texto rosa da seguinte forma:

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

E faça um fundo azul de manhã cedo usando

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

E, claro, você pode combinar estes:

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

As cores de 8 bits são organizadas da seguinte forma:

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

TODAS AS CORES

Agora estamos vivendo no futuro, e todo o espectro RGB está disponível usando:

\033[38;2;<r>;<g>;<b>m     #Select RGB foreground color
\033[48;2;<r>;<g>;<b>m     #Select RGB background color

Assim, você pode colocar texto rosado em um fundo marrom usando

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

O suporte para terminais "true color" está listado aqui .

Grande parte dos itens acima é extraída da página da Wikipedia " Código de escape ANSI ".

Um script útil para se lembrar

Como muitas vezes estou na posição de tentar lembrar o que são as cores, tenho um script útil chamado ~/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"

Isso imprime

Cores ANSI simples

Richard
fonte
4
O conjunto completo de códigos de escape ANSI: ascii-table.com/ansi-escape-sequences-vt-100.php
formixian
3
@giusti: Ambos echo -e "\033[38;05;34;1mHi"e echo -e "\033[38;05;34m\033[1mHi"funcionaram para mim, embora os efeitos de fonte anti-aliasing tenham causado a aparência da cor mudar ligeiramente sob negrito no terminal em que eu estava testando isso.
Richard
4
Os \033[códigos SGR ( ) iniciados com 38 e 48 devem ser separados pelo reservado de outra forma :como um sub-separador, embora isso não esteja totalmente claro nas fontes principais em: ecma-international.org/publications/files/ECMA-ST/Ecma -048.pdf e itu.int/rec/… . Além disso, algumas interpretações esquecem o Id do espaço de cores nas formas 2(16M cores RGB) / 3(16M cores CMY) / 4(??? CMYK) - por exemplo, deve ser \033[38:2::255:255:255mpara um primeiro plano branco de 16M e não \033[38:2:255:255:255m!
SlySven
2
A razão de eu ir sobre isso é que um projeto Mudlet código I para tem de lidar com ambas as formas e eu recentemente se levantou para meus cotovelos nessa para fazê-lo funcionar melhor ...
SlySven
4
Eu só queria encontrar uma lista de cores ANSI e gastei muito tempo lendo artigos sobre "termos básicos de cores". Obrigado pela grande distração! :)
mzuther
14

E se:

ECMA-48 - Funções de controle para conjuntos de caracteres codificados, 5ª edição (junho de 1991) - Um padrão que define os códigos de controle de cores, que aparentemente também é suportado pelo xterm.

Os SGR 38 e 48 foram originalmente reservados pela ECMA-48, mas foram desenvolvidos alguns anos depois em uma norma conjunta ITU, IEC e ISO, que vem em várias partes e que (entre muitas outras coisas) documenta a SGR 38/48 seqüências de controle para cores diretas e cores indexadas :

Há uma coluna para xterm nesta tabela na página da Wikipedia para códigos de escape ANSI

sinelaw
fonte
4

Está absolutamente relacionado ao seu terminal. O TEV não suporta piscar, se você usar gnome-terminal, tilda, guake, terminator, xfce4-terminale assim por diante de acordo com TEV, Você não tem piscar.
Se você usa ou deseja usar o piscar no VTE, é necessário usá-lo xterm.
Você pode usar o comando infocmp com o nome do terminal:

#infocmp vt100 
#infocmp xterm 
#infocmp vte 

Por exemplo :

# 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,
PersianGulf
fonte
O VTE 0.52 / gnome-terminal 3.28 adiciona suporte para texto intermitente (e, portanto, também funciona em outros emuladores baseados em VTE).
Egmont
1

Para aqueles que não obtêm resultados adequados, além dos idiomas mencionados, se você estiver usando C # para imprimir um texto na janela do console (terminal), substitua "\ 033" por "\ x1b ". No Visual Basic, seria Chrw (27) .

HolyRandom
fonte