ライオンズカラーのカレンダーと termcolor モジュール

# week コマンド

少し前にこういう記事を書いた。

- [ターミナルで使える色っぽいカレンダー - Qiita](https://qiita.com/kaz-utashiro/items/603f4bca39e397afc91c)

<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">

# プロ野球チーム別カラーコード

試しにプロ野球チーム用オプションをいくつか用意したのだが、厳密な色設定はしていなかった。探してみると、RGB値を調べてくれているサイトがあったので、これを反映してみた。

- [プロ野球１２球団のロゴとイメージカラーコード（16進・RGB） | 綾糸.net](https://ayaito.net/webtips/color_code/4286/#toc_id_4_5)
- [野球チームカラー色見本 | 色見本(6桁,RGB),類似色との違い](http://color-sample.fashion-guide.jp/?cid=39)

[week]: https://github.com/kaz-utashiro/App-week
[Getopt::EX]: https://github.com/kaz-utashiro/Getopt-EX
[termcolor]: https://github.com/kaz-utashiro/Getopt-EX-termcolor
[Getopt::EX::Colormap]: https://metacpan.org/pod/Getopt::EX::Colormap

[week] コマンドの色設定は [Getopt::EX::Colormap] モジュールを使っていて、基本は 6x6x6 の216色で指定する。しかし、24ビットで指定した値は216色に変換して表示し、24ビットカラー対応の端末であれば、そのまま表示することも可能だ。

冒頭のタイガースカラーはこうなった。

<img width="762" alt="スクリーンショット 2020-05-28 09.26.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/5003d574-4efc-af84-8305-046650ef6f2f.png">

# ライオンズカラー

さて、我らが西武ライオンズだが、今のユニフォームは3代目らしい。前に作った `--lions` オプションは第2世代の色を使っていたので、現役カラーに変更した。古い色は `--lions2` に。上のサイトを参考にしたら、なんとなく赤が暗すぎる気がする。修正案あれば採用します。

- [埼玉西武ライオンズ 新サードユニフォーム特設サイト｜埼玉西武ライオンズ](https://www.seibulions.jp/ocms/special/3rduniform/)

<img width="762" alt="スクリーンショット 2020-05-28 09.18.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/e6a3a299-6896-9f8d-1599-d30fc16f9519.png">

# 背景色に合わせる

さて、このライオンズ第3世代カラーを背景色が黒い端末で表示するとこうなる。

<img width="764" alt="スクリーンショット 2020-05-28 09.23.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/651c8e75-1c81-0561-7e51-c646c6d305fd.png">

これでは冴えないので、`--lions-rev` という反転パターンを作った。

<img width="764" alt="スクリーンショット 2020-05-28 09.24.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/cc95426f-5c5e-89c4-1147-a6f7a96b06e6.png">

# Getopt::EX::termcolor

こうなると、端末の背景色に合わせてオプションを変更したい。実は、こんなこともあろうかと、最近 [Getopt::EX] 用の [termcolor] というモジュールを作ってあった。

これは、`Getopt::EX` を利用するアプリから共通に使えるモジュールだ。`week` コマンドの場合 `~/.weekrc` に次のような設定を入れておくことで、明る位背景色の端末では `--lions`、暗い背景色の端末では `--lions-rev` オプションが自動的に付与される。

```~/.weekrc
option default -Mtermcolor::bg(light=--lions,dark=--lions-rev)
```

<img width="664" alt="スクリーンショット 2020-05-28 09.45.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/200018f2-71d5-3454-c567-381e05552f9b.png">

一番上は Apple 標準ターミナルで、下の2つは iTerm2 だ。iTerm は24ビットカラー表示が可能なので、それを有効にしてあるのが一番下の画面。微妙な違いだがわかるだろうか。

# 背景色の自動取得

[termcolor] モジュールは、XTerm の制御シークエンスを使って、端末の背景色を自動的に取得している。macOS の標準端末や iTerm などは対応しているので問題ないのだが、どうもマイクロソフト製の端末は TERM=XTerm-256color と謳いながら軒並み非対応な気がする。

- https://github.com/kaz-utashiro/Getopt-EX-termcolor/wiki/XTerm

このような場合は `TERM_BGCOLOR` という環境変数を `#000000` とか `#FFFFFF` とかに設定しておけばそれを使うようになっている。

# --team オプション

ついでに `teams.pm` の中に次のようなオプションを追加してみた。

```teams.pm
option --termcolor::bg -Mtermcolor::bg(light=--$<shift>,dark=--$<shift>-rev)
option --team --termcolor::bg $<copy(0,1)>
```

こうすることで、`~/.weekrc` では次のように設定すればよくなった。

```~/.weekrc
option default --team lions
```

# インストール

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

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