端末に表示するフォントの色を変更する

2011 年 9 月 5 日 by 山平

Unix系のアプリケーションの場合、基本的に本体はコマンド群で構成されています。
時々CUIフロントエンドがついてきたりしますが、標準でGUIのフロントエンドがついてくるのは稀なように感じます。

今回はCUIのフロントエンドを作りたい場合の話になります。
端末上に表示する文字の色や太さを変更するにはどうすればいいのかを調べていて、以下のようなサイトを見つけました。

phpのバッチでターミナル上で色をつける方法

フムフム、「制御コード+色指定」でいけるとのことなので試してみましょう。

#!/usr/bin/ruby

@color = { :none=>"[0m", :red=>"[31m", :blue=>"[34m"}
def tcs(color, str) [0x1b].pack("c*") + @color[color] + str; end
[:red, :blue, :none].each{|c| puts tcs(c, "colorful string") }

colorful_terminal

あっさりできました。
ただ、以降の文字も同じ指定を引き継いでしまうので、色指定の最後にデフォルトの設定に戻してやる必要があります。
もう一点、過去にemacsのshellモードで色認識しなかったことがあり、制御文字がそのまま表示されてしまってずいぶん見難い状態になったことがあります。
色制御を行う前に、端末が色を認識できるかどうかのチェックが必要なようです。

調査を進めると、端末制御のデファクトスタンダード、Cursesライブラリというものがあるようです。
Rubyもこれをラップしたライブラリを持っており、その中で色認識の可否も確認できるようです。

今日はここまでです。

タグ: ,

TrackBack