Imprime um padrão de teste de 256 cores no terminal

57

Como imprimo um padrão de teste de 256 cores no meu terminal?

Eu quero verificar se meu terminal suporta corretamente 256 cores.

    
por Tom Hale 05.09.2016 / 11:32

6 respostas

87

padrão de teste de 256 cores

Para obter a imagem abaixo, use:

curl -s https://gist.githubusercontent.com/HaleTom/89ffe32783f89f403bba96bd7bcd1263/raw/ | bash

Ocódigo gist bash / zsh é shellcheck limpa e também suporta" Look Ma, sem subprocessos! ".

Como alternativa, para um bash quicky:

for i in {0..255} ; do
    printf "\x1b[48;5;%sm%3d\e[0m " "$i" "$i"
    if (( i == 15 )) || (( i > 15 )) && (( (i-15) % 6 == 0 )); then
        printf "\n";
    fi
done

Por total overkill, o vovô do lote é terminal-colors , um roteiro de 572 linhas com vários formatos de saída .

Você também pode imprimir um padrão de teste de cores reais (24 bits) .

    
por Tom Hale 05.09.2016 / 11:42
33

Eu encontrei um script Python legal para isso no GitHub escrito por Justin Abrahms, que também imprime os códigos hexadecimais das cores .

Faça o download do script para o diretório de trabalho atual

wget https://gist.githubusercontent.com/justinabrahms/1047767/raw/a79218b6ca8c1c04856968d2d202510a4f7ec215/colortest.py

dê permissão de execução

chmod +x colortest.py

Execute:

./colortest.py

Aqui está o script completo no caso de link-rot:

#!/usr/bin/env python
# Ported to Python from http://www.vim.org/scripts/script.php?script_id=1349

print "Color indexes should be drawn in bold text of the same color."
print

colored = [0] + [0x5f + 40 * n for n in range(0, 5)]
colored_palette = [
    "%02x/%02x/%02x" % (r, g, b) 
    for r in colored
    for g in colored
    for b in colored
]

grayscale = [0x08 + 10 * n for n in range(0, 24)]
grayscale_palette = [
    "%02x/%02x/%02x" % (a, a, a)
    for a in grayscale 
]

normal = "3[38;5;%sm" 
bold = "3[1;38;5;%sm"
reset = "3[0m"

for (i, color) in enumerate(colored_palette + grayscale_palette, 16):
    index = (bold + "%4s" + reset) % (i, str(i) + ':')
    hex   = (normal + "%s" + reset) % (i, color)
    newline = '\n' if i % 6 == 3 else ''
    print index, hex, newline, 
    
por Zanna 05.09.2016 / 11:39
11

Embora não seja bastante um "padrão de teste", eu tenho xterm-color-chooser :

    
por grawity 06.09.2016 / 14:04
6

Ainda outro script, escrito por mim, está localizado no repositório VTE: link .

Ela requer uma janela de 120 ou mais colunas, mas organiza as cores do cubo 6x6x6 de maneira agradável e compacta. Os primeiros dígitos dos índices são despojados para compacidade, você pode facilmente descobri-los. As barras verticais fornecem a capacidade de examinar o RGB exato da cor do primeiro plano sem o antialiasing retrocedendo (como acontece nos dígitos).

O topo da saída (não mostrado na imagem abaixo) demonstra a loucura que anda por aí com a ambigüidade negrito vs. brilhante, ou seja, que a sequência de escape de ousadia combinada com uma das oito seqüências de escape legadas para o primeiro plano também muda para a cor de contrapartida brilhante, enquanto que com o novo estilo (capacidade de 256 cores) as seqüências de escape não são mais as mesmas, nem mesmo para as 8 primeiras cores. Pelo menos é assim que o xterm e o VTE (Terminal GNOME, etc.) se comportam.

Esta captura de tela mostra cerca de metade da saída:

    
por egmont 22.09.2016 / 22:50
5

Talvez supérfluo, mas eu escrevi uma versão que imprime as 256 cores usando o fundo com detecção automática de largura de casca para que as cores fiquem mais facilmente visíveis.

link

#!/usr/bin/env python
from __future__ import print_function

import os
import shutil
import subprocess


def get_width(default=80):
    '''Attempt to detect console width and default to 80'''
    try:
        columns, rows = shutil.get_terminal_size()
    except AttributeError:
        try:
            _, columns = subprocess.check_output(['stty', 'size']).split()
        except OSError:
            columns = os.environ.get('COLUMNS', default)

    columns = int(columns) - 77
    # Since we have 6 columns with 1 space on each side, we can increment the
    # size for every 12 extra columns
    return max(0, columns / 12)


# Loosely based on https://gist.github.com/justinabrahms/1047767
colored = [0] + list(range(95, 256, 40))
colored_palette = [
    (r, g, b)
    for r in colored
    for g in colored
    for b in colored
]


grayscale_palette = [(g, g, g) for g in range(8, 240, 10)]


esc = '3['
# Reset all colors sequence
reset = esc + '0m'
# Regular color
normal = esc + '38;5;{i}m'
# Bold color
bold = esc + '1;' + normal
# Background color
background = esc + '48;5;{i}m'

pattern = (
    '{normal}{background}{padding:^{width}}{i:^3d} '  # pad the background
    '{r:02X}/{g:02X}/{b:02X}'  # show the hex rgb code
    '{padding:^{width}}'  # pad the background on the other side
    '{reset}'  # reset again
)

base_context = dict(reset=reset, padding='', width=get_width())

for i, (r, g, b) in enumerate(colored_palette + grayscale_palette, 16):
    context = dict(i=i, r=r, g=g, b=b, color=r + g + b, **base_context)
    context.update(bold=bold.format(**context))
    context.update(background=background.format(**context))

    # Change text color from black to white when it might become unreadable
    if max(r, g, b) > 0xCC:
        context.update(normal=normal.format(i=0))
    else:
        context.update(normal=normal.format(i=255))

    print(pattern.format(**context), end='')

    # Print newlines when needed
    if i % 6 == 3:
        print()
    else:
        print(' ', end='')
    
por Wolph 08.06.2018 / 10:55
3

Um one-liner

cor de fundo

for i in {0..255}; do printf '\e[48;5;%dm%3d ' $i $i; (((i+3) % 18)) || printf '\e[0m\n'; done

cor de primeiro plano

for i in {0..255}; do printf '\e[38;5;%dm%3d ' $i $i; (((i+3) % 18)) || printf '\e[0m\n'; done
    
por 20.12.2018 / 14:15