SagittariusAStar

Untitled

Jun 16th, 2026 (edited)
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Source: https://dou.ua/forums/topic/23584/#3081362
  2.  
  3. #SingleInstance Force
  4. #Requires AutoHotkey v2.0
  5.  
  6. SetCapsLockState "AlwaysOff"
  7.  
  8. ukToEn := Map(
  9.     'й','q', 'ц','w', 'у','e', 'к','r', 'е','t', 'н','y', 'г','u', 'ш','i', 'щ','o', 'з','p',
  10.     'х','[', 'ї',']', 'ф','a', 'і','s', 'в','d', 'а','f', 'п','g', 'р','h', 'о','j', 'л','k',
  11.     'д','l', 'ж',';', 'є',"'", 'я','z', 'ч','x', 'с','c', 'м','v', 'и','b', 'т','n', 'ь','m',
  12.     'б',',', 'ю','.', '.','/',
  13.     'Й','Q', 'Ц','W', 'У','E', 'К','R', 'Е','T', 'Н','Y', 'Г','U', 'Ш','I', 'Щ','O', 'З','P',
  14.     'Х','{', 'Ї','}', 'Ф','A', 'І','S', 'В','D', 'А','F', 'П','G', 'Р','H', 'О','J', 'Л','K',
  15.     'Д','L', 'Ж',':', 'Є','"', 'Я','Z', 'Ч','X', 'С','C', 'М','V', 'И','B', 'Т','N', 'Ь','M',
  16.    'Б','<', 'Ю','>'
  17. )
  18.  
  19. enToUk := Map()
  20. for uk, en in ukToEn
  21.    enToUk[en] := uk
  22.  
  23. DetectLanguage(text) {
  24.    for ch in StrSplit(text, "") {
  25.        code := Ord(ch)
  26.        if (code >= 0x400 && code <= 0x4FF)
  27.            return "uk"
  28.        if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122))
  29.            return "en"
  30.    }
  31.    return "unknown"
  32. }
  33.  
  34. TransliterateText(text, direction) {
  35.    table := (direction = "enToUk") ? enToUk : ukToEn
  36.    result := ""
  37.    for ch in StrSplit(text, "")
  38.        result .= table.Has(ch) ? table[ch] : ch
  39.    return result
  40. }
  41.  
  42. SwitchLayout() {
  43.    Send "{LCtrl down}{Shift down}{LCtrl up}{Shift up}"
  44. }
  45.  
  46. CapsLock:: {
  47.    saved := ClipboardAll()
  48.    A_Clipboard := ""
  49.    Send "^c"
  50.  
  51.    if !ClipWait(0.5) || A_Clipboard = "" {
  52.        A_Clipboard := saved
  53.        SwitchLayout()
  54.        return
  55.    }
  56.  
  57.    selected := A_Clipboard
  58.    lang := DetectLanguage(selected)
  59.  
  60.    if (lang = "unknown") {
  61.        A_Clipboard := saved
  62.        SwitchLayout()
  63.        return
  64.    }
  65.  
  66.    direction := (lang = "uk") ? "ukToEn" : "enToUk"
  67.    A_Clipboard := TransliterateText(selected, direction)
  68.    Send "^v"
  69.    Sleep 150
  70.    A_Clipboard := saved
  71.     SwitchLayout()
  72. }
Advertisement
Add Comment
Please, Sign In to add comment