Comment puis-je faire les commandes put que je génère à partir d'une ligne de commande basée sur Ruby couleur du programme? J'apprécierais toute référence à la façon dont j'appelle chaque couleur différente également.
Disons que nous commençons par cela ..
puts "The following Word is blue.. Im Blue!"
puts "The following Word is green.. Im Green!"
puts "The following Word is red.. Im Red!"
Et je reçois un texte différent que je veux dans différentes couleurs que je veux, vous avez l'idée.
Im utilisant Ubuntu, aurais-je besoin de changer mon approche pour que le programme sorte correctement dans diff os?
J'ai trouvé cet article décrivant un moyen très simple d'écrire des textes colorés sur la console. L'article décrit ce petit exemple qui semble faire l'affaire (j'ai pris la liberté de l'améliorer légèrement):
def colorize(text, color_code)
"\e[#{color_code}m#{text}\e[0m"
end
def red(text); colorize(text, 31); end
def green(text); colorize(text, 32); end
# Actual example
puts 'Importing categories [ ' + green('DONE') + ' ]'
puts 'Importing tags [' + red('FAILED') + ']'
Le mieux semble définir certaines des couleurs. Vous pouvez étendre l'exemple lorsque vous avez également besoin de différentes couleurs d'arrière-plan (voir en bas de l'article).
Lors de l'utilisation de Windows XP, l'auteur mentionne l'exigence d'une gemme appelée win32console .
Je trouve que le Gemme colorée est le plus simple et le plus propre à utiliser.
puts "this is red".red
puts "this is red with a blue background (read: ugly)".red_on_blue
puts "this is red with an underline".red.underline
puts "this is really bold and really blue".bold.blue
logger.debug "hey this is broken!".red_on_yellow
J'ai créé quelque chose comme ça:
begin
require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
rescue LoadError
raise 'You must gem install win32console to use color on Windows'
end
class Colors
COLOR1 = "\e[1;36;40m"
COLOR2 = "\e[1;35;40m"
NOCOLOR = "\e[0m"
RED = "\e[1;31;40m"
GREEN = "\e[1;32;40m"
DARKGREEN = "\e[0;32;40m"
YELLOW = "\e[1;33;40m"
DARKCYAN = "\e[0;36;40m"
end
class String
def color(color)
return color + self + Colors::NOCOLOR
end
end
Maintenant, vous pouvez simplement utiliser une autre méthode de String:
"Hello World".color(Colors::DARKGREEN)
Pour connaître toutes les couleurs, exécutez simplement ceci:
begin
require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
rescue LoadError
raise 'You must gem install win32console to use color on Windows'
end
[0, 1, 4, 5, 7].each do |attr|
puts '----------------------------------------------------------------'
puts "ESC[#{attr};Foreground;Background"
30.upto(37) do |fg|
40.upto(47) do |bg|
print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg} "
end
puts "\033[0m"
end
end
utiliser la séquence d'échappement \033
au lieu de \e
car il est 100% compatible posix et fonctionnera également sur les systèmes bsd-ish (par exemple osx). ce dernier est une extension gnu.
Je pensais ajouter une autre solution car elle fait les choses un peu différemment et comprend plus de codes de couleur:
D'abord quelques exemples ...
Utilisation du chaînage de méthodes:
String.include(AnsiTextStyles)
puts "How are you?".blue.bold + " " + 'I am good!'.red.bold
puts '%s %s' % ["How are you?".blue.bold, 'I am good!'.red.bold]
Utilisation de la méthode style
et application de plusieurs attributs:
puts "How are you?".style(:red)
puts 'I am good!'.style(:blue, :underline)
puts 'Good to hear'.style([:bg_Magenta, :blink])
Cela peut être utilisé pour stocker les attributs de style d'une manière quelconque pour les appliquer plus tard:
text_styles = {
red_bold: [:red, :bold],
blue_underline: [:blue, :underline],
pretty: [:bg_Magenta, :blink],
}
text_styles.each do |name, style|
styled_text = "Text styled multiple ways".style(style)
puts "%s: %s" % [name, styled_text]
end
J'ai donné quelques exemples supplémentaires sur cet Gist que j'ai créé et développé le code pour inclure des améliorations afin que les modifications apportées à String soient limitées.
Voici le code de base:
module AnsiTextStyles
TEXT_ATTRIBUTES = {
# text properties
none: 0, # turn off all attributes
bold: 1, bright: 1, # these do the same thing really
italic: 3, underline: 4, blink: 5,
reverse: 7, # swap foreground and background colours
hide: 8, # foreground color same as background
# foreground colours
black: 30, grey: 90, lt_grey: 37, :white => 97,
red: 31, lt_red: 91,
green: 32, lt_green: 92,
dk_yellow: 33, brown: 33, yellow: 93,
blue: 34, lt_blue: 94,
Magenta: 35, pink: 95, lt_Magenta: 95,
cyan: 36, lt_cyan: 96,
default: 39,
# background colours
bg_black: 40, bg_grey: 100, bg_lt_grey: 47, bg_white: 107,
bg_red: 41, bg_lt_red: 101,
bg_green: 42, bg_lt_green: 102,
bg_dk_yellow: 43, bg_brown: 43, bg_yellow: 103,
bg_blue: 44, bg_lt_blue: 104,
bg_Magenta: 45, bg_pink: 105, bg_lt_Magenta: 105,
bg_cyan: 46, bg_lt_cyan: 106,
}
def self.text_attributes
TEXT_ATTRIBUTES.keys
end
# applies the text attributes to the current string
def style(*text_attributes)
codes = TEXT_ATTRIBUTES.values_at(*text_attributes.flatten).compact
"\e[%sm%s\e[m" % [codes.join(';'), self.to_s]
end
end
Utilisez Colorize gem! Vérifiez-le:
https://github.com/fazibear/colorize
Installation:
Sudo gem install colorize
usage:
require 'colorize'
puts "I am now red.".red
puts "I am now blue.".green
puts "I am a super coder".yellow
Découvrez les bibliothèques suivantes:
http://www.gnu.org/software/ncurses/ncurses.html
Pour une solution rapide et sale, vous pouvez simplement incorporer ASCII codes couleur dans vos chaînes (\ e [XXm définit la couleur à utiliser désormais sur XX et\e [0m réinitialise la couleur sur Ordinaire):
puts "The following Word is blue.. \e[34mIm Blue!\e[0m"
puts "The following Word is green.. \e[32mIm Green!\e[0m"
puts "The following Word is red.. \e[31mIm Red!\e[0m"
Les codes ASCII prennent également en charge des éléments comme le soulignement, le clignotement et la mise en surbrillance du texte.
Il semble également y avoir une bibliothèque d'aide disponible qui traite les codes ASCII pour vous).
Edit : en ce qui concerne les différentes plates-formes: vous ne devriez avoir aucun problème à utiliser les codes ASCII sur les machines Unix, mais Windows , AFAIK, ne les prend pas en charge. Heureusement, il y a un win32console gem qui semble résoudre ce problème.
Vous pouvez utiliser l'extrait de code suivant (présent sur la page liée à Veger) pour charger la bibliothèque win32console uniquement sur Windows:
begin
require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
rescue LoadError
raise 'You must gem install win32console to use color on Windows'
end
Découvrez la gemme cli-colorize: http://github.com/stjohncj/cli-colorize/blob/master/README.rdoc
Ma suggestion: le Paint bijou. Il n'applique pas les extensions de chaîne et prend en charge 256 couleurs (avec mode de repli pour les terminaux non 256 couleurs).
Usage:
puts Paint["I'm blue!", :blue]
puts Paint["I'm dark blue if your terminal supports it!", "#000044"]