Input Language Assistant ( [firefox] 52.3.0)
Автор: difabor (на основе расширения Input Language Assistant (автор: RomCraft)
Версия: от 08.09.2017
Описание: автоматически переключает язык ввода на английский при вводе в строке адреса. При помещении фокуса ввода в строку адреса текущий язык ввода запоминается и затем автоматически переключается на английский. Затем, когда фокус ввода перемещается в какое-нибудь другое место, текущий язык ввода восстанавливается обратно. Во время ввода в строке адреса сохраняется возможность переключать язык на любой другой обычным образом.
В дополнение к этим штатным функциям расширения, введены следующее:
1. Пробел сначала сразу же возвращает исходную раскладку.
2. Два пробела подряд в любом месте тоже возвращают исходную раскладку.
Это сделано для того, чтобы обеспечить поиск в строке адреса на родном языке.
Кнопка работает только на Windows (в исходном расширении обеспечивается работа и на MacOs, но у меня нет MacOs и проверить я не могу.
После установки кнопки требуется перезапуск (Restart).
Использование: положите код  в инициализацию.

Выделить код

Код:

/*Initialization Code*/
//return(0);
if (!ru) var ru = {};
if (!ru.net) ru.net = {};
if (!ru.net.rvk) ru.net.rvk = {};
if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {};
ru.net.rvk.ilaff = {
cnt32: 1,
Windows:{
    init: function() {
        try {
            this.lib = ctypes.open("user32.dll");
            this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout",
                                                           ctypes.winapi_abi,
                                                           ctypes.voidptr_t,  // return HKL
                                                           ctypes.voidptr_t,  // HKL hkl
                                                           ctypes.uint32_t);  // UINT Flags
            this.KLF_SETFORPROCESS = 0x00000100;
            this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US)
            return true;
        }
        catch (err) {
            this.uninit();
            return false;
        }
    }, 
    uninit: function() { 
        try { if (this.lib) { this.lib.close();} }
        catch (err) {}
    },
    focus: function() {
        try {if (this.ActivateKeyboardLayout) 
               {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}}
        catch (err){} 
    },
    blur: function() {
        try {if (this.ActivateKeyboardLayout && this.hkl) 
             {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}}
        catch (err) {}
    }
}, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral

init: function (){try { 
        Components.utils.import("resource://gre/modules/ctypes.jsm");
        if (this.Windows.init()) {this.engine = this.Windows;}
        else if (this.MacOS.init()){this.engine = this.MacOS;}
        else {alert("Unsupported platform: " + navigator.platform);return;}

        var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt
        if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar);
                     addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar);
                     addEventListener('keydown', function(e){//var cnt32=1;
                     if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++;
                       if (ru.net.rvk.ilaff.cnt32>1) ru.net.rvk.ilaff.blur();}
                     if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)) ru.net.rvk.ilaff.cnt32=0;},false,urlbar);}
    }
    catch (err) {}
},
uninit: function () {
    try {if (this.engine){this.engine.uninit();}}
    catch (err) {}
},
focus: function () 
  {try {if (this.engine) { this.engine.focus();}}
   catch (err){} 
},
blur: function (){
    try {if (this.engine) { this.engine.blur();}}
    catch (err) {} 
}
} 

ru.net.rvk.ilaff.init();

Это не работает и не нужно:

Выделить код

Код:

window.addEventListener("load", function() { ru.net.rvk.ilaff.init(); }, false); 
window.addEventListener("unload", function() { ru.net.rvk.ilaff.uninit(); }, false);

проверь при старте брузера:

Выделить код

Код:

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

Обработчики в Сustom Buttons надо добавлять вот так:

Выделить код

Код:

addEventListener("focus", function() { ru.net.rvk.ilaff.focus(); }, false, urlbar);

элемент на который ставят обработчик надо указывать за false иначе обработчик в некоторых случаях будет дублироваться и не будет удалятся после удаления кнопки.

bunda1 пишет

Это не работает и не нужно:

Выделить код

Код:

window.addEventListener("load", function() { ru.net.rvk.ilaff.init(); }, false); 
window.addEventListener("unload", function() { ru.net.rvk.ilaff.uninit(); }, false);

проверь при старте брузера:

Выделить код

Код:

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

Обработчики в Сustom Buttons надо добавлять вот так:

Выделить код

Код:

addEventListener("focus", function() { ru.net.rvk.ilaff.focus(); }, false, urlbar);

элемент на который ставят обработчик надо указывать за false иначе обработчик в некоторых случаях будет дублироваться и не будет удалятся после удаления кнопки.

Спасибо большое!
Я исправил как Вы сказали и подредактировал алгоритм с пробелами. Я ещё дилетант и только учусь.
Я думаю, что лучше отредактировать свой первый пост, чем помещать новый с исправленной версией.

difabor
Вещь :rock:

Немного модифицировал код. Сейчас можно переходить из родной раскладки в английскую и наоборот сколько угодно раз: два delete подряд тоже переводят в английскую, запоминая предыдущую
Вот как выглядит поиск в адресной строке: Ey674Py.jpg, когда я в раскладке RU.
Здесь: ng - keyword для нигмы, затем два пробела (один можно стереть, а можно и не стирать), затем идёт русский текст "смотреть", затем пробел, дважды delete -> переходим в английскую раскладку и продолжаем латиницей, затем Alt-Enter и поиск будет в новой вкладке. Покидаем urlbar, фокусируемся кликом где угодно - остаёмся в русской раскладке (RU). На любителя, конечно, кому лень следить за раскладками - с какой зашли, в такую и вернулись, а в urlbarе можно и "попрыгать" :)

модифицированный код

Выделить код

Код:

/*Initialization Code*/
//return(0);
if (!ru) var ru = {};
if (!ru.net) ru.net = {};
if (!ru.net.rvk) ru.net.rvk = {};
if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {};
ru.net.rvk.ilaff = {
cnt32: 1, cnt46: 0,
Windows:{
    init: function() {
        try {
            this.lib = ctypes.open("user32.dll");
            this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout",
                                                           ctypes.winapi_abi,
                                                           ctypes.voidptr_t,  // return HKL
                                                           ctypes.voidptr_t,  // HKL hkl
                                                           ctypes.uint32_t);  // UINT Flags
            this.KLF_SETFORPROCESS = 0x00000100;
            this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US)
            return true;
        }
        catch (err) {
            this.uninit();
            return false;
        }
    }, 
    uninit: function() { 
        try { if (this.lib) { this.lib.close();} }
        catch (err) {}
    },
    focus: function() {
        try {if (this.ActivateKeyboardLayout) 
               {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}}
        catch (err){} 
    },
    blur: function() {
        try {if (this.ActivateKeyboardLayout && this.hkl) 
             {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}}
        catch (err) {}
    }
}, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral

init: function (){try { 
        Components.utils.import("resource://gre/modules/ctypes.jsm");
        if (this.Windows.init()) {this.engine = this.Windows;}
        else if (this.MacOS.init()){this.engine = this.MacOS;}
        else {alert("Unsupported platform: " + navigator.platform);return;}

        var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt
        if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar);
                     addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar);
                     addEventListener('keydown', function(e){//var cnt32=1;
                     if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++;
                       if (ru.net.rvk.ilaff.cnt32>1) ru.net.rvk.ilaff.blur()}
                     if (e.keyCode==46) {ru.net.rvk.ilaff.cnt46++;
                       if (ru.net.rvk.ilaff.cnt46>1) ru.net.rvk.ilaff.focus()}
                     if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)) {
                         ru.net.rvk.ilaff.cnt32=0;ru.net.rvk.ilaff.cnt46=0}},false,urlbar);}
    }
    catch (err) {}
},
uninit: function () {
    try {if (this.engine){this.engine.uninit();}}
    catch (err) {}
},
focus: function () 
  {try {if (this.engine) { this.engine.focus();}}
   catch (err){} 
},
blur: function (){
    try {if (this.engine) { this.engine.blur();}}
    catch (err) {} 
}
} 

ru.net.rvk.ilaff.init();

difabor
Здравствуйте, можно сделать так чтоб если писать на русском жмешь ЛКМ длинным кликом и раскладка EN, Я пользуюсь ноутбуком и нажать на тач проще и бистрее чем тянутся до  кл. делл. спасибо за внимание.
Кстати кнопка очень удобная, как меня бесила ситуация когда набирал текст а он в крякозябры:angry:

broker пишет

difabor
Здравствуйте, можно сделать так чтоб если писать на русском жмешь ЛКМ длинным кликом и раскладка EN, Я пользуюсь ноутбуком и нажать на тач проще и бистрее чем тянутся до  кл. делл. спасибо за внимание.
Кстати кнопка очень удобная, как меня бесила ситуация когда набирал текст а он в крякозябры:angry:

Я сделал то, что Вы просили - по длинному ЛКМ переводит в  EN, но независимо от того, в какой раскладке Вы были.
Кроме этого добавил ещё следующее:
Два пробела с Ctrl тоже переводит в EN (а два пробела без Ctrl  переводит как и раньше - в исходную.
Кроме того добавил ещё две операции:
а) Длинный ЛКМ с Shift - стандартное меню кнопки (то, что открывается по ПКМ на кнопку)
б) Длинный ЛКМ с Ctrl  - открывает редактор кнопки (то, что открывается по менюитему Edit button;
Эти две операции добавлены по следующей причине.
Сама кнопка не требует никаких кликов по ней и нет смысла, чтобы она занимала место на тулбаре.
Её вообще можно спрятать стилем, например, если у вас есть Classic Theme Restorer, то там в Custom css code напишите:

Выделить код

Код:

#CB_ID {visibility: collapse !important;} #CB_ID > menupopup {visibility: visible !important;}

где CB_ID - ИД кнопки (напр. custombuttons-button30)   
Тогда это будет выглядеть так:

Выделить код

Код:

#custombuttons-button30  {visibility: collapse !important;}#custombuttons-button30  > menupopup {visibility: visible !important;}

Тогда эту кнопку надо будет вызывать лишь в двух случаях: чтобы что-то отредактировать в ней или зачем-то вызвать её стандартное меню.
Именно для этого я и добавил эти две операции - а) и б).
Они требуются редко, поэтому длинный клик с модификатором ( Shift или Ctrl), хоть и не очень удобен, но это приемлемо
Код кнопки:

скрытый текст

Выделить код

Код:

/*Initialization Code*/
//return(0);
var btn = this;
var mdown = [Date.now(),0,0],B=Date.now(),tlong=800,dlow=10;
if (!ru) var ru = {};
if (!ru.net) ru.net = {};
if (!ru.net.rvk) ru.net.rvk = {};
if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {};
ru.net.rvk.ilaff = {
cnt32: 1, cnt46: 0,
Windows:{
    init: function() {
        try {
            this.lib = ctypes.open("user32.dll");
            this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout",
                                                           ctypes.winapi_abi,
                                                           ctypes.voidptr_t,  // return HKL
                                                           ctypes.voidptr_t,  // HKL hkl
                                                           ctypes.uint32_t);  // UINT Flags
            this.KLF_SETFORPROCESS = 0x00000100;
            this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US)
            return true;
        }
        catch (err) {
            this.uninit();
            return false;
        }
    }, 
    uninit: function() { 
        try { if (this.lib) { this.lib.close();} }
        catch (err) {}
    },
    focus: function() {
        try {if (this.ActivateKeyboardLayout) 
               {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}}
        catch (err){} 
    },
    blur: function() {
        try {if (this.ActivateKeyboardLayout && this.hkl) 
             {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}}
        catch (err) {}
    }
}, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral

init: function (){try {
        Components.utils.import("resource://gre/modules/ctypes.jsm");
        if (this.Windows.init()) {this.engine = this.Windows;}
        else if (this.MacOS.init()){this.engine = this.MacOS;}
        else {alert("Unsupported platform: " + navigator.platform);return;}

        var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt
        if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar);
                     addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar);
                     addEventListener('keydown', function(e){//var cnt32=1;
                     if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++;
                       if ((ru.net.rvk.ilaff.cnt32>1)&&!e.ctrlKey) ru.net.rvk.ilaff.blur();
                       if ((ru.net.rvk.ilaff.cnt32>1)&&e.ctrlKey)  ru.net.rvk.ilaff.focus();}
                     if (e.keyCode==46) {ru.net.rvk.ilaff.cnt46++;
                       if (ru.net.rvk.ilaff.cnt46>1) ru.net.rvk.ilaff.focus()}
                     if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)&&!e.ctrlKey) {
                         ru.net.rvk.ilaff.cnt32=0;ru.net.rvk.ilaff.cnt46=0}},false,urlbar);
                     addEventListener('mousedown',(e)=>{mdown=[Date.now(),e.clientX,e.clientY];},0,urlbar);
                     addEventListener('mouseup',(e)=> {var dx=e.clientX-mdown[1],dy=e.clientY-mdown[2];
                       var trem=dx*dx+dy*dy, TfromDown = Date.now()-mdown[0];
                       var LongClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey);
                       var CtrlClick = ((trem<dlow)&&(TfromDown>tlong)&&e.ctrlKey&&!e.shiftKey&&!e.altKey);
                       var ShiftClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&e.shiftKey&&!e.altKey);
                       if ((e.button==0)&&LongClick) ru.net.rvk.ilaff.focus();
                       if ((e.button==0)&&ShiftClick) gShowPopup(btn);
                       if ((e.button==0)&&CtrlClick) {custombuttons.editButton(btn)};},0,urlbar);
                    }
    }
    catch (err) {}
},
uninit: function () {
    try {if (this.engine){this.engine.uninit();}}
    catch (err) {}
},
focus: function () 
  {try {if (this.engine) { this.engine.focus();}}
   catch (err){} 
},
blur: function (){
    try {if (this.engine) { this.engine.blur();}}
    catch (err) {} 
}
} 

ru.net.rvk.ilaff.init();


broker,
я сейчас работаю ещё над одной кнопкой, которая должна исправлять крякозябры - но уже не в адресной строке (urlbar), а текстовых  полях и других местах, где можно писать.
Когда что-то получится, я её выложу, а в этой ветке дам на неё ссылку. Она Вам тоже может пригодиться.

difabor
Спасибо большое прям праздник какой то:music:.

я сейчас работаю ещё над одной кнопкой, которая должна исправлять крякозябры - но уже не в адресной строке (urlbar), а текстовых  полях и других местах, где можно писать.
Когда что-то получится, я её выложу, а в этой ветке дам на неё ссылку. Она Вам тоже может пригодиться.

Хорошо, будем тестить заодно форумчане подтянутся.
Должен признаться кнопка у меня не работает:( или конфликт с кнопкой открыть длинным кликом ссилку или я :dumb: чет не то делаю.

Два пробела с Ctrl тоже переводит в EN (а два пробела без Ctrl  переводит как и раньше - в исходную.

нет изменений

а) Длинный ЛКМ с Shift - стандартное меню кнопки (то, что открывается по ПКМ на кнопку)
б) Длинный ЛКМ с Ctrl  - открывает редактор кнопки (то, что открывается по менюитему Edit button;

также :cry:

broker,
попробуйте сделать рестарт.

Вы уверены, что обновили предыдущую версию, а не создали новую кнопку?

broker,
Вы взяли код из того моего поста №7?
Я начальную версию ещё не обновлял.
Нажмите на скрытый текст - там будет новый код для Вас.
Если всё будет ОК, я со временем либо обновлю версию в старттопике, либо добавлю туда ссылку на эту версию.

difabor

difabor пишет

попробуйте сделать рестарт.

Вы уверены, что обновили предыдущую версию, а не создали новую кнопку?

Я предыдущую удалил, создал новую, на новой кнопке ПКМ работает меню кустомбуттон а не должно.

difabor пишет

Вы взяли код из того моего поста №7?

Да я оттуда брал, не первый год на форуме:blush:.
Что било сделано с моей стороны.
Отключил все скрипты, убрал все кнопки кроме обсуждаемой и отключил ublock. Тест проводил здесь на форуме печатаю соющение нажимаю ЛКМ длинный клик и ничего не меняется, хотя кнопка работает например если курсор в урлбаре включает EN раскладку в текстовом поле снова RU.
Система виндовс 7 х86 Максимальная Антивируски нет.
Мозила 57.0 (32бит) разширения: Custom Buttons 0.0.5.8.9.5, Forecastfox (fix version)4.11 Hoxx VPN Proxy , Stylish Legacy2.0.8 ,uBlock Origin1.14 и Violentmonkey.
Где копать то подскажите?

broker пишет

difabor

difabor пишет

попробуйте сделать рестарт.

Вы уверены, что обновили предыдущую версию, а не создали новую кнопку?

Я предыдущую удалил, создал новую, на новой кнопке ПКМ работает меню кустомбуттон а не должно.

difabor пишет

Вы взяли код из того моего поста №7?

Да я оттуда брал, не первый год на форуме:blush:.
Что било сделано с моей стороны.
Отключил все скрипты, убрал все кнопки кроме обсуждаемой и отключил ublock. Тест проводил здесь на форуме печатаю соющение нажимаю ЛКМ длинный клик и ничего не меняется, хотя кнопка работает например если курсор в урлбаре включает EN раскладку в текстовом поле снова RU.
Система виндовс 7 х86 Максимальная Антивируски нет.
Мозила 57.0 (32бит) разширения: Custom Buttons 0.0.5.8.9.5, Forecastfox (fix version)4.11 Hoxx VPN Proxy , Stylish Legacy2.0.8 ,uBlock Origin1.14 и Violentmonkey.
Где копать то подскажите?

1. ПКМ по кнопке должно выдавать меню кустомбуттон, но кроме того - ещё и по Shift+ЛКМ на urlbarе.
2. Попробуйте сделать просто ЛКМ, затем длинный ЛКМ - может просто по длинному ЛКМ убегает курсор (вернее, он оказывается там, откуда Вы начинали. Проследите, чтобы он был в конце набранного текста!)
3. Попробуйте Ctrl+пробел,пробел. Или пробел+Ctrl+пробел.
Важно, чтобы последний пробел  был с Ctrl. Ctrl+пробел не делает пробел на urlbarе, поэтому если Вы сразу после этого сделаете ещё пробел без Ctrl, то опять будет русская раскладка.
Поэтому, если хотите, чтобы был пробел, сделайте пробел+Ctrl+пробел, а если без пробела - удерживая Ctrl, сделайте два пробела. Но после этого не делайте ещё один пробел без Ctrl!!!
4. Shift+ЛКМ для меню и Ctrl+ЛКМ для редактора кнопки надо делать на urlbarе, а не на кнопке!!!

difabor

difabor пишет

4. Shift+ЛКМ для меню и Ctrl+ЛКМ для редактора кнопки надо делать на urlbarе, а не на кнопке!!!

Здесь работает, хорошо но манипуляции

3. Попробуйте Ctrl+пробел,пробел. Или пробел+Ctrl+пробел.

Ctrl+пробел не работает.

Проследите, чтобы он был в конце набранного текста!)

Курсор никуда не убегает в конце текста на ЛКМ не реагирует.
А если сделать двойной клик будет работать? я немогу понять кнопка у меня не работает или з системой браузером связано.

broker, я Вам послал личное сообщение.

Добавил ещё одну возможность переводить в EN раскладку.
Ниже перечисляю все возможности по переводу в EN раскладу и назад, в исходную.
1. Переключает в EN, когда курсор фокусируется на urlbar
2. Переключается в исходную раскладку, если сделать два пробела подряд без Ctrl (если Вы хотите сразу начать с исходной раскладки - достаточно одного пробела)
3. Переключается в EN, если:
3.1 Нажать стрелку вправо
3.2 Если сделать два пробела с Ctrl
3.3 при длинном клике ЛКМ без модификаторов
Примечание к 3.2:
Пробел при нажатом Ctrl не делает самого пробела, указатель остаётся на том же месте. Например, если у вас была русская раскладка (напр. буква "я" , Вы сделали два пробела с Ctrl и нажали клавишу "q", у вас будет набрано "яq" без пробела
Поэтому, если хотите, чтобы был пробел, сделайте пробел+Ctrl+пробел, а если без пробела - удерживая Ctrl, сделайте два пробела. Но после этого не делайте ещё один пробел без Ctrl!!! Иначе - опять переведёте urlbar в исходную раскладку!
Примечание к 3.3:
Надо отличать положение курсора и положение указателя.
Когда вы набирали какой-то текст, указатель перемещался вместе с набором текста, а курсор - нет. Поэтому если просто сделать длинный клик ЛКМ - будет плохо.
Надо переместить курсор тоже вправо (не уходя из urlbarа) и лишь потом сделать длинный клик ЛКМ.
--------------------------------------
Я бы рекомендовал нажатие на стрелочку вправо для перевода в EN - это и проще, и нет нюансов, как в случае 3.2 и 3.3

4. Поскольку сама СВ кнопка не требует никаких кликов по ней то нет смысла, чтобы она занимала место на тулбаре.
Единственно, когда она может потребоваться - это что-то отредактировать в ней или зачем-то вызвать её стандартное меню.
Поэтому введены ещё две операции на urlbarе:
4.1 Длинный ЛКМ с Shift - стандартное меню кнопки (то, что открывается по ПКМ на кнопку)
4.2 Длинный ЛКМ с Ctrl  - открывает редактор кнопки (то, что открывается по менюитему Edit button;

Тогда саму СВ кнопку вообще можно спрятать стилем, например, если у вас есть Classic Theme Restorer, то там в Custom css code напишите:

#CB_ID {visibility: collapse !important;} #CB_ID > menupopup {visibility: visible !important;}

где CB_ID - ИД кнопки (напр. custombuttons-button30)   
Тогда это будет выглядеть так:
#custombuttons-button30  {visibility: collapse !important;}#custombuttons-button30  > menupopup {visibility: visible !important;}

В Инициализацию:

Выделить код

Код:

/*Initialization Code*/
//return(0);
var btn = this;
var mdown = [Date.now(),0,0],B=Date.now(),tlong=800,dlow=10;
if (!ru) var ru = {};
if (!ru.net) ru.net = {};
if (!ru.net.rvk) ru.net.rvk = {};
if (!ru.net.rvk.ilaff) ru.net.rvk.ilaff = {};
ru.net.rvk.ilaff = {
cnt32: 1, cnt46: 0,
Windows:{
    init: function() {
        try {
            this.lib = ctypes.open("user32.dll");
            this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout",
                                                           ctypes.winapi_abi,
                                                           ctypes.voidptr_t,  // return HKL
                                                           ctypes.voidptr_t,  // HKL hkl
                                                           ctypes.uint32_t);  // UINT Flags
            this.KLF_SETFORPROCESS = 0x00000100;
            this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US)
            return true;
        }
        catch (err) {
            this.uninit();
            return false;
        }
    }, 
    uninit: function() { 
        try { if (this.lib) { this.lib.close();} }
        catch (err) {}
    },
    focus: function() {
        try {if (this.ActivateKeyboardLayout) 
               {this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);}}
        catch (err){} 
    },
    blur: function() {
        try {if (this.ActivateKeyboardLayout && this.hkl) 
             {this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);}}
        catch (err) {}
    }
}, // Windows !!MacOS:{} -> removed, can be added from addon of own responcibility//ubral

init: function (){try {
        Components.utils.import("resource://gre/modules/ctypes.jsm");
        if (this.Windows.init()) {this.engine = this.Windows;}
        else if (this.MacOS.init()){this.engine = this.MacOS;}
        else {alert("Unsupported platform: " + navigator.platform);return;}

        var urlbar = document.getElementById('urlbar'); //Zdes wmesto etogo - mojo dolzhno byt
        if (urlbar) {addEventListener("focus", function() {ru.net.rvk.ilaff.cnt32=1; ru.net.rvk.ilaff.focus();},false,urlbar);
                     addEventListener("blur", function() { ru.net.rvk.ilaff.blur();},false,urlbar);
                     addEventListener('keydown', function(e){//var cnt32=1;
                     if (e.keyCode==32) {ru.net.rvk.ilaff.cnt32++;
                       if ((ru.net.rvk.ilaff.cnt32>1)&&!e.ctrlKey) ru.net.rvk.ilaff.blur();
                       if ((ru.net.rvk.ilaff.cnt32>1)&&e.ctrlKey)  ru.net.rvk.ilaff.focus();}
                     if (e.keyCode==46) {ru.net.rvk.ilaff.cnt46++;
                       if (ru.net.rvk.ilaff.cnt46>1) ru.net.rvk.ilaff.focus()}
                     if (e.keyCode==39) ru.net.rvk.ilaff.focus();
                     if ((e.keyCode!=32)&&(e.keyCode!=46)&&(e.keyCode!=8)&&!e.ctrlKey) {
                         ru.net.rvk.ilaff.cnt32=0;ru.net.rvk.ilaff.cnt46=0}},false,urlbar);
                     addEventListener('mousedown',(e)=>{mdown=[Date.now(),e.clientX,e.clientY];},0,urlbar);
                     addEventListener('mouseup',(e)=> {var dx=e.clientX-mdown[1],dy=e.clientY-mdown[2];
                       var trem=dx*dx+dy*dy, TfromDown = Date.now()-mdown[0];
                       var LongClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey);
                       var CtrlClick = ((trem<dlow)&&(TfromDown>tlong)&&e.ctrlKey&&!e.shiftKey&&!e.altKey);
                       var ShiftClick = ((trem<dlow)&&(TfromDown>tlong)&&!e.ctrlKey&&e.shiftKey&&!e.altKey);
                       if ((e.button==0)&&LongClick) ru.net.rvk.ilaff.focus();
                       if ((e.button==0)&&ShiftClick) gShowPopup(btn);
                       if ((e.button==0)&&CtrlClick) {custombuttons.editButton(btn)};},0,urlbar);
                    }
    }
    catch (err) {}
},
uninit: function () {
    try {if (this.engine){this.engine.uninit();}}
    catch (err) {}
},
focus: function () 
  {try {if (this.engine) { this.engine.focus();}}
   catch (err){} 
},
blur: function (){
    try {if (this.engine) { this.engine.blur();}}
    catch (err) {} 
}
} 

ru.net.rvk.ilaff.init();

difabor
Проверил вроде работает:) правда стрелочка вправо не работает но ет не актуально пробел меняет раскладку. Спасибо большое.

broker, я немного подправил код. Скопируйте ещё раз. Думаю, что стрелочка вправо заработает :)

difabor
Теперь работает:music: Спасибо большое.