愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

VimperatorでInstant Previewsとイチャイチャするためのpluginを作った、けど…

最近(3日前くらい?)、Google検索の結果画面でリンク先のページのプレビューが見えちゃうInstant Previewsというムフフな機能がリリースされた。けど、ブラウザとしてVimperatorを選択した僕達がInstant Previewの引き金となっている(であろう)clickイベントをGoogle検索の画面で発火させることはほぼ無いので、せっかくのオサレ機能が使えずに残念な感じなのである。

そんなわけで友人にそそのかされて、Google検索の結果画面でのみj, kでInstant Previewsを順番に辿っていけるプラグインを作ってみた。で、現在Previewしているページを新しいタブで開ける。分かる人向けに言えば、Instant Previewsに特化した部分的LDRizeみたいな感じ。


http://gist.github.com/672808


それらしい動きは一応するのだけど、色々よろしくない点がある。まず、Vimperatorのソースを読んで真面目に書いたプラグインとしては初めてなので、拙い拙い。いまいち作法というか適した書き方が分かっていない。

あと、autocmdをPageLoadで指定しているので、AutoPagerとかでページが継ぎ足されると内部で保存している現在位置のインデックスが初期化関数の実行で0に巻き戻ってしまう。これも相当イケてないのだが、他のイベントでautocmdするのもあまり上手くいかないようで、対応方法は模索中。
(2010/11/13追記:これについては解決した。PageLoadでなくLocationChangeで、その直後にDOMにアクセスしなければ大丈夫。)

あと、キー入力ごとにDOMをトラバースするのもあまりよろしくないと思う。ただ、AutoPagerとかへの対応がされた暁には、継ぎ足されたDOM要素についても辿っていける必要があるので、これは最終的に残すしかないのかもしれない。(AutoPagerの継ぎ足しイベントをうまいことキャッチできたらまた別かも)。jQueryのlive()みたいに頑張るのもなんかめんどくさい。

というか、jやらkをマップする、というアプローチ自体が微妙という可能性もあるよね。うーん、難しい…。


いかんせん所々がイケてないので、意見 or アドバイス求む!という感じである。