gmperator (= vimperator + greasemonkey) plugin

最新版はhttp://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/にあります。

またまたvimperatorのプラグイン。今度はGreasemonkey絡み。

先日(Greasemonkeyのソースがかなりアレな件)により、外部からユーザスクリプトを挿入する手段が分かったのでプラグイン化。というか、これが目的でGreasemonkeyを調べていた。

ユーザスクリプトのリスト表示(:gmli[st]コマンド)

:gmli[st]コマンドにより登録されているユーザスクリプトの一覧を表示できます

gmlist
簡易的な表示。スクリプト (ファイル名)を一行ずつ表示します
gmlist expr
スクリプト名またはファイル名がexpr(正規表現)にマッチするものの詳細を表示します
gmlist! or gmlist full
全てのユーザスクリプトの詳細を表示します

スクリプトのロード(:gmlo[ad]コマンド)

:gmlo[ad]コマンドでスクリプトをロードできます。引数にスクリプト名またはファイル名を指定してください。

ただし、ロードはしてもloadイベントなどは発行しません。場合によっては即時実行するように事前にスクリプトを編集する必要があるでしょう。

設定変更(:gmsetコマンド)

:gmsetコマンドによりgreasemonkeyの設定を変更できます。

gmset!
greasemonkeyの有効/無効をトグルします
gmset! filename
指定したファイル名のスクリプトの有効/無効をトグルします
gmset filename options
スクリプト名や実行する/しないページの設定を変更できます
options
n[ame]=scriptName
スクリプト名をscriptNameへ変更します
i[nclude]=expr[,expr,..]
実行するページの変更をします。リストは,区切りで指定できます
e[xclude]=expr[,expr,..]
実行しないページの変更をします。リストは,区切りで指定できます

:gmset! hogehoge.user.js n=HOGEHOGE i=http://*,https://* e=http://example.com/*

の4つを同時に設定します。

余談

このプラグインの作成の目的として、現状のGreasemonkeyではページのリロードを行わないと設定が反映されないという不満があり、途中からでもスクリプトの実行をさせたいというのがありました。が、多くのユーザスクリプトloadイベントをトリガーに実行されているように思います。スクリプトのロード時に

var loadEvent = document.createEvent('Events');
loadEvent.initEvent('load',true,true,window.content.document,1);
window.content.document.dispatchEvent(loadEvent);

等としてあげれば、擬似的にloadイベントを発行できますが、他のスクリプトにも波及してしまうため断念することとなりました。
この辺り、どうにかならないかなと思ったり。