Archive for the 'Notifications Scripting' Category

2012/09/25 AppleScriptから通知センター経由でメッセージを表示するNotifications Scripting。ただし、まだ荒削り

cooperative-fruitiere.comが、AppleScriptから通知センター経由でNofitication表示を行える、Notifications Scriptingを配布しています

AppleScriptからNotification Center(通知センター)経由で通知を表示させる方法については、AppleScriptObJCで行う方法が各所で紹介されていますが、通知を行ったアプリをquitする必要があるなど、まだ「手口」が確立されていない状況です(通知したあと終了したら意味がない。別プロセスで通知専用の処理を立ち上げる必要がある???)。

そんな中、このNotifications Scripting(GUIなしFacelessアプリケーション)が登場したわけですが、「手口」としてはまだこなれていない印象を受けます。とはいえ、ノーマルのAppleScriptから通知が利用できる数少ない方法であるため、試してみることにしました。

# 通知の仕組みをサードパーティのアプリケーション(コマンドラインツールとか、この手のScripting Addition風アプリとか)をインストールしないで済む方法がベスト。別に、その部分だけObjective-Cで書かれていても、AppleScriptObjCから呼び出せるのでぜんぜん問題はありません

■Notifications Scriptingの仕様

Notifications Scriptingに一番近い存在は、(元になったとおぼしき)Growlによる通知システムです。GrowlではGrowl Helper/Growlに対してAppleScriptの命令を発行して、指定のメッセージを指定の方法で通知させるようになっていました。

Notifications Scriptingでは、通知するほかに「通知が通知センターに受け付けられたことをAppleScript側に知らせる」機能や、通知センター上のバナー表示がクリックされたことをAppleScript側に知らせる」機能を持っています。つまり、Growlの通知システムよりも機能が増えて、高度なことができるようになっているわけです。

not1.png

表示したバナーなり通知センター内のバナーをクリックした場合のAppleScriptへの通知もハンドリングできます。

not2.png

ただ、この通知センターからAppleScriptに知らせる機能を実現するために、まずNotification Centerに実行するAppleScriptのフルパスを(aliasで)登録する必要があります(添付サンプルの「set event handlers script path to (path to me)」の部分)。そして、AppleScript編集プログラムの上でこの通知Scriptを編集し……コピペで記述内容を別のScriptにコピーしたような場合……

AppleScript編集プログラム上で構文確認(コンパイル)を実行すると、エラーになってしまいます。

何か間違ったことをしたんだろうかと考え、元のAppleScriptを構文確認(コンパイル)&実行しようとしても、こちらもハネられてしまいます。

いろいろ試してみて、後から分ったことですが……Notifications Scriptingを一度終了させないと、この状態は元に戻りません。サンプルScriptをコピーして自分の処理に組み込んだり、書き換えたりしようとすると、とたんに原因不明のエラーに襲われます。

not3.png

これは、なかなか困りものです。添付のドキュメントもえらく素っ気ないので、途方に暮れてしまいました。

■いちばん簡単な使い方

Notifications Scriptingは、いろいろと便利な機能を提供してくれるのですが、そのすべての機能を毎回使わなくても大丈夫です。世の中のAppleScriptのほとんどは、通知センターにただ通知メッセージの表示機能しか期待していないはずです。

通知センターからAppleScriptへのトークバックの機能については、見なかったことにして、ただ通知を表示するための道具と割り切ったほうがよさそうです。

また、Notifications Scriptingに通知を行わせたら、毎回Notifications Scriptingをquitさせましょう。

スクリプト名:notif2
tell application “Notifications Scripting”
  
  
set event handlers script path to (path to me)
  
set dict to {theName:“Notifications Scripting”, theVersion:“1.0″, theScript:event handlers script path}
  
display notification “タイトルだよーーん2″ subtitle “サブタイトルだよーーん2″ message “メッセージだよーーーん2″ sound name “Default” user info dict
  
  
quit –ここが重要!!
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に