Распечатайте тестовый шаблон с 256 цветами в терминале

Как я печатаю тестовый шаблон с 256 цветами в своем терминале?

Я хочу проверить, что мой терминал правильно поддерживает 256 цветов.

63
задан 6 September 2016 в 22:01

7 ответов

Тестовый шаблон с 256 цветами

Для получения ниже изображения используйте:

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

256-colour test pattern

Суть bash/zsh код shellcheck чистый, и также поддерживает, "Смотрят мама, никакие подпроцессы!".


С другой стороны, для a 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

Для общего излишества дедушка партии terminal-colors, сценарий с 572 строками с несколькими выходными форматами.

Можно также распечатать истинный цвет (24-разрядный) тестовый шаблон.

95
ответ дан 22 November 2019 в 23:34

Еще один сценарий, записанный мной, расположен в репозитории VTE: https://git.gnome.org/browse/vte/plain/perf/256test.sh? h=vte-0-38.

Это требует окна с 120 выходами или большего количества столбцов, но располагает цвета 6x6x6 куб приятно и сжато. Первые цифры индексов разделяются для компактности, можно легко понять их. Вертикальные панели предоставляют Вам способность исследовать точный RGB основного цвета, не сглаживаясь умирающий (как это делает в цифрах).

вершина вывода (не показанный в снимке экрана ниже) демонстрирует сумасшествие, которое распространяется вокруг с полужирным по сравнению с яркой неоднозначностью, а именно, что escape-последовательность полужирности объединилась с одним из наследия, которое escape-последовательность 8 цветов для переднего плана также переключает на яркий цвет дубликата, тогда как с новым стилем (с 256 цветами способный) escape-последовательности это больше не имеет место, даже для первых 8 цветов. По крайней мере это - то, как xterm и VTE (Терминал GNOME и т.д.) ведут себя.

Этот снимок экрана показывает приблизительно половину вывода:

Output of 256test.sh in GNOME Terminal

7
ответ дан 22 November 2019 в 23:34

В то время как не вполне "тестовый шаблон", я имею xterm-выбор-цвета :

screenshot

11
ответ дан 22 November 2019 в 23:34

Острота

цвет фона

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

основной цвет

for i in {0..255}; do printf '\e[38;5;%dm%3d ' $i $i; (((i+3) % 18)) || printf '\e[0m\n'; done
3
ответ дан 22 November 2019 в 23:34

Я нашел хороший сценарий Python для этого на GitHub записанным Justin Abrahms, который также печатает шестнадцатеричные коды цветов.

Загрузите сценарий на текущий рабочий каталог

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

дайте его, выполняют разрешение

chmod +x colortest.py

Выполнение это:

./colortest.py

Вот сценарий полностью в случае гнили ссылки:

#!/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, 
35
ответ дан 22 November 2019 в 23:34

Возможно, лишний, но я записал версию, которая печатает 256 цветов с помощью фона с автоматическим обнаружением ширины оболочки, таким образом, цвета более легко видимы.

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

256 color test demo

#!/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='')
6
ответ дан 22 November 2019 в 23:34

Мне понравился ответ @Tom, но в зависимости от варианта использования мне нравится видеть черное и белое на цвете и цвет на белом и черном. Поэтому я немного изменил его, чтобы:

#!/bin/bash

for i in {0..255} ; do
    # Black FG on color BG
    printf "\e[30;48;5;%sm%4d " "$i" "$i"

    # White FG on color BG
    printf "\e[97m%4d " "$i"

    # Color FG on black BG
    printf "\e[40;38;5;%sm%4d " "$i" "$i"

    # Color FG on white BG
    printf "\e[107m%4d " "$i"

    # Check whether to print new line
    [ $(( ($i +  1) % 4 )) == 0 ] && set1=1 || set1=0
    [ $(( ($i - 15) % 6 )) == 0 ] && set2=1 || set2=0
    if ( (( set1 == 1 )) && (( i <= 15 )) ) || ( (( set2 == 1 )) && (( i > 15 )) ); then
        printf "\e[0m\n";
    fi
done

Что печатает что-то вроде этого (показаны первые несколько цветов): enter image description here

1
ответ дан 19 July 2020 в 15:52

Другие вопросы по тегам:

Похожие вопросы: