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

63

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

Quero verificar se meu terminal suporta corretamente 256 cores.

Tom Hale
fonte
digite /cubesirssi ( fonte )
mirabilos 6/09/16

Respostas:

95

Padrão de teste de 256 cores

Para obter a imagem abaixo, use:

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

Padrão de teste de 256 cores

O código / essênciabashzsh está shellchecklimpo e também suporta "Look Ma, no subprocesses!".


Como alternativa, para uma bashrápida:

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

Para um exagero total, o avô do lote é terminal-colorsum script de 572 linhas com vários formatos de saída .

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

Tom Hale
fonte
7
Eu gosto do seu comentário sobre a escala de cinza na página do GitHub de scripts - "# 50 não, mas 24 tons de cinza"
MadisonCooper
11
Aqui está outro 24-bit de cor teste: gist.github.com/lifepillar/09a44b8cf0f9397465614e622979107f
masterxilo
Para executar terminal-colors, façacurl -s https://raw.githubusercontent.com/eikenb/terminal-colors/master/terminal-colors | python
masterxilo
@masterxilo o que é terminal-colorse como ele se compara às opções que sugeri?
Tom Hale #
como seria o padrão printf para colorir o texto em vez do plano de fundo?
ianstarz 4/01
35

Encontrei um bom script Python 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 para executar

chmod +x colortest.py

Executá-lo:

./colortest.py

Aqui está o script na íntegra 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 = "\033[38;5;%sm" 
bold = "\033[1;38;5;%sm"
reset = "\033[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, 
Zanna
fonte
11

Embora não seja muito um "padrão de teste", tenho xterm-color-seletor :

captura de tela

gravidade
fonte
curl -s https://raw.githubusercontent.com/grawity/code/master/term/xterm-color-chooser | python3
Masterxilo
7

Outro script, escrito por mim, está localizado no repositório VTE: https://git.gnome.org/browse/vte/plain/perf/256test.sh?h=vte-0-38 .

Requer uma janela de 120 ish ou mais colunas, mas organiza as cores do cubo 6x6x6 de maneira bem e compacta. Os primeiros dígitos dos índices são removidos para compactação, você pode descobrir facilmente. As barras verticais oferecem a capacidade de examinar o RGB exato da cor do primeiro plano, sem a necessidade de suavização de serrilhado (como ocorre nos dígitos).

A parte superior da saída (não mostrada na captura de tela abaixo) demonstra a loucura que circula com a ambiguidade em negrito vs. brilhante, a saber, que a sequência de escape de negrito combinada com uma das seqüências de escape de 8 cores herdadas do primeiro plano também muda para a cor brilhante da contraparte, enquanto que com o novo estilo (capaz de 256 cores), as seqüências de escape não são mais o caso, nem mesmo para as oito primeiras cores. Pelo menos é assim que o xterm e o VTE (GNOME Terminal etc.) se comportam.

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

Saída de 256test.sh no terminal GNOME

Egmont
fonte
2
curl -s -L https://git.gnome.org/browse/vte/plain/perf/256test.sh?h=vte-0-38 | bash
Masterdilo
6

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

https://gist.github.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3

Demo de 256 cores

#!/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 = '\033['
# 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='')
Wolph
fonte
2
Se alguém quiser executar esse script em uma linha, executecurl https://gist.githubusercontent.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3/raw/250eb2e3f2acca1c51aa52adf611ec0380291e8a/colortest.py | python3
Tommaso Thea Cioni
Eu sugirocurl -s https://gist.githubusercontent.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3/raw/colortest.py | python3
masterxilo
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 do primeiro plano

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