2013年7月9日火曜日

terminal-notifierを使ってみる(続き)


前の記事で紹介したterminal-notifierですが、ひとつ気になる点がありました。前回の記事にも書いていますが、標準入力を受け取って表示できない点です。
調べてみると、標準入力を受け取るようにしてほしいという要望は出ているようです。そして、RubyGem (Rubyのパッケージシステム)でインストールした場合は、Rubyの中からは標準入力が使えるようになっているようです。
ということで、ソースコードを見てみました。関係あるところは下記のようです。


unless ARGV.include?("-message")
  ARGV.push(*["-message", STDIN.read.chomp])
end


あまり、人のことは言えませんが、ちょっと手抜きかもですね。
-messageオプションが指定されていなかったら、強制的に標準入力を読むようですが、-messageは必須ではないので、期待しない動作になるかもしれません。
それと、標準入力は、Ruby側でなく、terminal-notifierの本体側で処理すべきな内容にみえます。

私は、RubyGemを使わずインストールしたのと、terminal-notifierをシェル(bash)で使いたいので似たようなラッパスクリプトを書いてみました。


#!/bin/sh

TNCMD=/opt/local/libexec/terminal-notifier.app/Contents/MacOS/terminal-notifier

if [ -t 0 ]; then
    $TNCMD "$@"
else
    msg=`cat -`
    $TNCMD -message "$msg" "$@"
fi


このスクリプトでは、標準入力が端末以外(コマンドのパイプなど)になっている場合、そこからcatコマンドで読むようにしています。
本当は、else部で-messageオプションが使われているかどうか調べる方がいいんですが、手抜きですね。-messageオプションが重複している場合、"$@"の中で-messageオプションが使われていると、そちらが実行されるようです。

もうひとつ、terminal-notifierで通知を表示する場合、アイコンがジェネリックなアプリケーションアイコンになるのもできれば改良してもらえるとありがたいですね。

でも、通知センターがMac OS Xの標準機能になったためか、growlnotifyでは時々取りこぼしが起きていたのが、terminal-notifierでは起きないようです。

0 件のコメント:

コメントを投稿