世界はすっかりGUIに支配されました。コンピュータといったらWindowシステムのことです。人々を魅了したのはその操作性だけではありません。人々はそのカラフルな世界に魅了されたのです。

確かにCUIの世界には色はありません。辛うじて環境変数LSCOLORSをセットして、色の付いたファイル名を眺めるだけの、暗くて地味な、そしてそれを使う人を孤独にさせる世界です。

しかしそんな世界にTermtterが登場しました。TermtterはANSIカラーを引き連れて、CUIの世界に一条の光を差しました。まるでGB末期に登場したポケモンの如くに!1

それ以来、僕の中ちまたでは、ターミナルのカラー化が流行しています。

RubyでANSIカラーシーケンスを学ぼう!

どこかで誰かが叫ぶ声が聞こえます。

ターミナルにもっと色を!

ターミナルにもっと色を!

そんなわけで..

calを色付けして出力するCalourを作りました。多分Reinventing the Wheelでしょうけれども..

Ruby1.9にのみ対応しています。色付けにはTermColorライブラリを使っています。

使い方

添付ファイルをダウンロードしてそのなかの/bin/cal.rbを実行します。

% ruby cal.rb

引数無しで当月のカレンダーを表示します。今日の日付には反転した色が付きます。

image

月と年でその年月のものを、月のみで本年のその月を、年のみで年間カレンダーを表示します。

% ruby cal.rb 3 2011
% ruby cal.rb 2050 9
% ruby cal.rb 5
% ruby cal.rb 1600

image

image

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 )

image

titleの2つの引数はそれぞれ、タイトルにおける月と年のカラーです。デフォルトのカラーは以下の通りです。

:title =>  [:green,:yellow]
  :today =>  :green
  :saturday =>  :cyan
  :sunday =>  :magenta
  :holiday =>  :red

祭日の色付け

holiday_optオプションを指定することで、祭日の色付けをすることができます。

Calour.new(holiday_opt: {country: :ja_ja})

image

祭日データはGoogle Calendar Data APIから取得しています。

verboseオプションをtrueにすれば祭日名を同時に表示します。

Calour.new(holiday_opt {country: :ja_ja, verbose:true})

image

image

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になっています。

image

irbやTermtterで使う

irbやTermtterで使う場合は以下の記事の中で紹介したbosonライブラリを介すると便利です。

IRB それはRubyistの魔法のランプ

~/.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コマンドで使えます。

image

shell上ではbosonコマンドを前置します。

% boson cal

Termtterで使う場合はこのaliasを作れば便利です。aliasの作成は~/.termtter/configで以下のようにします。

config.plugins.alias.aliases = {
    :cal => '! boson cal'
}

image

制限

  1. Ruby1.9のみの対応です
  2. 内部でシステムのcalコマンドを呼んでいます
  3. それが無いシステムでは動作しません
  4. OSX Tigerでしか動作確認していません
  5. 他のシステムで動作するかわかりません
  6. 無責任無保証です

使ってくれる人がいたらうれしいです。

melborne’s calour at master - GitHub

  1. よく知りませんけど


blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS