week: ターミナルで使える色っぽいカレンダー

<img width="762" alt="スクリーンショット 2018-12-12 12.39.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/0855d479-32ba-6476-dbbc-d7fd58b927d6.png">

- 続編
  - [Tokyo2020 カレンダーと i18n モジュール - Qiita](https://qiita.com/kaz-utashiro/items/be37a4d703f9d2208ed1)

# cal コマンド

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

<img width="762" alt="スクリーンショット 2018-12-12 6.57.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/98db8d85-0c9d-ee7c-6169-33bcf7914589.png">

多くの場合直近の情報だけわかればいいのだが、月初や月末には、前月や翌月の情報も見たい。だから、前後の3ヶ月分を表示するために `week` というコマンドを作って、おそらく30年以上ではないかと思うが、ずっと使っていた。他の機能といえば、わかりやすいように、当日の日付がハイライトされるくらいだ。week という名前は変だという指摘もあるかもしれないが、なんとなく覚えやすいし、同名のコマンドも聞かないので使い続けていた。

最近になって、処理系のせいか自作の `week` コマンドの挙動がおかしくなったので調べてみると、最近の `cal` コマンドは、ご覧の様に今日の日付をハイライトし、`-3` というオプションで3ヶ月分を表示してくれるようになっていた。

<img width="762" alt="スクリーンショット 2018-12-12 6.57.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/7fdd9b82-0da9-4530-45a3-0b10dac22916.png">

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

<img width="762" alt="スクリーンショット 2018-12-12 9.59.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/ab475f76-2e72-8718-c744-7367994fd402.png">

[sdif]: https://github.com/kaz-utashiro/sdif-tools
[greple]: https://github.com/kaz-utashiro/greple
[week]: https://github.com/kaz-utashiro/App-week


# 新生 week コマンド

## デフォルト

[チームケンズ]: http://teamkens.co.jp/

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

<img width="762" alt="スクリーンショット 2018-12-12 6.16.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/f26b9d92-b8ce-17db-48d7-67e73dadb8c2.png">

## -数字 オプション

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

<img width="762" alt="スクリーンショット 2018-12-12 6.18.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/ad2ebea6-7565-2d77-68ec-3b0fab6e7bb6.png">

## -A, -B, -C オプション

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

<img width="762" alt="スクリーンショット 2018-12-12 6.18.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/4f5e4d7d-e01d-58af-0c3d-3736b23b6732.png">

## -y

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

<img width="762" alt="スクリーンショット 2018-12-12 10.02.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/9005a93a-1caa-4dff-f667-fc0118071817.png">

## -c オプション

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

<img width="1028" alt="スクリーンショット 2018-12-12 10.03.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/81fffc48-d5d1-61f7-0df4-50d977ac3b0e.png">

## 日付指定

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

<img width="762" alt="スクリーンショット 2018-12-12 10.14.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/d0f3b0b6-09c8-b577-b203-ddbe180452da.png">


# 色指定

色はオプションで自由に指定することができて、デフォルトではこのようにラベルに対して色を指定する様な設定になっている。ラベルの意味はだいたいわかるだろう。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
```
<img width="762" alt="スクリーンショット 2018-12-12 6.16.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/f26b9d92-b8ce-17db-48d7-67e73dadb8c2.png">

自分で好きな色を指定したい場合には `$HOME/.weekrc` に書く。

# モジュール

`colors` と `teams` という2つのモジュールを同梱してある。デフォルトモジュールの中で次のように宣言してあるので、特にモジュール指定をしなくてもこれらのオプションを使うことができる。

```default.pm
autoload -Mcolors --mono --green --lavender --pastel
autoload -Mteams --tigers --lions --giants
```

## -Mcolors: --mono, --green, --pastel

<img width="762" alt="スクリーンショット 2018-12-12 6.17.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/07fb8849-bdad-f3a2-641f-c7ec7ffe6c14.png">

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

## -Mteams: --tigers, --giants, --lions

<img width="762" alt="スクリーンショット 2018-12-12 6.17.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/5de2d71a-dcc7-3d0a-ff64-91657a20b375.png">

いつの時代だなどご指摘はあると思うが、気になる人は自分で直して github にプルリクいただければと。

# インストール

cpan で公開しているので、cpanm (cpanminus) を使ってインストールします。

```
$ curl -sL http://cpanmin.us | perl - App::week
```

# リポジトリ

* https://github.com/kaz-utashiro/App-week

# 参考

カレンダー全体に色をつけるだけなら [greple] の `-Mline` モジュールを使ってこんな風に実現することもできる。ご参考まで。

<img width="762" alt="スクリーンショット 2018-12-18 16.39.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/36551/53d9b1ff-e660-0093-2aec-fd69a44f9622.png">