24
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Growl を通知センターにシームレスに統合する

Growl にしか対応していないアプリからの通知を、OS X の通知センター(Notification Center)に統合する方法。

前置き

Growl にしか対応しないアプリもほとんど無くなってきたものの、私の場合、常用しているものとして Notify(メール・クライアント)、Sequel ProDropInownCloud (1.6.0beta から通知センターに対応)などがあります。

Growl の設定画面で「OS Xの通知」を「オン」にすればすべての Growl 通知が通知センターにパス・スルーされますが、

  • 通知の送信元が Growl の名のもとに区別無く表示されてしまう。
  • 通知のアイコンも Growl のものになってしまう。

これをなんとかしたいと思います。
(なお、通知のアイコンを各アプリのものに変更するだけなら、CustomNC でも可能です。)

これを
default.png

こうしたい。
configured.png

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 を作成したという前提で書かせていただきます。

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の通知」を「オン」にしている方は、必ず「オフ」にします。

growl_general.png

なお、はじめて Rules.scpt を使用する際に、Growl が「Rules.scpt Detected」という警告を表示しますので、「はい」をクリックしてください。

以上で完了です。

補遺

エラー?

コンソールを見ると Growl が何やらログを吐いているのですが、とりあえず動いているので無視してます。

console.png

Choose Application!

Growl 通知を送るアプリによっては、下のようなダイアログが出てしまうことがあります(アプリが自称する app name から bundle identifier を取得できないとき)。

dialog.png

「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 オプションなどと合わせて工夫すれば、好きなアイコンを表示することもできると思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
24
Help us understand the problem. What are the problem?