背景
最近時間のかかるコマンドをよく使ってて、放置して忘れちゃうことが多かったので、処理が終わったら通知する仕組みが欲しくて考えた。
やりかた
色んなことが出来ますが、とりあえずGrowlに通知してみる。
やり方は
1: どれくらい処理に時間がかかったら通知するか決める
2: .zshrc
に、以下の記述をして再読み込みする(代入してる値は1.で決めた秒数)
REPORTTIME=1
3: iTermのPreferences -> Profiles -> Advanced -> Triggers -> Edit で以下の記述をする。
# Regular Expression
^.* cpu [0-9.:]+ total
# Parameters
DONE!!!\n\0
4: おわり!
結果
試しに時間かかりそうなコマンドを打ってみる
$ find . -type f -maxdepth 8 -print > /dev/null
これが終わるとこうなる。
便利!
解説
まずにzshrcに書いた REPORTTIME=1
は、この秒数を超える処理があると実行時間を表示する機能をzshが持ってる。
そんでもって、iTerm2には画面の出力を監視して設定した正規表現にヒットすると何かしらアクションを起こす機能があるので、zshが上記の実行時間表示をしたかどうかを監視して、ヒットしたらGrowlの通知を出した、という感じ。
発展
タイトルどおり、Growlに通知する以外にもiTerm2に設定したところのActionとParametersを変えることによって色々出来る。
例えばRegular Expressionは上述の通りにして
- ActionにRing Bellをセットすると音が出る。
- ActionにBounce Dock Iconをセットするとドックアイコンがバウンドする
- ActionにShow Alert、ParametersをGrowlと同じにすると↓こうなる
という感じ。任意のコマンドを走らせる事もできるので、ターミナルで出来ることはほぼなんでもできちゃいます。
追記
- 設定しても反映されなければ、iTerm2を再起動すると反映されるかも。
- tmux/screen使ってたら、この文字列が入ってる画面を切り替えるたびに反応して使い物にならなかった(´・ω・`)