feedSomeKeys.js と gmperator.js と autocommand との連携

gmperator.jsがGreasemonkeyのアップデートに対応してませんでした。修正するんでしばらくお待ちを修正しました

まずは、すばらしい紹介記事を書いてくれたid:retletに感謝。

feedSomekeys.jsにちょっと注目が集まったので書いておこうかな。
実はこの二つプラグインautocommand経由で連携が可能なのだ。
gmperator.jsを入れるとgreasemonkeyのユーザスクリプト実行時にautocommandGMInjectedScriptという名のイベントが投げられるようになる。

これにより、特定のURLで特定のユーザスクリプトが実行されていたら、feedSomeKeys.jsのfmapコマンド発行などができる。

autocommandの登録には以下3つの要素が必要で、

  1. イベント名
  2. フィルタ(URLの正規表現)
  3. 実行コマンド

フィルタは通常はURLがURLの正規表現にマッチするかどうかっていう条件となるわけだが、GMInjectedScriptの場合、URL\nScript Filenameにマッチするかどうかを入れる様になっている。

autocmd .*\nldrize\.user\.js :fmap J j

とすれば、LDRizeが実行される任意のURLでfmapコマンドが実行される。また

javascript <<EOM
liberator.plugins.gmperator.addAutoCommand('', 'ldrize', ':js plugins.feedKey.setup(["j","k","o"])');
EOM

liberator.plugins.gmperator.addAutoCommandメソッドの第一引数にURL,第二に.user.jsを抜かしたfilename、第三にcommandを入れて登録も可能。

ユーザスクリプト側でキーバインドがあり、常にそのスクリプトが実行されるわけじゃないものなんかに有効ですので、gmperator.jsもよろしくお願いします。

ここまで書いて思い出した。この機能に関してはGrasemonkey用プラグイン(gmperator.js)が開発者に優しくなりました - hogehoge @teramakoで既に書いてたっけ。

追記(2008-06-27)

さらにアップデートしてタブを切り替えた時とページが切り替わった時にGMActiveScriptという名でautocommandを発動するようにしました。GMInjectedScriptはページを開いたときにしか発動せず、いまいちfeedSomeKeyとの組み合わせの有用性が高くなかったため追加しました。

例1
autocmd LocationChange .* :fmapc
js <<EOF
liberator.autocommands.add('GMActiveScript', "\nldrize\\.user\\.js$",
  'js liberator.plugins.feedKey.setup([["J","j"],["K","k"],"p","l","v","o","i","s"]);');
EOF

任意のURLでLDRizeが発動しているページでfeedSomeKeyでmapを定義します。

例2
autocmd LocationChange .* :fmapc
js <<EOF
liberator.autocommands.add('GMActiveScript', "\nldrize\\.user\\.js$",
  'js if(plugins.gmperator.currentSandbox.LDRize.getSiteinfo()) liberator.plugins.feedKey.setup([["J","j"],["K","k"],"p","l","v","o","i","s"]);');
EOF

任意のLDRizeが発動しているページで、かつ、SITEINFOがあるならば、feedSomeKeyでmap定義します。

また、set verbose=8と8以上の数値にしておくとJavaScriptコンソールにデバッグログがジャンジャカ出ます。ご注意を。