ツリー型タブをKeySnailから操作する
ツリー型タブでツリー表示されたタブを,KeySnailから操作するためのスクリプトを(半年ほど?前に)書きました。「暇な時にタブ移動のコマンドとか追加してKeySnailプラグインにしよう!」と思い立ってからかなり時間がたってしまいましたが,未だにプラグイン化は達成できていないので,とりあえず現状を公開してみます。
(2010/09/09) プラグイン化しました! → d:id:gifnksm:20100909:1284012463
以下のソースコードを.keysnail.jsのPRESERVEエリアに貼り付ければOKです。
ext.add('read-this-tab-later', function(ev, arg) { var n = gBrowser.mCurrentTab._tPos; gBrowser.moveTabTo(gBrowser.mCurrentTab, gBrowser.mTabContainer.childNodes.length - 1); gBrowser.selectedTab = gBrowser.mTabs[n]; }, 'このタブを後回しにする'); ext.add('tst-read-this-tab-later', function(ev, arg) { var current = gBrowser.mCurrentTab, n = current._tPos, p = TreeStyleTabService.getParentTab(current); if (p === null) { ext.exec('read-this-tab-later', arg); return; } var lc = TreeStyleTabService.getLastChildTab(p); gBrowser.moveTabTo(current, lc._tPos); gBrowser.selectedTab = gBrowser.mTabs[n]; }, 'このタブを後回しにする'); ext.add('select-first-tab', function(ev, arg) { gBrowser.mTabContainer.selectedIndex = 0; }, '最初のタブを選択する'); ext.add('select-last-tab', function(ev, arg) { gBrowser.mTabContainer.selectedIndex = gBrowser.mTabs.length - 1; }, '最後のタブを選択する'); ext.add('tst-select-first-sibling-tab', function(ev, arg) { var c = gBrowser.selectedTab, p = TreeStyleTabService.getParentTab(c); if (p === null) { ext.exec('select-first-tab', arg); return; } gBrowser.selectedTab = TreeStyleTabService.getFirstChildTab(p); }, '最初の兄弟タブを選択する'); ext.add('tst-select-last-sibling-tab', function(ev, arg) { var c = gBrowser.selectedTab, p = TreeStyleTabService.getParentTab(c); if (p === null) { var roots = TreeStyleTabService.rootTabs; gBrowser.selectedTab = roots[roots.length - 1]; return; } gBrowser.selectedTab = TreeStyleTabService.getLastChildTab(p); }, '最後の兄弟タブを選択する'); ext.add('tst-select-next-sibling-tab', function(ev, arg) { var c = gBrowser.selectedTab, n = TreeStyleTabService.getNextSiblingTab(c); if (n === null) { ext.exec('tst-select-first-sibling-tab', arg); return; } gBrowser.selectedTab = n; }, '次の兄弟タブを選択する'); ext.add('tst-select-previous-sibling-tab', function(ev, arg) { var c = gBrowser.selectedTab, n = TreeStyleTabService.getPreviousSiblingTab(c); if (n === null) { ext.exec('tst-select-last-sibling-tab', arg); return; } gBrowser.selectedTab = n; }, '前の兄弟タブを選択する'); ext.add('tst-select-first-child-tab', function(ev, arg) { var c = TreeStyleTabService.getFirstChildTab(gBrowser.selectedTab); if (c !== null) gBrowser.selectedTab = c; }, '最初の子タブを選択する'); ext.add('tst-select-last-child-tab', function(ev, arg) { var c = TreeStyleTabService.getLastChildTab(gBrowser.selectedTab); if (c !== null) gBrowser.selectedTab = c; }, '最後の子タブを選択する'); ext.add('tst-toggle-collapse-expand-tree', function (ev, arg) { const tst = gBrowser.treeStyleTab, TSTS = TreeStyleTabService; var target = gBrowser.selectedTab; if (!TSTS.hasChildTabs(target)) { target = TSTS.getParentTab(target); if (target === null) return; } if (TSTS.isSubtreeCollapsed(target)) { tst.collapseExpandSubtree(target, false); } else { tst.collapseExpandSubtree(target, true); } }, 'タブの折りたたみをトグル'); ext.add('tst-toggle-autohide-tabbar', function (ev, arg) { const ah = gBrowser.treeStyleTab.autoHide; if (ah.state == "shrunken") ah.show(); else ah.hide(); }, 'タブバーを表示', true);
「タブを後回しにする」はSo long and thanks for all the fish.からパクってます。キーバインドは,以下のように指定しています。
key.setViewKey(['t', 't'], function (ev, arg) { ext.exec("tst-toggle-autohide-tabbar", arg, ev); }, 'タブバーを表示', true); key.setViewKey(['t', '^'], function (ev, arg) { ext.exec("tst-select-first-child-tab", arg, ev); }, '最初の子タブを選択する', true); key.setViewKey(['t', '$'], function (ev, arg) { ext.exec("tst-select-last-child-tab", arg, ev); }, '最後の子タブを選択する', true); key.setViewKey(['t', 'p'], function (ev, arg) { ext.exec("tst-read-this-tab-later", arg, ev); }, 'このタブを後回しにする', true); key.setViewKey(['t', 'SPC'], function (ev, arg) { ext.exec("tst-toggle-collapse-expand-tree", arg, ev); }, 'タブの折りたたみをトグル', true); key.setViewKey('^', function (ev, arg) { ext.exec("tst-select-first-sibling-tab", arg, ev); }, '最初の兄弟タブを選択する', true); key.setViewKey('$', function (ev, arg) { ext.exec("tst-select-last-sibling-tab", arg, ev); }, '最後の兄弟タブを選択する', true); key.setViewKey('L', function (ev, arg) { ext.exec("tst-select-next-sibling-tab", arg, ev); }, '次の兄弟タブを選択する', true); key.setViewKey('H', function (ev, arg) { ext.exec("tst-select-previous-sibling-tab", arg, ev); }, '前の兄弟タブを選択する', true);