
cal コマンド
Unix には cal
というコマンドがある。単体で実行すると、当月のカレンダーを表示し、年を指定すれば、その一年分のカレンダーを表示してくれる。

多くの場合直近の情報だけわかればいいのだが、月初や月末には、前月や翌月の情報も見たい。だから、前後の3ヶ月分を表示するために week
というコマンドを作って、おそらく30年以上ではないかと思うが、ずっと使っていた。他の機能といえば、わかりやすいように、当日の日付がハイライトされるくらいだ。week という名前は変だという指摘もあるかもしれないが、なんとなく覚えやすいし、同名のコマンドも聞かないので使い続けていた。
最近になって、処理系のせいか自作の week
コマンドの挙動がおかしくなったので調べてみると、最近の cal
コマンドは、ご覧の様に今日の日付をハイライトし、-3
というオプションで3ヶ月分を表示してくれるようになっていた。

なんだ、これで week
コマンドは用済みだと思うと、ちょっと残念な気分になり、また cal
コマンドの色気のない表示にいささかがっかりして、色をつけてみることにした。あと、上の画像を見ていただければわかるように、日本語で表示すると月の行がバグっている。中国語だとより顕著だ。

新生 week コマンド
デフォルト
デフォルトの表示は、こんな感じだ。イメージしたのはチームケンズのラベンダーブルー✌️。

-数字 オプション
ハイフンの後に数字を与えると、前月からその月数のカレンダーを表示する。

-A, -B, -C オプション
-A
と -B
オプションは前後に表示する月数を指定する。-C
オプションは両方を同時に指定し、デフォルトでは前後4ヶ月分、合計9ヶ月分を表示する。

-y
-y
オプションをつけると、1年分のカレンダーを表示する。ちなみに、当月から1年分を表示したければ -B0A11
とか -12 -B0
のようにすればよい。

-c オプション
-c
オプションはカラム数を指定する。-Y
オプションと組み合わせて -Y2c6
のように使うと、2年分のカレンダーを6カラムで表示する(図のコマンドは間違っているので注意)。

日付指定
日付を指定すると、今日ではなくその日を中心に表示する。次の様にすれば 1752年9月2日を含む1年分のカレンダーを表示する。

色指定
色はオプションで自由に指定することができて、デフォルトではこのようにラベルに対して色を指定する様な設定になっている。ラベルの意味はだいたいわかるだろう。3桁の数字は 6x6x6 で216色の RGB 指定だ。000 が黒で 555 が白。Lではじまるのはグレースケールで、L00 は黒、L25 は白、L01-L24 が24階調のグレーを表す。スラッシュの左側がフォアグラウンドの色で、右側はバックグラウンド。
--colormap DAYS=L05/335 \
--colormap WEEK=L05/445 \
--colormap FRAME=L05/445 \
--colormap MONTH=L05/335 \
--colormap THISDAY=522/113 \
--colormap THISDAYS=555/113 \
--colormap THISWEEK=L05/445 \
--colormap THISMONTH=555/113

自分で好きな色を指定したい場合には $HOME/.weekrc
に書く。
モジュール
colors
と teams
という2つのモジュールを同梱してある。デフォルトモジュールの中で次のように宣言してあるので、特にモジュール指定をしなくてもこれらのオプションを使うことができる。
autoload -Mcolors --mono --green --lavender --pastel
autoload -Mteams --tigers --lions --giants
-Mcolors: --mono, --green, --pastel

この中で --pastel
だけは24ビットのRGB値で指定してある。ただ、多くの端末は256色しか表示できないので、自動的に256色に変換される。24ビットカラーが表示可能な端末 (たとえば iTerm2) を使っている場合は、--rgb24
オプションを指定するか export GETOPTEX_RGB24=1
などのように環境変数を設定する。
-Mteams: --tigers, --giants, --lions

いつの時代だなどご指摘はあると思うが、気になる人は自分で直して github にプルリクいただければと。
インストール
cpan で公開しているので、cpanm (cpanminus) を使ってインストールします。
$ curl -sL http://cpanmin.us | perl - App::week
リポジトリ
参考
カレンダー全体に色をつけるだけなら greple の -Mline
モジュールを使ってこんな風に実現することもできる。ご参考まで。
