Rubyでcalをカラフルに
ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。
Rubyでcalをカラフルに : melborne.github.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
世界はすっかりGUIに支配されました
コンピュータといったらWindowシステムのことです
人々を魅了したのはその操作性だけではありません
人々はそのカラフルな世界に魅了されたのです
確かにCUIの世界には色はありません
辛うじて環境変数LSCOLORSをセットして
色の付いたファイル名を眺めるだけの
暗くて地味な
そしてそれを使う人を孤独にさせる世界です
しかしそんな世界にTermtterが登場しました
TermtterはANSIカラーを引き連れて
CUIの世界に一条の光を差しました
まるでGB末期に登場したポケモンの如くに!*1
それ以来 僕の中ちまたでは
ターミナルのカラー化が流行しています
RubyでANSIカラーシーケンスを学ぼう! - hp12c
どこかで誰かが叫ぶ声が聞こえます
ターミナルにもっと色を!
ターミナルにもっと色を!
そんなわけで..
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でしか動作確認していません
他のシステムで動作するかわかりません
無責任無保証です
使ってくれる人がいたらうれしいです
*1:よく知りませんけど