feedSomeKeys.js と gmperator.js と autocommand との連携
gmperator.jsがGreasemonkeyのアップデートに対応してませんでした。修正するんでしばらくお待ちを修正しました
- retlet.net - Vimperatorと、ウェブアプリやUserscriptのショートカットキーを共存させるfeedSomeKeys.jsプラグイン
- Vimperator/plugin/feedSomeKeys.js - EthnaWiki
まずは、すばらしい紹介記事を書いてくれたid:retletに感謝。
feedSomekeys.jsにちょっと注目が集まったので書いておこうかな。
実はこの二つプラグインはautocommand経由で連携が可能なのだ。
gmperator.jsを入れるとgreasemonkeyのユーザスクリプト実行時にautocommandへGMInjectedScript
という名のイベントが投げられるようになる。
これにより、特定のURLで特定のユーザスクリプトが実行されていたら、feedSomeKeys.jsのfmapコマンド発行などができる。
autocommandの登録には以下3つの要素が必要で、
- イベント名
- フィルタ(URLの正規表現)
- 実行コマンド
フィルタは通常は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コンソールにデバッグログがジャンジャカ出ます。ご注意を。