griffin-stewieの日記

2008-08-24

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

f:id:griffin-stewie:20080824161241p:image:w700


Route 477(2008-08-21)

こちらですてきなライブラリを知りました。*1


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


インストール

Meowライブラリ内でRubyCocoaを使ってGrowlを操作してるみたいなのでRubyCocoaが必要です。

ライブラリRubyCocoaを使うだけなのでMeowを使ったスクリプト自体はRubyCocoaである必要はないです。

僕が使っているMacBookRubyデフォルトのまま使ってますし、LeopardなのでRubyCocoaデフォルトインストール済みです。

なので単にMeow

gem install meow

するだけで終了。*2


使ってみた

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


no title*3

スタイルの設定は?

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

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

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

すると、


f:id:griffin-stewie:20080824160637p:image


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

上の例では夏ライオンアイコンファイルを指定しました。

pngjpgとかの画像ファイル大丈夫っぽいです。

しかし、画像パス

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

みたいに第三引数として渡してもいいみたいです。

第二引数は通知の名前です。


f:id:griffin-stewie:20080824160638p:image

*4

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

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

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

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

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

優先度の設定

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

: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過去バージョンではあったのかな?

2008-05-08

[][][]新しいSafari用SIMBLプラグイン

SafariGesturesをいっしょに開発しているcanberlandさんが開発した

近日公開予定のSafari用SIMBLプラグイン ”SafariDrag" の予告*1をしたいと思います。


概要

D



高画質版はこちら

zoome.jp

SafariDragの設定画面

D


高画質版はこちら

zoome.jp


詳細

画質が荒く、文字が小さいのであまり何をやってるのかわからないかもしれませんが

その方が見えそうで見えないみたいでわくわくしません?

リリースはこのブログで行います。

本当の詳細はその時に書きます。

もうしばらくお待ち下さい。

*1:Hetimaさんの真似をちょっとしてみたかった

2008-05-03

[][][]SafariのSIMBLプラグインのソース

ソースが公開されているSafari向けSIMBLプラグインをズラっと羅列してみたいと思います。

全てのソースを読んだわけではないのですが、部分的にSafariGesturesを作るときに参考にしたりもしました。


SafariWheelTab

ホイールジェスチャ機能を提供するプラグインです。

SafariGesturesを作るときのベースに使わせていただきました。

コメントが充実していて素人の僕には非常にありがたかったです。

すごくシンプルなのでどうなってるのかがわかりやすいです。

ForgetMeNot

WindowとTabのUndo機能を提供するプラグインです。

posingとmethod swizzlingを使ってhackしています。

SafariGesturesのVer0.0.4以前ではSafari(WebKit)のメソッドを呼ぶのに

そのメソッドをいちいちカテゴリで追加していました。

このソースを読んで、class-dumpした定義部分だけ丸ごとぶち込めばいいことを知りました。

Keywurl

アドレスバーを検索バーとして使うSIMBLプラグインです。

これはBrowserWindowControllerとNSPreferencesをポージングでhackしています。

個人的にはこのソースの設定ファイル(plist)の読み書き部分を参考にさせていただきました。

GreaseKit

FirefoxのGreaseMonkeyのSafari版とでもいうSIMBLプラグインです。

このプラグインSafari自体をhackする必要がないためかポージングもmethod swizzlingも使ってません。

WebKit Frameworkが使えるって幸せに思える今日この頃。

AlertとかAboutウィンドウの出し方とかを参考にさせていただきました。

YahooSearchPlugin

検索バーをデフォルトGoogleからYahooにするSIMBLプラグインです。

method swizzlingを調べているときにたまたま発見しました。

SafariBlock

広告ブロックするSIMBLプラグインです。

method swizzlingを使っているようです。

Middle Click Close For Safari

Safariのタブをミドルクリックで閉じることができるSIMBLプラグインです。

かなりシンプルなソースです。

method swizzlingを使っているようです。

soundscape outさん経由でしりました。

SafariRefManage

Safariでリファラをコントロールするための SIMBLプラグインです。

SafariWheelTabを参考にしたらしくポージングを使って実装されています。

公開されたばかりですがこれからに期待のプラグインです。

作者は

FLVからMP3を再エンコードなしに抽出するiExtractMP3

Yet another な Pragger、Yapra を作られているyuanyingさんです。

SafariTabs

タブのアンドゥ、起動時のタブの復元、新規ウィンドウのリンクをタブで開くようにするSIMBLプラグインです。

斜め読みした程度ですがソースに丁寧なコメントが書かれています。

コード量は結構多い感じですがこのコメントのお陰で理解しやすそうです。

個人的にはビルド用のシェルスクリプトなどの開発補助の部分に興味がわきました。

soundscape outさん経由でしりました。


まとめ

全体的にmethod swizzlingを使っているプラグインが多いようです。海外ではそっちが主流なのかな?

poseAsClassは今後使えなくなるようですし、method swizzlingを使う方がこれからはいいかもしれません。

他に特に日本人が作ったSafari向けSIMBLプラグインでソースが公開されているものがあったら教えて下さい。

2008-04-21

[][][][]SafariGestures Ver0.0.8 リリース

SafariGestures Ver0.0.8 をリリースします。

変更点

左ホイールジェスチャを追加

左ホイールジェスチャとは左クリック+ホイールで動作するホイールジェスチャです。

デフォルトではオフになっています。

なお、左→右ロッカージェスチャと同様、

クリックが押されている時に、マウスカーソルが動くとジェスチャはキャンセルされます。

これはドラッグ動作を殺さないためです。仕様とさせていただきます。

右ホイールジェスチャと左ホイールジェスチャに任意のコマンドを割り当て可能に

右ホイールジェスチャと左ホイールジェスチャに任意のコマンドを設定可能になりました。

右ホイールジェスチャ(右クリック+ホイール)はデフォルトでオンになっています。

また、右ホイールジェスチャにはデフォルトでタブの切り替えが割り当てられています。

この割り当ては過去バージョンと同じ動作をするようになっています。


重複しますが、左ホイールジェスチャはデフォルトではオフ。

コマンドは何も割り当てられていません。


ホイールジェスチャは一回のトリガー操作で複数回コマンドを実行できるの特徴があります。

また、ホイールを手前に回転させるもしくは逆に奥の方に回転させるものなので、

対になったコマンドにマッチするかと思っています。


個人的には

  • タブの切り替え
  • 文字の拡大縮小

など便利ではないでしょうか?

設定画面のレイアウト変更

新しい設定項目を並べるためにレイアウトを変更しました。

f:id:griffin-stewie:20080422125700p:image:w300


パネルが横長になりました。



あと、ホイールジェスチャの設定部分で

となっていますが、ホイール手前とか奥とか文言がいまいちな感じがしています。

どうでしょう?

何か他に良い文言のアイディアがある方がいらっしゃいましたら、コメントいただけるとうれしいです。

その他補足

右ホイールジェスチャにはデフォルトで以前のバージョンと同じ機能である

  • ウインドウ/前のタブを選択
  • ウインドウ/次のタブを選択

を割り当てる様にしていますが、英語環境で使われている方は動作しません。


これは日本語で使われている事を前提にメニュー項目を日本語で決め打ちしているためです。

英語環境の方は設定画面から設定し直して頂くとちゃんと動作しますので、

お手数ですが設定をし直してください。


これは通常のジェスチャのデフォルト設定でも同様です。


今後、英語ローカライズを行う予定ですので、その時には解消されると思います。

不具合修正

Safari3.1.1で修飾キーをトリガーとして使用できなかった不具合を修正

以前、Nightly Build版WebKit.appで修飾キーをトリガーとして使用できなかったという報告を頂いていたのですが、

この修正を行ったことでNightly Build版でも動作するようになりました。

WebKit r32284で確認しました。

ただ、今後のビルドではどうかはわかりません。

Nightly Build版は原則的にサポートはできませんのでご了承下さい。

      

検索バーとアドレスバーでCommand+EnterをするとトリガーがOnになったままになる不具合を修正

Safari3.1.1でCommandキーをトリガーとして使用可能にしている時、

検索バーとアドレスバーでCommand+EnterをするとトリガーがOnになったままになる不具合を修正しました。

      


ダウンロード

SafariGestures Ver0.0.8をダウンロード 


不具合、要望があればお気軽にコメント下さい。

2008-04-20

[][][][]Safari3.1.1での不具合

追記 このブログ内の最新版SafariGesturesのエントリはこちら、

[SafariGestures] - griffin-stewieの日記

もしくはこちらへどうぞ。

no title

追記:終わり



Safari3.1.1でSafariGesturesVer0.0.7を使うと以下のような不具合が見つかりました。

修飾キーをトリガーとして利用できない

以前から「Webkitでは効かない」という報告を受けていたのですが、

Safari3.1.1でそれが適応されたようです。

修飾キーの利用がOn、Commandキーに割り当てている時の不具合

再現方法

  1. Commandキーをトリガーとして利用できるようにする。
  2. Safariのアドレスバーもしくは検索バーに適当に入力する。
  3. 新規タブで開くために、Commandキー+Enterを押す。

この状態でホイールを回すとタブ切り替えになってしまいます。

またマウスカーソルを動かすだけで、ステータスバーにジェスチャ文字列が出力されます。

つまり、SafariGestures内部で「修飾キーが離された」という状態が検知されていないという状況です。

回避方法

もう一度、アドレスバーもしくは検索バーにフォーカスを当てると治まるかと思います。

Safari3.1.1の場合、そもそも「修飾キーをトリガーとして利用」ができない状態ですので

このオプションを無効にしていただいていれば、発生しません。


次期SafariGestures

上記2点の不具合の修正と左クリック+ホイールのジェスチャを実装しています。

今週中にはリリースできると思います。

ご迷惑おかけしますが、今しばらくお待ち下さい。

プロフィール

griffin-stewie

griffin-stewie

遂にプログラマの端くれに。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には一切関係ありません。