Wydrukuj 256-kolorowy wzór testowy w terminalu

62

Jak wydrukować 256-kolorowy wzór testowy w moim terminalu?

Chcę sprawdzić, czy mój terminal poprawnie obsługuje 256 kolorów.

Tom Hale
źródło
wpisz /cubesirssi ( źródło )
mirabilos

Odpowiedzi:

94

256-kolorowy wzór testowy

Aby uzyskać poniższy obraz, użyj:

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

256-kolorowy wzór testowy

Istota bash/ zshcode jest shellcheckczyste, a także obsługuje „Spójrz mamo, nie podprocesów”.


Alternatywnie, dla bashszybkiego:

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

Dla całkowitej przesadą, dziadka parceli terminal-colors, o skrypt 572 linii z wielu formatów wyjściowych .

Możesz także wydrukować wzór testowy w prawdziwym kolorze (24-bit) .

Tom Hale
źródło
7
Podoba mi się twój komentarz do skali szarości na stronie GitHub skryptów - „#Nie 50, ale 24 Odcienie szarości”
MadisonCooper
1
Oto kolejny 24-bitowy test kolorów: gist.github.com/lifepillar/09a44b8cf0f9397465614e622979107f
masterxilo
Aby uruchomić terminal-colors, wykonajcurl -s https://raw.githubusercontent.com/eikenb/terminal-colors/master/terminal-colors | python
masterxilo
@masterxilo co to jest terminal-colorsi jak to porównać z opcjami, które zasugerowałem?
Tom Hale,
jak wyglądałby wzór printf do kolorowania tekstu zamiast tła?
ianstarz
35

Znalazłem ładny skrypt Pythona do tego na GitHub napisany przez Justina Abrahmsa, który drukuje również kody szesnastkowe kolorów.

Pobierz skrypt do bieżącego katalogu roboczego

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

daj mu uprawnienia do wykonania

chmod +x colortest.py

Uruchom:

./colortest.py

Oto pełny skrypt w przypadku rotacji linków:

#!/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
źródło
11

Chociaż nie jest to „wzór testowy”, mam Xterm-wybór kolorów :

zrzut ekranu

grawitacja
źródło
curl -s https://raw.githubusercontent.com/grawity/code/master/term/xterm-color-chooser | python3
masterxilo,
7

Jeszcze inny skrypt, napisany przeze mnie, znajduje się w repozytorium VTE: https://git.gnome.org/browse/vte/plain/perf/256test.sh?h=vte-0-38 .

Wymaga okna 120 lub więcej kolumn, ale ładnie i kompaktowo układa kolory kostki 6x6x6. Pierwsze cyfry indeksów są pozbawione zwięzłości, można je łatwo rozgryźć. Pionowe paski umożliwiają sprawdzenie dokładnego RGB koloru pierwszego planu bez wprowadzania antyaliasingu (tak jak w przypadku cyfr).

Górna część wyników (niepokazana na poniższym zrzucie ekranu) pokazuje szaleństwo, które towarzyszy śmiałej i jasnej niejednoznaczności, a mianowicie, że sekwencja ucieczki śmiałości w połączeniu z sekwencją ucieczki jednego z 8 kolorów dla pierwszego planu również przełącza się na jasny kolor odpowiednika, podczas gdy w nowym stylu (z 256 kolorami) sekwencjami ucieczki nie ma to już miejsca, nawet dla pierwszych 8 kolorów. Przynajmniej tak zachowują się Xterm i VTE (GNOME Terminal itp.).

Ten zrzut ekranu pokazuje około połowy wyników:

Wyjście 256test.sh w GNOME Terminal

egmont
źródło
2
curl -s -L https://git.gnome.org/browse/vte/plain/perf/256test.sh?h=vte-0-38 | bash
masterxilo,
6

Być może zbędne, ale napisałem wersję, która drukuje 256 kolorów za pomocą tła z automatycznym wykrywaniem szerokości powłoki, dzięki czemu kolory są łatwiej widoczne.

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

Wersja próbna 256 kolorów

#!/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
źródło
2
Jeśli ktoś chce uruchomić ten skrypt w jednej linijce, uruchomcurl https://gist.githubusercontent.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3/raw/250eb2e3f2acca1c51aa52adf611ec0380291e8a/colortest.py | python3
Tommaso Thea Cioni
Sugerujęcurl -s https://gist.githubusercontent.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3/raw/colortest.py | python3
masterxilo
3

Jednowarstwowy

kolor tła

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

kolor pierwszego planu

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