vimperator + SplitBrowser で :sp[lit] コマンド

vimperator 0.5.3用に書き直しました
以下のFirefox Addonのコラボレーション。

vimと言ったらspコマンドでしょ!?
タブも良いけど画面分割も行いたい!
ってことで一部作ってみた。
%HOME%/_vimperatorrcに以下を追加*1

:javascript <<EOF
vimperator.commands.add(new vimperator.Command(['sp[lit]'],
  function(urls){
    var b = SplitBrowser.activeBrowser;
    if (b.localName != 'tabbrowser') b = gBrowser;
    if (!urls) {
      vimperator.echo('Split and load current URL.');
      SplitBrowser.addSubBrowserFromTab(b.selectedTab, SplitBrowser.POSITION_TOP);
    } else {
      if ( typeof urls == 'string' ){ 
        urls = urls.toURLArray();
      }     
      var url = typeof urls[0] == 'string' ? urls[0] : urls[0][0];
      vimperator.echo('Split and load '+ url); 
      SplitBrowser.addSubBrowser(url, null, SplitBrowser.POSITION_TOP);
    }   
  },{
    usage: ['sp[lit]'],
    shortHelp: 'split browser',
    help: 'sp[lit] [URL]',
    completer:function(filter){ return vimperator.completion.get_url_completions(filter); }
  } 
));
EOF

:splitを作ったなら:vsplitも、と思ったが使用頻度が少ないと見て止めた。作るべきは以下のようなものだろう

  • Ctrl + w+[hjkl] | Ctrl + wによるフォーカス移動
  • :onlyで分割ブラウザを閉じる動作

しかし、分かっていない事が多い。

  • 2段階によるキーボード操作はmapで対応できるのか?
    • 出来ない場合、どのようにキー操作を登録するのか
  • ブラウザ分割した時、フォーカスする要素は何か

両者の拡張機能を解析していけば分かると思うけど、道のりはちょっと長そうだ。でも、分割したは良いものの、その後の操作にマウスが必要じゃぁvimperatorの意味が無いからね。がんばりたいところ。

なんつーか、中途半端なもので申し訳ないが、フィードバック等あればヨロシク!