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