lydell / dual

[ABANDONED] Dual is an AutoHotkey script that lets you define dual-role modifier keys easily.
MIT License
122 stars 13 forks source link

Troubles with non-english layout. #10

Open jumper047 opened 5 years ago

jumper047 commented 5 years ago

First, thank you for your code - i cant live without dual role keys, and your script is only working solution on windows. Is use dual as BigCtrl replacememnt - with config smth like that.

*Space::
*Space UP::dual.combine("RCtrl", A_ThisHotkey)

Everything works fine except second layout. In russian layout keys with dots, braces, etc produces them not regarding what layout is currently selected. So, i found workaround for that - add for every wrong working key.

*,::
StringReplace, KeytoSend, A_ThisHotkey, *
dual.combo(",")
if (current_is_ru() && !GetKeyState("RCtrl") && !GetKeyState("RAlt") && !GetKeyState("LAlt")) {
    if (GetKeyState("Shift")) {
    dual.SendInput("{Shift Down}{vkBC}{Shift Up}")
} Else {
    dual.SendInput("{vkBC}")
}
} Else {
        SendInput {Blind}{%KeyToSend%}
}
Return

; Some helper functions
; RU - 0x4190419
; EN - 0x4090409
current_layout()
{
  SetFormat, Integer, H
  WinGet, WinID,, A
  ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
  InputLocaleID:=DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
  Return InputLocaleID
;  if (InputLocaleID == "0x4190419") Return True  
}

current_is_ru()
{
    CurrLoc := current_layout()
    if(CurrLoc = "0x4190419") {
        return True
    }
}

I uploaded entire config here - https://gist.github.com/jumper047/ae15b5e484bfe207d14387b6ff82c5f1

sergeiantipin commented 2 years ago

@jumper047 , здравствуйте! Пытаюсь запустить скрипт в логике

*Space::
*Space UP::dual.combine("RShift", A_ThisHotkey)

Запускается, но очень долго приходится зажимать пробел для срабатывания шифта (порядка 2-3 сек), экспериментировал с settings := {delay: 70, timeout: 300, doublePress: 200} что не дало результатов. При запуске ahk ругается на сроки. Методом тыка запуск удается только с изменением кода

#Include <dual>
dual := new Dual
#Include <dual>

а не как у автора

#Include <dual/dual>
dual := new Dual
#Include <dual/defaults>

Дополнительно. Скаченные файлы посетил и рабочий скрипт поместил в : c:***n\Documents\AutoHotkey\Lib\ Программа установлена в програмфайлс.

Если вы используете, как BigCtrl, то не могли бы подсказать, в какой директории разместить и как изменить файлы автора (быть может направите ваши)?

Спасибо.

jumper047 commented 2 years ago

@sergeiantipin здравствуйте, если честно - уже не помню, я перешел на https://github.com/ililim/dual-key-remap. У него нет проблем с кириллицей.

tr: I switched to https://github.com/ililim/dual-key-remap, it works well with cyrillic layout.

jumper047 commented 2 years ago

BTW @lydell maybe it is worth to mention that app, https://github.com/ililim/dual-key-remap, in readme as alternative?

lydell commented 2 years ago

@jumper047 :+1: Added to the readme.