Imprima un patrón de prueba de 256 colores en el terminal

63

¿Cómo imprimo un patrón de prueba de 256 colores en mi terminal?

Quiero comprobar que mi terminal admite correctamente 256 colores.

Tom Hale
fuente
escriba /cubesirssi ( fuente )
mirabilos

Respuestas:

95

Patrón de prueba de 256 colores

Para obtener la siguiente imagen, use:

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

Patrón de prueba de 256 colores

La esencia bash/ zshcódigo es shellchecklimpio, y también admite "¡Mira Ma, no hay subprocesos!".


Alternativamente, para un bashquicky:

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 una exageración total, el abuelo del lote es terminal-colorsun script de 572 líneas con múltiples formatos de salida .

También puede imprimir un patrón de prueba de color verdadero (24 bits) .

Tom Hale
fuente
77
Me gusta su comentario sobre la escala de grises en la página de guiones GitHub - "# No 50, pero 24 sombras de Grey"
MadisonCooper
1
Aquí hay otra prueba de color de 24 bits: gist.github.com/lifepillar/09a44b8cf0f9397465614e622979107f
masterxilo
Para correr terminal-colors, hacercurl -s https://raw.githubusercontent.com/eikenb/terminal-colors/master/terminal-colors | python
masterxilo
@masterxilo, ¿qué es terminal-colorsy cómo se compara con las opciones que sugerí?
Tom Hale
¿Cómo sería el patrón printf para colorear el texto en lugar del fondo?
ianstarz
35

Encontré un buen script de Python para eso en GitHub escrito por Justin Abrahms que también imprime los códigos hexadecimales de los colores.

Descargue el script al directorio de trabajo actual

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

darle permiso de ejecución

chmod +x colortest.py

Ejecutarlo:

./colortest.py

Aquí está el script completo en caso de rotura de enlace:

#!/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
fuente
11

Aunque no es exactamente un "patrón de prueba", tengo xterm-color-chooser :

captura de pantalla

Gravedad
fuente
curl -s https://raw.githubusercontent.com/grawity/code/master/term/xterm-color-chooser | python3
masterxilo
7

Otro script, escrito por mí, se encuentra en el repositorio de VTE: https://git.gnome.org/browse/vte/plain/perf/256test.sh?h=vte-0-38 .

Requiere una ventana de 120 o más columnas, pero organiza los colores del cubo de 6x6x6 de forma agradable y compacta. Los primeros dígitos de los índices están despojados de la compacidad, puede resolverlos fácilmente. Las barras verticales le brindan la capacidad de examinar el RGB exacto del color de primer plano sin patadas antialiasing (como lo hace en los dígitos).

La parte superior de la salida (no se muestra en la captura de pantalla a continuación) demuestra la locura que rodea a la ambigüedad en negrita vs. brillante, a saber, que la secuencia de escape de la audacia combinada con una de las secuencias de escape de los 8 colores heredados para el primer plano también cambia a el color brillante de la contraparte, mientras que con las secuencias de escape de nuevo estilo (con capacidad para 256 colores) este ya no es el caso, ni siquiera para los primeros 8 colores. Al menos así es como se comportan xterm y VTE (Terminal GNOME, etc.).

Esta captura de pantalla muestra aproximadamente la mitad de la salida:

Salida de 256test.sh en el terminal GNOME

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

Quizás sea superfluo, pero he escrito una versión que imprime los 256 colores usando el fondo con detección automática del ancho de la carcasa para que los colores sean más fácilmente visibles.

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

Demostración de prueba de 256 colores

#!/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
fuente
2
Si alguien quiere ejecutar este script de una sola vez, ejecutecurl https://gist.githubusercontent.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3/raw/250eb2e3f2acca1c51aa52adf611ec0380291e8a/colortest.py | python3
Tommaso Thea Cioni
Sugierocurl -s https://gist.githubusercontent.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3/raw/colortest.py | python3
masterxilo
3

Una línea

color de fondo

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

color de primer plano

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