RSS

Ruby: コンソールで色付き文字をエスケープシーケンスを使って表示

18 9月

次のサンプルは色付き文字列を表示するためのエスケープシーケンスを返すメソッドを持つ Color クラスを定義して、それを利用するサンプルです。

#
#  カラークラス
#
class Color
 Black = 0
 Red = 1
 Green = 2
 Yellow = 3
 Blue = 4
 Magenta = 5
 Cyan = 6
 White = 7

 #
 #  エスケープシーケンスを得る
 #   パラメータ fg : 前景色(Black..White)
 #   パラメータ bg : 背景色(Black..White)
 #   パラメータ fgint : 前景色をtrueなら明るく表示、falseなら暗く表示
 #   パラメータ bgint : 背景色をtrueなら明るく表示、falseなら暗く表示
 #   戻り値 : 色設定用エスケープシーケンス
 def self.getFgBg(fg, bg, fgint, bgint)
  ec = "\033["
  # background
  if bgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "4"
  ec += bg.to_s()
  ec += ";"
  # foreground
  if fgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "3"
  ec += fg.to_s()
  ec += "m"
  return ec
 end

 #
 # 前景色のエスケープシーケンスを得る。
 #   パラメータ fg : 前景色(Black..White)
 #   パラメータ fgint : 前景色をtrueなら明るく表示、falseなら暗く表示
 #   戻り値 : 色設定用エスケープシーケンス
 def self.getFg(fg, fgint)
  ec = "\033["
  if fgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "3"
  ec += fg.to_s()
  ec += "m"
  return ec
 end

 #
 # 背景色のエスケープシーケンスを得る。
 #   パラメータ bg : 背景色(Black..White)
 #   パラメータ bgint : 背景色をtrueなら明るく表示、falseなら暗く表示
 #   戻り値 : 色設定用エスケープシーケンス
 def self.getBg(bg, bgint)
  ec = "\033["
  if bgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "4"
  ec += bg.to_s()
  ec += "m"
  return ec
 end


#
#  属性をリセットする。
 def self.reset()
   return "\033[0m"
 end
end


# テスト
esc = Color::getFg(Color::Cyan, false)
puts esc + "テスト"
esc = Color::getBg(Color::Magenta, false)
puts esc + "テスト"
esc = Color::getFgBg(Color::Blue, Color::Green, true, false)
puts esc + "テスト"
esc = Color::reset
puts esc + "Done."

実行例 (Ubuntu 16.04LTS, Ruby 2.3.0, TeraTerm)

ruby_color_class

 
コメントする

投稿者: : 2016/09/18 投稿先 Ruby

 

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。