grdcとは
grdc(6) grand digital clock はターミナル上に大きなデジタル・クロックを表示出来る curses アプリケーションです、以前は /usr/games 以下にあった様なのですがいつの頃からか /usr/bin に標準でインストールされる様になった様です。
経緯
そのままターミナル上で grdc と実行するとデカイ(笑)デジタル・クロックが赤で表示されます。
ただ man でも確認しましたが表示は赤表示のみで表示色を変更する様なオプションは無い様です、赤表示って言うとエンジニアとしてはどうもエラー表示の様で何と無く気持ちが悪いので何とかならないかと探してみると、やはり頼りになるのはソースファイルと言う事で /usr/src/usr.bin/grdc 以下の grdc.c を眺めてみると、
if(hascolor) {
start_color();
init_pair(1, COLOR_BLACK, COLOR_RED);
init_pair(2, COLOR_RED, COLOR_BLACK);
init_pair(3, COLOR_WHITE, COLOR_BLACK);
attrset(COLOR_PAIR(2));
}
と言う箇所で foreground color, background color をハードコードで設定している事が判りました 、ダメじゃん (^_^)。
と言う事で設定箇所は判りました init_pair() に渡しているパラメータを変更すれば表示色を変える事が出来る事は判ったので COLOR_RED を適当な値に設定すれば良いのですが、先々ターミナルの環境を変更した場合 (筆者は黒バックで使っています) に再度ビルドすると言うのもアレなので環境変数から表示色を変更出来る様に以下のパッチを作成しました。
- パッチへのリンク
grdc-patch.txt
ビルド方法
適当なサブディレクトリを作成して、上記パッチのダウンロードとオリジナルソースをコピーする。
$ mkdir my-grdc
$ cd my-grdc
$ cp /usr/src/usr.bin/grdc/grdc.c .
$ cp somewhere/grdc-patch.txt .
# ソースにパッチを適用する
$ patch -p0 <grdc-patch.txt
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- /usr/src/usr.bin/grdc/grdc.c 2023-12-02 20:06:31.413163000 +0900
|+++ grdc.c 2024-09-05 11:45:10.260641000 +0900
--------------------------
Patching file grdc.c using Plan A...
Hunk #1 succeeded at 18.
Hunk #2 succeeded at 44.
Hunk #3 succeeded at 111.
Hunk #4 succeeded at 279.
done
# エラーが無ければOK
$ cc -O2 grdc.c -lncursesw -o my-grdc
# エラーが無ければOK
実行してみる
$ GRDC_COLOR=cyan ./my-grdc
いちいち環境変数を指定するのは面倒だと言う場合は .shrc 等で環境変数に設定しておくか alias 等を設定しておくのが良いのでは無いかと思います。
環境変数 GRDC_COLOR が設定されていない場合はオリジナルと同じ様にデフォルトで赤表示となります。
最後に
grdc はかなり昔からあったアプリケーションの様ですが /usr/games 以下にあった為にソースを展開する事があまり無かったので、その存在を全く知りませんでした (筆者の個人的な感想です)、/usr/bin 以下のアプリケーションを探していて偶然に発見しました他にも普段は気が付かない同様のアプリケーションがあるかも知れません、UNIX系OSは奥が深いです...。