40 votes

Comment afficher mon texte de commande ruby en différentes couleurs

Comment créer les commandes de vente que je produis à partir d'une couleur de programme ruby basée sur une ligne de commande? J'apprécierais toutes les références à la façon dont j'appelle chaque couleur différente aussi.

Disons que nous commençons par ceci ..

 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 le texte que je veux dans les couleurs que je veux, vous voyez l'idée.

En utilisant Ubuntu, aurais-je besoin de changer mon approche pour que le programme fonctionne correctement en diff os?

57voto

Veger Points 17657

J'ai trouvé cet article décrit une méthode très simple pour écrire de couleur des textes à la console. L'article décrit ce petit exemple qui semble faire l'affaire (j'ai pris la liberté de l'améliorer un peu):

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 en mesure à l'exemple lorsque vous devez également 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'un joyau appelé win32console.

38voto

Mark Carey Points 1043

Je trouve que la gemme colorée est la plus facile et la 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 
 

6voto

darek129 Points 41

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 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
 

5voto

glasz Points 1243

utilisez 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 de gnou.

1voto

St.Woland Points 3574

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X