Есть плагин

Выделить код

Код:

/*
 * Russian hot keys bugfix.
 * Copyrigh (c) 2006 by Relan (relan@bk.ru)
 * This software is distributed under the GNU General Public License version 2.
 */

// codes translation table
var RhkbTable = new Array(0x46, 0x2C, 0x44, 0x55, 0x4C, 0x54, 0x3B, 0x50, 0x42, 0x51, 0x52, 0x4B, 0x56, 0x59, 0x4A, 0x47, 0x48, 0x43, 0x4E, 0x45, 0x41, 0x5B

var Rhkbf = {
        // А-Я: 0x0410-0x042F, а-я: 0x0430-0x44F
        // АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ => F,DULT;PBQRKVYJGHCNEA[WXIO]SM'.Z
        // абвгдежзийклмнопрстуфхцчшщъыьэюя => f,dult;pbqrkvyjghcnea[wxio]sm'.z

        keypress: function(evt) {
                if (!evt.altKey && !evt.ctrlKey)
                        return;
                if (evt.charCode < 0x0410 /* А */ || evt.charCode > 0x0442F /* я */)
                        return;
                var trevt = document.createEvent("KeyboardEvent");
                trevt.initKeyEvent(evt.type, evt.canBubble, evt.cancelable,
                        evt.view, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.metaKey,
                        evt.keyCode, RhkbTable[evt.charCode - 0x0410]);
                evt.preventDefault();
                evt.target.dispatchEvent(trevt);
        },

        load: function() {
                try {
                        window.removeEventListener("keypress", Rhkbf.keypress, true);
                } catch(ex) {
                }
                window.addEventListener("keypress", Rhkbf.keypress, true);
        }
}

window.addEventListener("load", function() { Rhkbf.load(); }, false);

Написан для ff и на нём работает (под linux исправляет hot key русской раскладки).
Для thunderbird он устанавливается, но не работает, в каком направлении капать. Просто сам в плагинах под gecko вообще не бум-бум. :)

Думаю, копать надо в направлении структуры окна tb. Возможно, в его панелях стоят собственные обработчики событий клавиатуры, прерывающие распространение события после обработки. Может быть, будет работать, если заменить

Выделить код

Код:

load: function() {
                try {
                        window.removeEventListener("keypress", Rhkbf.keypress, true);
                } catch(ex) {
                }
                window.addEventListener("keypress", Rhkbf.keypress, true);
        }

на

Выделить код

Код:

load: function() {
                try {
                        document.getElementById("mailContent").removeEventListener("keypress", Rhkbf.keypress, true);
                } catch(ex) {
                }
                document.getElementById("mailContent").window.addEventListener("keypress", Rhkbf.keypress, true);
        }

или

Выделить код

Код:

load: function() {
                try {
                        document.getElementById("mailContentWrapper").removeEventListener("keypress", Rhkbf.keypress, true);
                } catch(ex) {
                }
                document.getElementById("mailContentWrapper").window.addEventListener("keypress", Rhkbf.keypress, true);
        }

или

Выделить код

Код:

load: function() {
                try {
                        document.getElementById("folderPaneBox").removeEventListener("keypress", Rhkbf.keypress, true);
                        document.getElementById("messengerBox").removeEventListener("keypress", Rhkbf.keypress, true);
                        document.getElementById("messagepanebox").removeEventListener("keypress", Rhkbf.keypress, true);
                } catch(ex) {
                }
                document.getElementById("folderPaneBox").window.addEventListener("keypress", Rhkbf.keypress, true);
                document.getElementById("messengerBox").window.addEventListener("keypress", Rhkbf.keypress, true);
                document.getElementById("messagepanebox").window.addEventListener("keypress", Rhkbf.keypress, true);
        }

thx буду пробовать капать :).