RubyからGrowlに通知するためのライブラリ、Meowをちょっと使ってみたので自分メモ


Route 477 - RubyからGrowlに通知するためのライブラリ、Meow (とGrowlNotifier)
こちらですてきなライブラリを知りました。*1


基本的なことはリンク先を参照して貰った方がいいとは思いますが、一応書いておきます。

インストール

Meowはライブラリ内でRubyCocoaを使ってGrowlを操作してるみたいなのでRubyCocoaが必要です。
ライブラリがRubyCocoaを使うだけなのでMeowを使ったスクリプト自体はRubyCocoaである必要はないです。
僕が使っているMacBookRubyはデフォルトのまま使ってますし、LeopardなのでRubyCocoaもデフォルトでインストール済みです。
なので単にMeowを

gem install meow

するだけで終了。*2

使ってみた

以下のドキュメントを参照してみてください。


meow-2.1.0 Documentation*3

スタイルの設定は?

スクリプト内からの指定はできないっぽいです。

meep = Meow.new('Meow Test')
meep.notify('Click Me', 'Go to Google!') do
  system "open -a Safari http://www.google.com/"
end


上記の様なスクリプトを一回実行したあと、Growlの環境設定を開きます。
すると、



newするときに与えた文字列と同じものが登録されているのでそこから指定すればいいようです。


アイコンの設定

クラスメソッドの import_imageの引数に使いたい画像のパスを渡せば良いみたいです。

iconImage = Meow.import_image("/Applications/NatsuLion.app/Contents/Resources/NatsuLion_error.icns")
meep.notify('NatsuLion', 'I am crying' ,{:icon => iconImage,:sticky => true,:priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

上の例では夏ライオンのアイコンファイルを指定しました。
pngやjpgとかの画像ファイルも大丈夫っぽいです。
しかし、画像のパスが
"~/Library/hogehoge/images/google.png"
みたいなチルダの入ってるパスだとダメっぽいです。
"/Users/ユーザ名/Library/hogehoge/images/google.png"
みたいに直しておくと大丈夫っぽいです。


ちなみに、画像ファイルのパスをサクッと知るためにAmCopyPathCMXを便利に使わせて貰ってます。


アイコンの指定はnotifyを実行する時に指定してもいいですし、newするときに

iconImage = Meow.import_image("google.png")
meepNotice = Meow.new('Meow Testinggggg','Notice',iconImage)

みたいに第三引数として渡してもいいみたいです。
第二引数は通知の名前です。



*4

通知をクリックした時の処理

ブロック内に書けば良いっぽいです。

meep.notify('Click Me', 'Go to Google!') do
  system "open -a Safari http://www.google.com/"
end

上記例では通知をクリックすることでSafarihttp://www.google.com/ を開きます。

当たり前ですが、callbackを使うと通知をクリックされるまでスクリプトの実行プロセスが終わらないです。

優先度の設定

MeowでGrowlの優先度の指定をしようとしてドキュメント上のサンプルの用に

:priority => :very_high

と書いてもダメです。:very_highは最新の2.0では定義されてないっぽいです。*5
だから、定義されている

:priority => :very_low

としてもダメでした。
結局

:priority => -2

と数字でしていしてやるとうまく優先度を指定できました。
指定できる範囲は0を標準として-2〜2までの5段階です。

複数のオプションを追加する。

一つだけ追加する場合は以下でOKです。

meep.notify('Click Me', 'Go to Google!',:sticky => true) do
  system "open -a Safari http://www.google.com/"
end

さらに優先度の設定もしたいって時はこんな感じです。

meep.notify('Click Me', 'Go to Google!',{:sticky => true, :priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

スクショの撮影に使ったのは

GrowlのスタイルはGrowlHUDを使ってます。
優先度が文字で表示されてて個人的に気に入ってます。
今調べたら配布先が無くなってました。残念です。


スクリプトはこんな感じです。

#!/usr/bin/ruby
#
#  Created by  on 2008-08-23.
#  Copyright (c) 2008. All rights reserved.

require "rubygems"
require "meow"

meep = Meow.new('Meow Test')

meep.notify('Click Me', 'Test 1')
meep.notify('Click Me', 'Go to Google!',:sticky => true) do
  system "open -a Safari http://www.google.com/"
end

iconImage = Meow.import_image("/Applications/NatsuLion.app/Contents/Resources/NatsuLion_error.icns")
meep.notify('NatsuLion', 'I am crying' ,{:icon => iconImage,:sticky => true,:priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

iconImage = Meow.import_image("/hatena_logo.png")
meep.notify('Click Me', 'Do it!' ,{:icon => iconImage,:sticky => true,:priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

iconImage = Meow.import_image("/google.png")
meep.notify('Click Me', 'Go to Google!' ,{:icon => iconImage,:sticky => true,:priority => 1}) do
  system "open -a Safari http://www.google.com/"
end


iconImage = Meow.import_image("/tumblr_logo.png")
meep.notify('Tumblr', 'Low priority' ,{:icon => iconImage,:sticky => false,:priority => -2})

感想

RubyからGrowlを使う為にruby-growlを試したことがありますがこれはスティッキーの設定がうまく指定できなかった記憶があります。
なのでGrowlに同梱されてるgrowlnotifyを別途インストールして

`/usr/local/bin/growlnotify -n Stewie "POST GoogleBookmark" -m "てすと〜" --image google.jpg -p 2 -s`

なんてことをしていましたが、Leopard上で使う分にはMeowを使った方がOnClickの挙動も指定できるので自由度もあって使いやすいと思いました。

*1:このエントリ自体リンク先のパクリというのは内緒

*2:Could not find main page README.rdocってエラーがでましたが無視w

*3:このドキュメントも内容が違ってる(古い?)っぽい

*4:参考例 夏ライオン

*5:過去のバージョンではあったのかな?