Pureminder (リマインダ)とZsh socket programming
書き捨てユーティリティコード
- TOP
- Old Archives
- Pureminder (リマインダ)とZsh socket programming
Tasqueにはリマインダ機能がない。
Taskcoachということも考えはするが、残念ながらTaskcoachは私の環境ではSystem trayに収まってくれないため、非常に邪魔である。
そこで、リマインダを作ってみた。GitHubで公開している。今回はどちらかというとNoddy寄りだが、きちんとした形で公開している。
PureminderはZshで書かれている、クライアント/サーバーである。
サーバーはメッセージを受け取り、SOX(play
)で音を再生し、Zenityで画面に表示する。
わざわざクライアントサーバーモデルをとっているのは、atでの利用に問題があるためだ。
単にatでcallすると、Zenityは表示すべきディスプレイサーバーを見つけられない。
$DISPLAY
変数によって指定することはできるが、マルチユーザー環境での動作が信用できない。
そこで、確実に機能させるため、現在のデスクトップ上で起動し、ユーザー別に作られるUNIXドメインソケットでメッセージを受け取る、という仕様とした。
だが、PureminderはZshだ。 一般にはなかなか見かけることのない、Zsh socket programmingをちょっと紹介しよう。
まず、モジュールをロードする。
zmodload zsh/net/socket
次にzsocket -l
でソケットを作成する。
zsocket -l "$sockfile"
$REPLY
にファイルデスクリプタ(Integer)が入るので、とっておく。
typeset -g sock=$REPLY
zsocket -a
で接続を待ち受ける。引数はソケットのファイルデスクリプタ。
zsocket -va $sock
$REPLY
に接続のファイルデスクリプタが入る。この接続は全二重。
閉じる時は次のようにする。
exec {fd}>& -