From 2468178da2b050ebb507e165d4a3277e69fff290 Mon Sep 17 00:00:00 2001 From: teramako Date: Sat, 29 Oct 2011 13:14:17 +0900 Subject: add unload-tab plugin (like BarTab) --- unload-tab.js | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 unload-tab.js (limited to 'unload-tab.js') diff --git a/unload-tab.js b/unload-tab.js new file mode 100644 index 0000000..951c2b9 --- /dev/null +++ b/unload-tab.js @@ -0,0 +1,66 @@ +/* + * タブを削除せずに、セッションを残しつつコンテンツをアンロードさせるエコなコマンド + * unload[tab] num + */ + +var INFO = + + teramako + MPL 1.1/GPL 2.0/LGPL 2.1 + + + :unloadtab :unload + :unloadtab tabNumber + +

Unload the tab contents.

+
+
+
; + +if (!("SS" in this)) { + XPCOMUtils.defineLazyServiceGetter(this, "SS", "@mozilla.org/browser/sessionstore;1", "nsISessionStore"); +} + +function unloadTab (aTab) { + var state = SS.getTabState(aTab); + var tab = gBrowser.addTab(null, { skipAnimation: true }); + SS.setTabState(tab, state); + if (aTab.pinned) { + gBrowser.pinTab(tab); + } else { + let objState = JSON.parse(state); + if (objState.hidden) { + gBrowser.hideTab(tab); + TabView.moveTabTo(tab, JSON.parse(objState.extData["tabview-tab"]).groupID); + } + } + gBrowser.moveTabTo(tab, aTab._tPos + 1) + gBrowser.removeTab(aTab); +} + +commands.addUserCommand(["unload[tab]"], "Unload Tabs", + function action (args) { + var str = args[0]; + var m = str.match(/^(\d+):?/); + if (!m) + return; + + var tab = gBrowser.tabs[m[1]]; + if (tab && !tab.selected && !tab.linkedBrowser.__SS_restoreState) + unloadTab(tab); + }, { + literal: 0, + completer: function (context, args) { + context.anchored = false; + context.completions = [ + [tab._tPos + ": " + tab.label, tab.linkedBrowser.currentURI.spec] + for each(tab in Array.slice(gBrowser.tabs)) + if (!tab.selected && !tab.linkedBrowser.__SS_restoreState) + ]; + } + }, true); + + -- cgit v1.2.3