Growl にしか対応していないアプリからの通知を、OS X の通知センター(Notification Center)に統合する方法。
前置き
Growl にしか対応しないアプリもほとんど無くなってきたものの、私の場合、常用しているものとして Notify(メール・クライアント)、Sequel Pro、DropIn、ownCloud (1.6.0beta から通知センターに対応)などがあります。
Growl の設定画面で「OS Xの通知」を「オン」にすればすべての Growl 通知が通知センターにパス・スルーされますが、
- 通知の送信元が Growl の名のもとに区別無く表示されてしまう。
- 通知のアイコンも Growl のものになってしまう。
これをなんとかしたいと思います。
(なお、通知のアイコンを各アプリのものに変更するだけなら、CustomNC でも可能です。)
terminal-notifier のインストール
まず、シェルから通知センターに通知を送れる terminal-norifier コマンドを導入します。
直接 Growl に通知を送らせるのではなく、terminal-notifier を経由することで、あたかも各アプリが通知を送っているように見せることができます。
私の場合は Homebrew でインストールしました。
$ brew install terminal-notifier
その他のインストール方法(gem)やオプションなど詳しくは、上記リンクからご確認ください。
AppleScript を作成
Growl から terminal-norifier を叩くための AppleScript を作成します。
参考:Growl - AppleScript Rules Documentation for Growl
下記のような内容のスクリプトを Rules.scpt
という名前で保存し、~/Library/Application Scripts/com.Growl.GrowlHelperApp/
に置きます。
すでに以前から Rules.scpt
を利用している方は……、すみません、Growl で複数のスクリプトを利用する方法はよくわかりませんでした(下記を、うまくご自分のスクリプトとマージしてください)。
ここでは、初めて Rules.scpt
を作成したという前提で書かせていただきます。
using terms from application "Growl"
on evaluate notification with notification
-- Back-slashes are for escaping the first characters of arguments given to `terminal-notifer` (cf. issue #36).
set title to "\\" & notification's note title
set description to "\\" & notification's note description
set appname to notification's app name
try
set appid to the id of application appname
on error
set appid to the id of application "Growl"
end try
-- Tell `terminal-notifier` to send notification.
do shell script "/usr/local/bin/terminal-notifier -title " & quoted form of title ¬
& " -message " & quoted form of description ¬
& " -sender " & quoted form of appid
-- Suppress further actions from Growl.
return {display:none}
end evaluate notification
end using terms from
上記のうち「/usr/local/bin/terminal-notifier
」の部分は、Homebrewでインストールした場合です。各自の環境での terminal-notifier
のインストール先のパスに書き換えてください。
Growl の設定
Growl が起動していたら、終了させて再度起動してください。
これで Rules.scpt
が認識されます。
Growl の設定画面に、それまで無かった、「Use Rules」というチェックボックスが追加されています。
チェックがオンになっていることを確認します。
また、「OS Xの通知」を「オン」にしている方は、必ず「オフ」にします。
なお、はじめて Rules.scpt
を使用する際に、Growl が「Rules.scpt Detected」という警告を表示しますので、「はい」をクリックしてください。
以上で完了です。
##補遺
エラー?
コンソールを見ると Growl が何やらログを吐いているのですが、とりあえず動いているので無視してます。
Choose Application!
Growl 通知を送るアプリによっては、下のようなダイアログが出てしまうことがあります(アプリが自称する app name から bundle identifier を取得できないとき)。
「Cancel」を押せばいいのですが、当然うっとうしいので、このダイアログが出るアプリが特定されている場合は Rules.scpt
の冒頭のtry文のところを以下のような感じにして回避してください。
if appname = "Growl AppleScript Sample" then
set appid to the id of application "Growl"
else
try
set appid to the id of application appname
on error
set appid to the id of application "Growl"
end try
end if
上記だと Growl からの通知であるかのように表示されますが、terminal-notifler の -appIcon
オプションなどと合わせて工夫すれば、好きなアイコンを表示することもできると思います。