Hatena::Groupkeysnail

きすねた(ん)

2011-04-23

プロンプトへフォーカス / コンテンツへフォーカスを一つのキーバインドで

| 18:22 | プロンプトへフォーカス / コンテンツへフォーカスを一つのキーバインドで - きすねた(ん) を含むブックマーク はてなブックマーク - プロンプトへフォーカス / コンテンツへフォーカスを一つのキーバインドで - きすねた(ん)

key.setGlobalKey(['C-c', 'p'], function (ev, arg) {
    var kpt = document.getElementById("keysnail-prompt-textbox");

    if (ev.target === kpt) {
        kpt.blur();
        gBrowser.focus();
        content.focus();
    } else {
        !document.getElementById("keysnail-prompt").hidden && kpt.focus();
    }
}, 'Toggle focus prompt');

プロンプトへフォーカスしている時に document.commandDispatcher.focusedElementev.originalTarget で得られるノードXULtextbox#keysnail-prompt-textbox でなく,その実装に用いられている HTMLinput 要素になってしまう.そのため,わざわざ ev.target としている.

Node.compareDocumentPositionが素晴らしい - hogehoge @teramako を使って inputtextbox に含まれているかを判断しても良かったのだが,面倒であるし,匿名要素に対してもうまく動くのか不明だったため止めた.