最終更新日:2010/12/19
Growlを改造したりしていろいろ遊んでみるページです。
%html%
をエスケープ前のdescriptionで置換するようにした。HTMLを使ってネット上の画像等を簡単に表示できます。例:
YahooPhoto.zip(2009-08-03現在情報取得元のhtmlが変わったようで動きません)
<<<AppleScript>>>
に続けてAppleScriptを書くと通知をクリックした時に実行する。<<<Title>>>
をhtmlドキュメントのタイトルに置換してから実行する。htmlからAppleScriptへ文字を渡すための仕掛けだけど特に使わないかも。<!-- canClickMode -->
と書いてあったら通知をクリックしても閉じなくてhtmlのリンクなどをクリックできるようにする。またコンテキストメニューを表示可能にする。通知を閉じるときは左上の×ボタンを押します。<!-- showScrollingMode -->
と書いてあったらスクロールバーを表示する。特に使い道はないかも。<!-- autoActivateMode -->
と書いてあったら通知を表示したときに通知ウインドウをアクティブにする。文字入力がある場合、通知をクリックしなくてもテキスト入力ができるようになる。"~/Library/Scripts/Applications/Growl/"にアプリケーション名と同じスクリプトファイルがある場合は、そのスクリプトを実行します。実行するタイミングは、通知を表示したとき、クリックした時、クリックして閉じた時、クリックせず閉じた時があります。
例:GrowlSafariの場合、~/Library/Scripts/Applications/Growl/GrowlSafari.scptを実行します。
実行するハンドラは下記のようになります。
注意点として、同時に通知が表示される場合はスクリプトは同時に実行されるので、(プロパティーの)保存に失敗するものが出る場合があります。通常の実行には問題ないようですが、スクリプト中でプロパティーに値を保存して利用する物はうまく動かない場合があると思います。
on run {theApplicationName, theName, theTitle, theDescription, theNotificationNumber, theAction}
if theAction is "display" then --表示した時
say "display"
else if theAction is "clicked" then --クリックした時。クローズ時のスクリプトは実行されません。
say "clicked"
else if theAction is "clicked close" then --クローズボックスをクリックして閉じた時
say "clicked close"
else if theAction is "notification close" then --closeGrowlNotificationで閉じた時
say "notification close"
else if theAction is "close" then --上記以外で自動的に閉じた時
say "close"
end if
end run
--my closeGrowlNotification("", "*", "", "*", "", "*", "", "*", "", "*") -- すべての通知を閉じる
my closeGrowlNotification("GrowlSafari", "=", "ダウンロード完了", "=", "", "*", "", "*", "", "*") --GrowlSafariの"ダウンロード完了"通知を閉じる
--my closeGrowlNotification("", "*", "", "*", "終了", "contains", "", "*", "", "*") --タイトルに終了を含む通知を閉じる
on closeGrowlNotification(theApplicationName, theApplicationNameMatch, theName, theNameMatch, theTitle, theTitleMatch, theDescription, theDescriptionMatch, theNotificationNumber, theNotificationNumberMatch)
(*
指定したGrowlの通知を閉じる。
指定した下記値とすべて一致した通知が閉じます。
theApplicationName : アプリケーション名
theName : 通知名。Growlの環境設定で確認できます。
theTitle : 通知のタイトル部分の文字
theDescription : 通知の説明部分の文字
theNotificationNumber : 通知の番号。整数で1ずつ増えて付けられる。
・matchの指定方法
"*" : 常に一致と見なす
"=" : 指定文字と同じ
"equal" : 指定文字と同じ
"contains" : 指定文字を含む
"prefix" : 指定文字で始る
"suffix" : 指定文字で終わる
"not" : 比較結果を否定する。上と組み合わせる場合は"not contains"の様に指定する
・theNotificationNumberMatchの指定方法
"*" : 常に一致と見なす
"before" : theNotificationNumberより前の番号なら対象
"after" : theNotificationNumberより後の番号なら対象
"=" : theNotificationNumberと同じ番号なら対象
"equal" : theNotificationNumberと同じ番号なら対象
"not" : 比較結果を否定する。上と組み合わせる場合は "not before"の様に指定する
*)
set theRubyScript to "require 'osx/cocoa';
dic = {'applicationName' => ARGV[1],
'applicationNameMatch' => ARGV[2],
'name' => ARGV[3],
'nameMatch' => ARGV[4],
'title' => ARGV[5],
'titleMatch' => ARGV[6],
'description' => ARGV[7],
'descriptionMatch' => ARGV[8],
'notificationNumber' => ARGV[9],
'notificationNumberMatch' => ARGV[10]
};
OSX::NSDistributedNotificationCenter.defaultCenter.postNotificationName_object_userInfo('com.Growl.GrowlHelperApp.closeNotification',nil, dic);
"
return do shell script "/usr/bin/ruby -e " & quoted form of theRubyScript & " v " & " " & quoted form of theApplicationName & " " & quoted form of theApplicationNameMatch & " " & quoted form of theName & " " & quoted form of theNameMatch & " " & quoted form of theTitle & " " & quoted form of theTitleMatch & " " & quoted form of theDescription & " " & quoted form of theDescriptionMatch & " " & quoted form of theNotificationNumber & " " & quoted form of theNotificationNumberMatch
end closeGrowlNotification
例:指定した通知が表示された時に、その通知と同じ種類の古い通知を閉じる。また、クローズボタンで閉じた時に同じ名前の通知を閉じる(Growlを再起動したり、optionキーを押しながらクリックしなくても手軽に全部閉じられるようにする)。
下記スクリプトが実行されるようにします。
on run (argv)
try --スクリプトエディタでテスト実行できるようにする
copy argv to {theApplicationName, theName, theTitle, theDescription, theNotificationNumber, theAction}
on error --テスト用
copy {"test app name", "test name", "test title", "test desc", "0", "display"} to {theApplicationName, theName, theTitle, theDescription, theNotificationNumber, theAction}
end try
if theAction is "display" then
delay 3 -- 3秒後に古い通知を閉じる
my closeGrowlNotification(theApplicationName, "=", theName, "=", "", "*", "", "*", theNotificationNumber, "before")
else if theAction is "clicked" then
else if theAction is "clicked close" then
my closeGrowlNotification(theApplicationName, "=", theName, "=", "", "*", "", "*", "", "*")
end if
end run
通知表示時にスクリプトを実行できるようにした理由はSafariのダウンロード完了時にAppleScriptを実行したいと思ったからです。とりあえず、目的のダウンロード完了でスリープとその他いろいろできるようにできました。他の通知をトリガーにしていろいろ何か面白いことができるかなと思いましたが、何も思いつきませんでした…。
二つ目の指定した通知を閉じるのは、どっかの掲示板でスティッキーにしていると通知で画面が埋まるので、最新の一個だけ表示できないか、みたいなことがあったのでやってみました。定期的にどんどん通知が来て、最新版だけ確認できればいい物をスティッキーにしている場合に便利かな。あと、関連する通知をオプションキーを押さなくてもまとめて閉じることができるようになったのは地味だけど便利になったと思いました。
ダッシュボードでいいじゃんっていうのは無しで…
スクリプトを実行すると画像のような通知が表示されます。Growlの通知スタイルはpureHTMLViewを使ってください。
一度pureHTMLView用の通知を表示するとGrowlの設定に"pureHTML App"が追加されるのでそれのスタイルをpureHTMLViewにします。設定すると次からの表示がhtmlを解釈するようになり画像などが表示され、クリック等できるようになったりもします。
Flickrの特定タグの画像をスライドショーする。なかなか良くて作ってからちょくちょく実行させてます。
古いバージョンの動画
Google ガジェットも表示できました。
RPN電卓です。昔JavaScriptの練習で作った物ですが動きました。実用的かといえばスポットライトなどで計算できるので使わないかも。
Flickr Slideshowをベースに2chのレスをスクロール表示するもの。流してみるには2chResViewよりこっちのほうが好みかもしれない。1.1.6r3が必要。
なんかJavaScriptのhtml追加部分でメモリリークしてるみたいだが直し方が分からなかった。Flickr Slideshowもメモリリークしてると思われる。でもほんのちょっとずつ増えていくからたまにGrowlを再起動しておけば大丈夫そう。WebKitがバージョンアップしたら直るかも。メモリがある程度増えると増加が止まってるような気もするのである程度増えるとちゃんとWebKitがメモリ解放してくれてるのかもしれない。
サービスから選択したテキストを翻訳してGrowlで通知するAutomator用workflow
lsof -iの結果を表示するスクリプト。ネットワークに繋がっているアプリケーションと接続先ホストがわかります。一定時間ごとに結果が更新されていきます。
1e100.netはGoogleらしいのでGoogleと表示します。
改造版Growl1.2.1のAppleScript実行機能で通知をiCalに追加、記録するスクリプト。
~/Library/Scripts/Applications/Growl/に置いてください。
ファイル名がGrowlTunes用になっていますが、他のアプリケーションの通知をiCalに記録する場合はスクリプトファイルの名前をそのアプリケーション名に変更してください。
GrowlTunesの通知をiCalに追加すると下記画像のようになります。