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