Comment imprimer un motif de test de 256 couleurs dans mon terminal ?
Je veux vérifier que mon terminal supporte correctement les 256 couleurs.
Comment imprimer un motif de test de 256 couleurs dans mon terminal ?
Je veux vérifier que mon terminal supporte correctement les 256 couleurs.
Pour obtenir l'image ci-dessous, utilisez :
curl -s https://gist.githubusercontent.com/HaleTom/89ffe32783f89f403bba96bd7bcd1263/raw/ | bash
Le code bash
/zsh
du gist est propre et compatible avec shellcheck
, et prend également en charge "Regardez maman, pas de sous-processus !".
Alternativement, pour un petit script en bash
:
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 une solution totale en excès, le script le plus complet est terminal-colors
, avec 572 lignes de code et plusieurs formats de sortie.
Vous pouvez également afficher un modèle de test en vraies couleurs (24 bits).
J'ai trouvé un joli script Python sur GitHub écrit par Justin Abrahms qui imprime é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
Donnez-lui la permission d'exécution
chmod +x colortest.py
Exécutez-le :
./colortest.py
Voici le script complet en cas de liens brisés :
#!/usr/bin/env python
# Adapté en Python depuis http://www.vim.org/scripts/script.php?script_id=1349
print "Les indices de couleur devraient être dessinés en texte gras de la même couleur."
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,
Alors que ce n'est pas vraiment un "modèle de test", j'ai xterm-color-chooser :
Un autre script, écrit par moi, est situé dans le référentiel VTE : https://git.gnome.org/browse/vte/plain/perf/256test.sh?h=vte-0-38.
Il nécessite une fenêtre de 120 colonnes ou plus, mais arrange les couleurs du cube 6x6x6 de manière agréable et compacte. Les premiers chiffres des indices sont supprimés pour des raisons de compacité, vous pouvez facilement les deviner. Les barres verticales vous permettent d'examiner le RGB exact de la couleur du premier plan sans que l'antialiasing ne se déclenche (comme c'est le cas avec les chiffres).
Le haut de la sortie (non montré dans la capture d'écran ci-dessous) démontre la folie qui entoure l'ambiguïté entre gras et lumineux, à savoir que la séquence d'échappement de la mise en gras combinée avec une des séquences d'échappement des 8 couleurs héritées pour le premier plan bascule également vers la couleur équivalente lumineuse, tandis qu'avec le nouveau style (256 couleurs) ce n'est plus le cas, même pour les 8 premières couleurs. Du moins c'est ainsi que xterm et VTE (Terminal GNOME etc.) se comportent.
Cette capture d'écran montre environ la moitié de la sortie :
Peut-être superflu mais j'ai écrit une version qui affiche les 256 couleurs en utilisant l'arrière-plan avec une détection automatique de la largeur de la coquille pour que les couleurs soient plus facilement visibles.
https://gist.github.com/WoLpH/8b6f697ecc06318004728b8c0127d9b3
#!/usr/bin/env python
from __future__ import print_function
import os
import shutil
import subprocess
def get_width(default=80):
'''Tente de détecter la largeur de la console et défaut à 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
# Comme nous avons 6 colonnes avec 1 espace de chaque côté, nous pouvons incrémenter la taille pour chaque 12 colonnes supplémentaires
return max(0, columns / 12)
# Basé sur 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['
# Séquence de réinitialisation de toutes les couleurs
reset = esc + '0m'
# Couleur normale
normal = esc + '38;5;{i}m'
# Couleur grasse
bold = esc + '1;' + normal
# Couleur de fond
background = esc + '48;5;{i}m'
pattern = (
'{normal}{background}{padding:^{width}}{i:^3d} ' # rembourrer l'arrière-plan
'{r:02X}/{g:02X}/{b:02X}' # afficher le code hex rgb
'{padding:^{width}}' # rembourrer l'arrière-plan de l'autre côté
'{reset}' # réinitialiser à nouveau
)
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))
# Changer la couleur du texte de noir à blanc lorsqu'il pourrait devenir illisible
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='')
# Afficher des sauts de ligne au besoin
if i % 6 == 3:
print()
else:
print(' ', end='')
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.