vimperator + SplitBrowser のフォーカス移動

vimperator 0.5.3用に書き直しました
前回の続き。
Ctrl + w+Ctrl + wによるフォーカス移動が出来る様になったぉ。

" Add Mapping
:javascript <<EOF
vimperator.mappings.add(new vimperator.Map(vimperator.modes.NORMAL,
  ['<C-w><C-w>'],
  function(){
    var browsers = SplitBrowser.browsers;
    if (SplitBrowser.activeBrowser === gBrowser) {
      SplitBrowser.getSubBrowserById(browsers[0].id).browser.contentWindow.focus();
    } else {
      var id = SplitBrowser.activeSubBrowser.id;
      for (var i=0; i<browsers.length; i++){ 
        if (browsers[i].id == id) {
          if (browsers[i+1]){
            SplitBrowser.getSubBrowserById(browsers[i+1].id).browser.contentWindow.focus();
            return true;
          } else {  
            gBrowser.contentWindow.focus();
            return true;
          }         
        }       
      }     
    }   
  },
  { 
    shortHelp: 'Switch focus',
    help: 'Switch focus to splitted browser'
  } 
));
EOF

ネストしまくってる...orz
一応順番にフォーカス移動して最後に本来のtabbrowserへ戻る様になっている。

ついでに、sp[lit]コマンドもPiro氏の言を受けて、分割して読み込んだ側にフォーカスするように修正。

" Add Command
:javascript <<EOF
vimperator.commands.add(new vimperator.Command(['sp[lit]'],
  function(urls){
    var b = SplitBrowser.activeBrowser;
    if (b.localName != 'tabbrowser') b = gBrowser;
    var subBrowser;
    if (!urls) {
      vimperator.echo('Split and load current URL.');
      subBrowser = 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);
      subBrowser = SplitBrowser.addSubBrowser(url, null, SplitBrowser.POSITION_TOP);
    }
    subBrowser.addEventListener('load',function(){
      subBrowser.removeEventListener('load',arguments.callee,true);
      subBrowser.browser.contentWindow.focus();
    },true);
  },{
    usage: ['sp[lit]'],
    shortHelp: 'split browser',
    help: 'sp[lit] [URL]',
    completer:function(filter){ return vimperator.completion.get_url_completions(filter); }
  }
));
EOF