Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№108-09-2017 12:30:48

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

[CB] Input Language Assistant

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();

Отредактировано difabor (08-09-2017 18:52:24)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№208-09-2017 17:33:26

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Palemoon 27.0

Re: [CB] Input Language Assistant

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

Выделить код

Код:

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 иначе обработчик в некоторых случаях будет дублироваться и не будет удалятся после удаления кнопки.

Отсутствует

 

№308-09-2017 18:09:27

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

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 иначе обработчик в некоторых случаях будет дублироваться и не будет удалятся после удаления кнопки.

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


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№414-09-2017 19:03:55

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB] Input Language Assistant

difabor
Вещь :rock:

Отсутствует

 

№515-09-2017 23:29:23

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

Немного модифицировал код. Сейчас можно переходить из родной раскладки в английскую и наоборот сколько угодно раз: два 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 (16-09-2017 19:16:28)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№608-12-2017 17:29:05

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB] Input Language Assistant

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

Отредактировано broker (08-12-2017 17:35:04)

Отсутствует

 

№711-12-2017 03:15:16

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

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), а текстовых  полях и других местах, где можно писать.
Когда что-то получится, я её выложу, а в этой ветке дам на неё ссылку. Она Вам тоже может пригодиться.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№811-12-2017 18:09:48

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB] Input Language Assistant

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

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

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

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

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

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

также :cry:

Отредактировано broker (11-12-2017 20:20:13)

Отсутствует

 

№912-12-2017 03:34:27

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

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

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

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

Отредактировано difabor (12-12-2017 03:56:44)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1012-12-2017 16:47:39

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB] Input Language Assistant

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.
Где копать то подскажите?

Отсутствует

 

№1112-12-2017 18:09:29

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

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 (12-12-2017 18:45:08)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1212-12-2017 23:53:20

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB] Input Language Assistant

difabor

difabor пишет

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

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

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

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

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

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

Отсутствует

 

№1313-12-2017 03:12:20

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

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


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1414-12-2017 22:36:20

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

Добавил ещё одну возможность переводить в 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 (15-12-2017 02:58:27)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1515-12-2017 01:30:11

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB] Input Language Assistant

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

Отсутствует

 

№1615-12-2017 02:59:50

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: [CB] Input Language Assistant

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


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1717-12-2017 00:18:31

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB] Input Language Assistant

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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]