Comment imprimer un motif de test 256 couleurs sur mon terminal?
Je souhaite vérifier que mon terminal prend correctement en charge 256 couleurs.
modèle de test 256 couleurs
Pourcequiprécède,vouspouvezutilisermonbash
/ zsh
code qui correspond à shellcheck
clean. , et prend également en charge "Look Ma, pas de sous-processus!"
Ou pour un coup rapide:
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
Pour le total des dépassements, le grand-père du lot est terminal-colors
, un script à 572 lignes avec plusieurs formats de sortie .
Vous pouvez également imprimer un motif de test couleur vraie (24 bits) .
J'ai trouvé un bon script Python pour cela sur GitHub écrit par Justin Abrahms, qui affiche également les codes hexadécimaux des couleurs. .
Téléchargez le script dans le répertoire de travail actuel
wget https://gist.githubusercontent.com/justinabrahms/1047767/raw/a79218b6ca8c1c04856968d2d202510a4f7ec215/colortest.py
lui donner la permission d'exécution
chmod +x colortest.py
Lancez-le:
./colortest.py
Voici l'intégralité du script en cas de lien-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,
Bien que je ne sois pas plutôt un "modèle de test", je suis xterm-color-chooser :
Pourtant, un autre script, écrit par moi, se trouve dans le référentiel VTE: lien .
Il nécessite une fenêtre de 120 colonnes ou plus, mais dispose les couleurs du cube 6x6x6 correctement et de manière compacte. Les premiers chiffres des index sont supprimés pour des raisons de compacité, vous pouvez facilement les comprendre. Les barres verticales vous permettent d’examiner le RVB exact de la couleur de premier plan sans effectuer un repliement antialiasing (comme c’est le cas pour les chiffres).
Le haut de la sortie (non visible dans la capture d'écran ci-dessous) montre la folie qui entoure l'ambiguïté entre l'audace et le vif, à savoir que la séquence d'échappement d'audace est combinée à l'une des séquences d'échappement de l'héritage 8 couleurs pour le premier plan. passe également à la couleur de contrepartie brillante, alors qu'avec le nouveau style (compatible 256 couleurs), ce n'est plus le cas, même pour les 8 premières couleurs. Du moins, c’est ainsi que se comportent xterm et VTE (terminal GNOME, etc.).
Cette capture d'écran montre environ la moitié de la sortie:
Peut-être superflu, mais j’ai écrit une version qui imprime les 256 couleurs en utilisant l’arrière-plan avec la détection automatique de la largeur de la coque afin que les couleurs soient plus facilement visibles.
#!/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='')
Lire d'autres questions sur les étiquettes command-line colors