À l'aide de Ruby, comment puis-je effectuer la colorisation du texte d'arrière-plan et de premier plan pour la sortie dans le terminal?
Je me souviens, lors de la programmation de Pascal, nous écrivions tous nos propres textcolor(…)
procédures pour rendre nos petits programmes éducatifs plus jolis et plus présentationnels.
Comment pourrais-je procéder pour coder un équivalent de cela dans Ruby?
Réponses:
Coloriser est mon joyau préféré! :-)
Vérifiez-le:
https://github.com/fazibear/colorize
Installation:
Usage:
la source
win32console
gemme etrequire 'win32console'
aprèscolorize
.win32console
gemme. github.com/luislavena/win32console/issues/…En combinant les réponses ci-dessus, vous pouvez implémenter quelque chose qui fonctionne comme la gemme à colorier sans avoir besoin d'une autre dépendance.
la source
En tant que méthodes de classe String (Unix uniquement):
et utilisation:
sur ma console:
Additionnel:
supprime les caractères de formatage
Remarque
la source
def bold; "\e[1m#{self}\e[22m" end
cmd.exe
,puts "\e[0"
ne fonctionne pas pour effacer le format;puts "\e[0m"
doit être utiliséJ'ai écrit une petite méthode pour tester les modes de couleur de base, basée sur les réponses d'Erik Skoglund et d'autres.
exemple de sortie:
la source
Vous pouvez utiliser des séquences d'échappement ANSI pour ce faire sur la console. Je sais que cela fonctionne sur Linux et OSX, je ne sais pas si la console Windows (cmd) prend en charge ANSI.
Je l'ai fait à Java, mais les idées sont les mêmes.
la source
Alors que les autres réponses feront l'affaire pour la plupart des gens, la manière Unix "correcte" de le faire doit être mentionnée. Étant donné que tous les types de terminaux de texte ne prennent pas en charge ces séquences, vous pouvez interroger la base de données terminfo , une abstraction sur les capacités de divers terminaux de texte. Cela peut sembler la plupart du temps d'intérêt historique - terminaux logiciels utilisés aujourd'hui supportent en général les séquences ANSI - mais il ne possède (au moins) un effet pratique: il est parfois utile de pouvoir définir la variable d'environnement
TERM
pourdumb
éviter tout ce style, par exemple lors de l'enregistrement de la sortie dans un fichier texte. En outre, il est bon de faire les choses à droite . :-)Vous pouvez utiliser la gemme ruby-terminfo . Il a besoin d'être compilé en C pour être installé; J'ai pu l'installer sous mon système Ubuntu 14.10 avec:
Ensuite, vous pouvez interroger la base de données comme ceci (voir la page de manuel terminfo pour une liste des codes disponibles):
Voici une petite classe wrapper que j'ai réunie pour rendre les choses un peu plus simples à utiliser.
Usage:
(modifier) Enfin, si vous préférez ne pas avoir besoin d'une gemme, vous pouvez vous fier au
tput
programme, comme décrit ici - exemple Ruby:la source
tput
. Je ne peux même pas dire combien la perte de cheveuxtput
m'a sauvé.J'ai fait cette méthode qui pourrait aider. Ce n'est pas grave mais ça marche:
Voici comment l'utiliser:
Les améliorations possibles pourraient être:
colors
etbgColors
sont définis à chaque appel de la méthode et ne changent pas.bold
,underline
,dim
, etc.Cette méthode ne fonctionne pas pour
p
, tout commep
uninspect
pour son argument. Par exemple:affichera "\ e [0; 38mHello World \ e [0m"
Je l'ai testé avec
puts
,print
et le bijou Logger, et cela fonctionne très bien.J'ai amélioré cela et fait une classe ainsi
colors
etbgColors
sont des constantes de classe etcolorize
est une méthode de classe:EDIT: meilleur style de code, constantes définies au lieu de variables de classe, utilisation de symboles au lieu de chaînes, ajout d'options supplémentaires comme, gras, italique, etc.
Vous pouvez l'utiliser en faisant:
la source
Voici ce que j'ai fait pour le faire fonctionner sans avoir besoin de gemmes:
Ensuite, seul le texte entre guillemets est coloré et vous revenez à votre programme régulier.
la source
e[32mSOMETEXT
"\e(...)"
au lieu de"e\(...)"
J'en ai trouvé quelques-uns:
http://github.com/ssoroka/ansi/tree/master
Exemples:
http://flori.github.com/term-ansicolor/
Exemples:
http://github.com/sickill/rainbow
Exemple:
Si vous êtes sous Windows, vous devrez peut-être faire une "gem install win32console" pour activer la prise en charge des couleurs.
De plus, l'article Colorizing console Ruby-script output est utile si vous devez créer votre propre bijou. Il explique comment ajouter une coloration ANSI aux chaînes. Vous pouvez utiliser ces connaissances pour l'envelopper dans une classe qui étend la chaîne ou quelque chose.
la source
Cela peut vous aider: Sortie rubis colorisée
la source
class String; def red; colorize(self, "\033[31m"); end; end
J'ai trouvé les réponses ci-dessus utiles, mais cela ne convenait pas si je voulais coloriser quelque chose comme la sortie du journal sans utiliser de bibliothèques tierces. Les éléments suivants ont résolu le problème pour moi:
J'espère que ça aide!
la source