Tomomodel

Your awesome Tagline

1 note

気軽に編集してください。 "Tips (Japanese) - keysnail - GitHub" - http://j.mp/8jXCgu

malblue:

Tips (Japanese) - keysnail - GitHub

ん。Firegestures からのパクリだけど tab 毎の history (session history) を prompt.selector で。

ext.add("list-tab-history", function () {
    const fav = "chrome://mozapps/skin/places/defaultFavicon.png";
    var tabHistory = [];
    var sessionHistory = gBrowser.webNavigation.sessionHistory;
    if (sessionHistory.count < 1)
        return void display.echoStatusBar("Tab history not exist", 2000);
    var curIdx = sessionHistory.index;
    for (var i = 0; i < sessionHistory.count; i++) {
        var entry = sessionHistory.getEntryAtIndex(i, false);
        if (!entry)
            continue;
        try {
            var iconURL = Cc["@mozilla.org/browser/favicon-service;1"]
                .getService(Ci.nsIFaviconService)
                .getFaviconForPage(entry.URI).spec;
        } catch (ex) {}
        tabHistory.push([iconURL || fav, entry.title, entry.URI.spec, i]);
    }
    for (var thIdx = 0; thIdx < tabHistory.length; thIdx++) {
        if (tabHistory[thIdx][3] == curIdx) break;
    }

    prompt.selector(
        {
            message     : "select history in tab",
            collection  : tabHistory,
            flags       : [ICON | IGNORE, 0, 0, IGNORE | HIDDEN],
            header      : ["Title", "URL"],
            initialIndex : thIdx;
            callback    : function(i) { if (i >= 0) gBrowser.webNavigation.gotoIndex(tabHistory[i][3]); }
        }); 
},  'List tab history');
上を %PRESERVE% 内 に、下を Key Binding エリアに
key.setViewKey(['u', 'h'], function (aEvent, arg) {
    ext.exec("list-tab-history", arg);
}, 'list tab history', true);
ところで、prompt.selector 開かれるときに選択行をインデックス指定するのって KeySnail 本体 Hack しないと無理?
上だと現在のWebページじゃなくて最上行=session history の最初が選択されるのがちと使いにくい。
どうもそれらしき公開 API が見当たらないんだが…


追記1: 速やかにお返事いただいた
prompt.selector 内で initialIndex 使えばいいとのことなので上を書き換えておく。
追記2: 参照コード のまま tabHistory.length - 1 だと history 移動したあとがまずいので curIdx, thIdx 変数周り追加…わざわざ構築した tabHistory のインデックス探すのにループするの嫌なんだが、こうしないと動かなかった。後で試行錯誤。