vimperator plugin dev tips

昨日 ( http://d.hatena.ne.jp/janus_wel/20080618#1214594620 ) の涙ぐましい努力の結果わかったことをとりあえずまとめとく。基本的なプロパティ・メソッドやデバッグ時に有効なもの etc 。

liberator.buffer.URL

カレントタブの URL が入ってる。なんでかわからないけど ( vimperator が Firefox のラッパーみたいなのだからじゃないかな、たぶん ) window.document.location を参照しても 'chrome://browser/content/browser.xul' とかわけのわからないことをのたまうのでこれ必須。

liberator.buffer は他にもいろんなことがわかるのでてけとーに覗いてみると視野も広がる感じ。

liberator.echo(str, flags)

コマンドラインの部分に str を表示。 flags は以下の定数 (?) を確認。

  • liberator.commandline.FORCE_MULTILINE
  • liberator.commandline.FORCE_SINGLELINE
  • liberator.commandline.DISALLOW_MULTILINE
  • liberator.commandline.APPEND_TO_MESSAGES

何か処理が成功したらこれで「成功したよ !!」って表示するといいかも。はいコマンドラインにうちこんでー。

:js liberator.echo('成功したよ !!');

ちなみにコマンドラインだと ':echo' が同値だけど plugin 書くときは上の書き方じゃないとダメっていうかまぁ ' :echo ' は javascript がわかるコマンドじゃないしね。

liberator.echoerr(str, flags)

コマンドラインの部分に str を赤地に白文字で表示。 flags は liberator.echo() と変わらない。失敗したらこれで「失敗したよ !!」って表示するといいよ。はいどうぞ。

:js liberator.echoerr('失敗したよ !!');

liberator.util.copyToClipboard(str, verbose)

str をクリップボードにコピーする。 verbose は真偽値で true にすると str の頭に "Yanked " をくっつけた文字列をコマンドラインに表示する。意外にデバッグとかにも使えちゃう。

:js liberator.util.copyToClipboard('ゆっくりしていってね !!', true);

liberator.log(msg, level)

エラーコンソール ( ) に msg を投げる。 :set verbose でセットした値より level が小さくないと送られない。 msg は string 以外に object も受け付けてくれる。どうやらシリアライズして投げてくれるらしい。 msg の最初に "vimperator: " が強制付加されるので一応ほかのメッセージと見分けはつく。ありえないようなことが起こったときとかデバッグするときにはこれ。

:js liberator.log('ゆっくりした結果がこれだよ !!');

liberator.commands.addUserCommand(names, description, action, extra, replace)

ユーザ定義のコマンドを追加する。 names がコマンド名、 description が説明。 names はリストで "['yukkuri', 'yu']" みたいに複数指定可能。 action は後回しで extra は おしたときの動作とか… ? まだよくわかってない。 replace は同名のコマンドが定義済みのとき書き換えるかどうかの真偽値。 true で書き換え。

action には呼ばれた時の挙動を記述した関数をおいとくみたい。コマンドが ":usercommand foo" みたいに呼ばれた場合、関数内では 'foo' が第一引数に入る。 "function(arg){ /* processing */ }" とか定義すると arg に入るってことね。

:js <<EOF
liberator.commands.addUserCommand(['yukkuri'], 'ゆっくりしていってね !!',
  function(arg){ liberator.echo('ゆっくりしていってね !!'); }
);
EOF