Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@958
Created July 7, 2011 00:53
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 958/1068696 to your computer and use it in GitHub Desktop.
Save 958/1068696 to your computer and use it in GitHub Desktop.
[keysnail]サムネイル付きタブ一覧を表示する & XULMigemoる
// http://www.lifehacker.jp/2011/06/110622_listalltabsthumbs.html
// をしなくても、以下のようなキーバインドを割り当てればタブ一覧が表示される
key.setViewKey('A', function (ev, arg) {
allTabs.open();
}, 'タブを一覧表示', true);
// ついでに、上記で表示されるタブ一覧と、Ctrl+Shift+e で表示されるタブグループ一覧(?)で
// タブ検索を XULMigemoる
// これは %PRESERVE% エリアへ
(function(){
let tabviewdeck = document.getElementById("tab-view-deck"); // browser
if(tabviewdeck) {
let isInit = false;
tabviewdeck.addEventListener("DOMNodeInserted", function(){
let tabView = document.getElementById('tab-view');
if (tabView && !isInit) {
isInit = true;
tabView.addEventListener("DOMContentLoaded", function() {
let proto = tabView.contentWindow.TabMatcher.prototype;
tabView.contentWindow.TabMatcher = function(term) {
this.term = new RegExp(window.xulMigemoCore.getRegExps(term).join('|'), "ig");
};
tabView.contentWindow.TabMatcher.prototype = proto;
tabView.contentWindow.TabMatcher.prototype._filterAndSortForMatches = function(tabs) {
let TabUtils = tabView.contentWindow.TabUtils;
let self = this;
tabs = tabs.filter(function(tab){
let name = TabUtils.nameOf(tab);
let url = TabUtils.URLOf(tab);
return name.match(self.term, "i") || url.match(self.term, "i");
});
tabs.sort(function sorter(x, y){
let xterm = TabUtils.nameOf(x) + TabUtils.URLOf(x);
let yterm = TabUtils.nameOf(y) + TabUtils.URLOf(y);
let yScore = (yterm.match(self.term, "i") || "").toString().length;
let xScore = (xterm.match(self.term, "i") || "").toString().length;
return yScore - xScore;
});
return tabs;
};
}, false);
}
}, true);
}
if (window.allTabs) {
let self = window.allTabs;
window.allTabs.filter = function () {
if (self._currentFilter == self.filterField.value) return;
self._currentFilter = self.filterField.value;
let filter = new RegExp(window.xulMigemoCore.getRegExps(self._currentFilter).join('|'), "ig");
self._visible = 0;
Array.forEach(self.previews, function (preview) {
let tab = preview._tab;
var matches = 0;
if (!tab.hidden) {
let tabstring = tab.linkedBrowser.currentURI.spec;
try {
tabstring = decodeURI(tabstring);
} catch (e) {}
tabstring = tab.label + " " + tab.label.toLocaleLowerCase() + " " + tabstring;
if (filter.test(tabstring)) {
self._visible++;
self._updatePreview(preview);
preview.hidden = false;
} else
preview.hidden = true;
}
}, self);
self._reflow();
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment