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っぽい、かも。