Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Source: https://dou.ua/forums/topic/23584/#3081362
- #SingleInstance Force
- #Requires AutoHotkey v2.0
- SetCapsLockState "AlwaysOff"
- ukToEn := Map(
- 'й','q', 'ц','w', 'у','e', 'к','r', 'е','t', 'н','y', 'г','u', 'ш','i', 'щ','o', 'з','p',
- 'х','[', 'ї',']', 'ф','a', 'і','s', 'в','d', 'а','f', 'п','g', 'р','h', 'о','j', 'л','k',
- 'д','l', 'ж',';', 'є',"'", 'я','z', 'ч','x', 'с','c', 'м','v', 'и','b', 'т','n', 'ь','m',
- 'б',',', 'ю','.', '.','/',
- 'Й','Q', 'Ц','W', 'У','E', 'К','R', 'Е','T', 'Н','Y', 'Г','U', 'Ш','I', 'Щ','O', 'З','P',
- 'Х','{', 'Ї','}', 'Ф','A', 'І','S', 'В','D', 'А','F', 'П','G', 'Р','H', 'О','J', 'Л','K',
- 'Д','L', 'Ж',':', 'Є','"', 'Я','Z', 'Ч','X', 'С','C', 'М','V', 'И','B', 'Т','N', 'Ь','M',
- 'Б','<', 'Ю','>'
- )
- enToUk := Map()
- for uk, en in ukToEn
- enToUk[en] := uk
- DetectLanguage(text) {
- for ch in StrSplit(text, "") {
- code := Ord(ch)
- if (code >= 0x400 && code <= 0x4FF)
- return "uk"
- if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122))
- return "en"
- }
- return "unknown"
- }
- TransliterateText(text, direction) {
- table := (direction = "enToUk") ? enToUk : ukToEn
- result := ""
- for ch in StrSplit(text, "")
- result .= table.Has(ch) ? table[ch] : ch
- return result
- }
- SwitchLayout() {
- Send "{LCtrl down}{Shift down}{LCtrl up}{Shift up}"
- }
- CapsLock:: {
- saved := ClipboardAll()
- A_Clipboard := ""
- Send "^c"
- if !ClipWait(0.5) || A_Clipboard = "" {
- A_Clipboard := saved
- SwitchLayout()
- return
- }
- selected := A_Clipboard
- lang := DetectLanguage(selected)
- if (lang = "unknown") {
- A_Clipboard := saved
- SwitchLayout()
- return
- }
- direction := (lang = "uk") ? "ukToEn" : "enToUk"
- A_Clipboard := TransliterateText(selected, direction)
- Send "^v"
- Sleep 150
- A_Clipboard := saved
- SwitchLayout()
- }
Advertisement
Add Comment
Please, Sign In to add comment