How to output my ruby commandline text in different colours How to output my ruby commandline text in different colours ruby ruby

How to output my ruby commandline text in different colours


I found this article describing a very easy way to write coloured texts to the console. The article describes this little example which seems to do the trick (I took the liberty to improve it slightly):

def colorize(text, color_code)  "\e[#{color_code}m#{text}\e[0m"enddef red(text); colorize(text, 31); enddef green(text); colorize(text, 32); end# Actual exampleputs 'Importing categories [ ' + green('DONE') + ' ]'puts 'Importing tags       [' + red('FAILED') + ']'

Best seems to define some of the colours. You can extent the example when you need also different background colours (see bottom of article).

When using Window XP, the author mentions the requirement of a gem called win32console.


I find the Colored gem to be the easiest and cleanest to use.

puts "this is red".redputs "this is red with a blue background (read: ugly)".red_on_blueputs "this is red with an underline".red.underlineputs "this is really bold and really blue".bold.bluelogger.debug "hey this is broken!".red_on_yellow 


I've created something like this:

begin   require 'Win32/Console/ANSI' if PLATFORM =~ /win32/rescue LoadError   raise 'You must gem install win32console to use color on Windows'endclass 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"endclass String   def color(color)      return color + self + Colors::NOCOLOR   endend

Now you can just use another method of String:

"Hello World".color(Colors::DARKGREEN)

To know all the colors just execute this:

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