Rubyだけでなく、他の言語でも(多分)使えるやりかたです。
(他にCで試してみましたがオッケーでした。pythonだとprint文で上手く行かないので、他の関数を使うといけるかも?)
単純に、文字列中に"\e[数字m"と書いてあげるとオッケーです。
数字は
color_dict = { reset: 0 red: 31, green: 32, yellow: 33, blue: 34, magenta: 35, cyan: 36, white: 37 }
みたいな対応をしています。resetに当たる\e[0mを使ってあげないと、いつまでも色が着いたままになるので要注意。
サンプル;
$stdout << "\e[31m 赤い文字\n" print "\e[33m 黄色の文字\n" puts "\e[0m リセットされた普通の文字\n"
ちなみに、
class String def red "\e[31m#{self}\e[0m" end end
とかやってStringクラスを拡張するとRubyっぽい、かも。