Rubyでcalをカラフルに
世界はすっかりGUIに支配されました。コンピュータといったらWindowシステムのことです。人々を魅了したのはその操作性だけではありません。人々はそのカラフルな世界に魅了されたのです。
確かにCUIの世界には色はありません。辛うじて環境変数LSCOLORSをセットして、色の付いたファイル名を眺めるだけの、暗くて地味な、そしてそれを使う人を孤独にさせる世界です。
しかしそんな世界にTermtterが登場しました。TermtterはANSIカラーを引き連れて、CUIの世界に一条の光を差しました。まるでGB末期に登場したポケモンの如くに!1。
それ以来、僕の中ちまたでは、ターミナルのカラー化が流行しています。
どこかで誰かが叫ぶ声が聞こえます。
ターミナルにもっと色を!
ターミナルにもっと色を!
そんなわけで..
calを色付けして出力するCalourを作りました。多分Reinventing the Wheelでしょうけれども..
Ruby1.9にのみ対応しています。色付けにはTermColorライブラリを使っています。
使い方
添付ファイルをダウンロードしてそのなかの/bin/cal.rbを実行します。
% ruby cal.rb
引数無しで当月のカレンダーを表示します。今日の日付には反転した色が付きます。
月と年でその年月のものを、月のみで本年のその月を、年のみで年間カレンダーを表示します。
% ruby cal.rb 3 2011
% ruby cal.rb 2050 9
% ruby cal.rb 5
% ruby cal.rb 1600
cal.rbの中身は以下のようになっています。
#!/usr/bin/env ruby
#-*-encoding: utf-8-*-
require_relative "../lib/calour"
puts Calour.new.cal *ARGV.map(&:to_i)
Calourクラスのオブジェクトを生成して、唯一のパブリックメソッドcalを呼ぶことで色付きカレンダーの文字列を出力します。
色の指定
オブジェクトの生成時に引数でカラーを指定できます。
Calour.new( title: [:magenta, :yellow],
today: :cyan,
saturday: :blue,
sunday: :red )
titleの2つの引数はそれぞれ、タイトルにおける月と年のカラーです。デフォルトのカラーは以下の通りです。
:title => [:green,:yellow]
:today => :green
:saturday => :cyan
:sunday => :magenta
:holiday => :red
祭日の色付け
holiday_optオプションを指定することで、祭日の色付けをすることができます。
Calour.new(holiday_opt: {country: :ja_ja})
祭日データはGoogle Calendar Data APIから取得しています。
verboseオプションをtrueにすれば祭日名を同時に表示します。
Calour.new(holiday_opt {country: :ja_ja, verbose:true})
countryオプションは現在 ja_ja(日本語表記) ja(英語表記) us au(australian) cn(china) fr(french) de(german) it(italian) kr(south_korea) tw(taiwan) gb(uk) に対応しています。holiday_optはデフォルトではoffになっています。
irbやTermtterで使う
irbやTermtterで使う場合は以下の記事の中で紹介したbosonライブラリを介すると便利です。
~/.boson/commandsディレクトリに以下のようなRubyモジュールを作ります。
vi .boson/commands/mysystem.rb
autoload :Calour, 'calour'
module MySystem
# colorized calendar
def cal(*args)
puts Calour.new(holiday_opt: {country: :ja_ja, verbose:true}).cal(*args.map(&:to_i))
puts
end
end
そうすればirb上でcalコマンドで使えます。
shell上ではbosonコマンドを前置します。
% boson cal
Termtterで使う場合はこのaliasを作れば便利です。aliasの作成は~/.termtter/configで以下のようにします。
config.plugins.alias.aliases = {
:cal => '! boson cal'
}
制限
- Ruby1.9のみの対応です
- 内部でシステムのcalコマンドを呼んでいます
- それが無いシステムでは動作しません
- OSX Tigerでしか動作確認していません
- 他のシステムで動作するかわかりません
- 無責任無保証です
使ってくれる人がいたらうれしいです。
melborne’s calour at master - GitHub
- よく知りませんけど ↩
blog comments powered by Disqus