最終更新日:2010/12/19

Growlでいろいろ遊ぶ

Growlでいろいろ遊ぶとは?

Growlを改造したりしていろいろ遊んでみるページです。

改造したGrowlのダウンロード

改造版の変更点

1.1.4での変更点

1.1.6での変更点

1.2.1での変更点

通知表示時等にスクリプトを実行できるようにした

"~/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

1.2.1に関するコメント

通知表示時にスクリプトを実行できるようにした理由はSafariのダウンロード完了時にAppleScriptを実行したいと思ったからです。とりあえず、目的のダウンロード完了でスリープとその他いろいろできるようにできました。他の通知をトリガーにしていろいろ何か面白いことができるかなと思いましたが、何も思いつきませんでした…。

二つ目の指定した通知を閉じるのは、どっかの掲示板でスティッキーにしていると通知で画面が埋まるので、最新の一個だけ表示できないか、みたいなことがあったのでやってみました。定期的にどんどん通知が来て、最新版だけ確認できればいい物をスティッキーにしている場合に便利かな。あと、関連する通知をオプションキーを押さなくてもまとめて閉じることができるようになったのは地味だけど便利になったと思いました。

改造版で使えるスタイルのダウンロード

作ってみたもの

ダッシュボードでいいじゃんっていうのは無しで…

スクリプトを実行すると画像のような通知が表示されます。Growlの通知スタイルはpureHTMLViewを使ってください。

pureHTMLViewを使った通知を表示する設定

一度pureHTMLView用の通知を表示するとGrowlの設定に"pureHTML App"が追加されるのでそれのスタイルをpureHTMLViewにします。設定すると次からの表示がhtmlを解釈するようになり画像などが表示され、クリック等できるようになったりもします。

Flickr Slideshow

  1. Growl-Flickr-Crossfade.scpt.zip(クロスフェード版)
  2. Growl-Flickr-Slideshow2.scpt.zip(切り替えがスムーズになったなど)

Flickrの特定タグの画像をスライドショーする。なかなか良くて作ってからちょくちょく実行させてます。

古いバージョンの動画

test

TV番組表 - Google ガジェット

Growl-TV-Program.scpt.zip

Google ガジェットも表示できました。

RPN電卓

Growl-RPN-Calc.scpt.zip

RPN電卓です。昔JavaScriptの練習で作った物ですが動きました。実用的かといえばスポットライトなどで計算できるので使わないかも。

Growl-2ch-Slideshow

  1. Growl-2ch-Slidwshow-v5.scpt.zip(勢いが表示されるようになって1行コメントの書き込みができるようになった)
  2. Growl-2ch-Slidwshow-v3.1.scpt.zip

Flickr Slideshowをベースに2chのレスをスクロール表示するもの。流してみるには2chResViewよりこっちのほうが好みかもしれない。1.1.6r3が必要。

なんかJavaScriptのhtml追加部分でメモリリークしてるみたいだが直し方が分からなかった。Flickr Slideshowもメモリリークしてると思われる。でもほんのちょっとずつ増えていくからたまにGrowlを再起動しておけば大丈夫そう。WebKitがバージョンアップしたら直るかも。メモリがある程度増えると増加が止まってるような気もするのである程度増えるとちゃんとWebKitがメモリ解放してくれてるのかもしれない。

test

使い方ガイド、注意点

Growl-honyaku

  1. Growl-honyaku-workflow.zip(niftyとlivedoorの二つ)

サービスから選択したテキストを翻訳してGrowlで通知するAutomator用workflow

Growl-lsof-i

  1. Growl-lsof-i.scpt.zip

lsof -iの結果を表示するスクリプト。ネットワークに繋がっているアプリケーションと接続先ホストがわかります。一定時間ごとに結果が更新されていきます。

1e100.netはGoogleらしいのでGoogleと表示します。

Growlの通知をiCalに追加、記録するAppleScript

  1. GrowlTunes_addToiCal1.1.scpt.zip
  2. GrowlTunes_addToiCal.scpt.zip

改造版Growl1.2.1のAppleScript実行機能で通知をiCalに追加、記録するスクリプト。

~/Library/Scripts/Applications/Growl/に置いてください。

ファイル名がGrowlTunes用になっていますが、他のアプリケーションの通知をiCalに記録する場合はスクリプトファイルの名前をそのアプリケーション名に変更してください。

GrowlTunesの通知をiCalに追加すると下記画像のようになります。

作成、利用時の注意点