Dcnfk yt c njq yjub& Yt ,tlf! :vb СфзыДщсл и не придётся перепечатывать текст заново.
Ставим AutoHotKey - фреймворк для клавиатурных утилит. Потом пишем скрипт ruen.ahk:
#Requires AutoHotkey v2.0
#SingleInstance Force
; пробегаемся по всем клавишам, удаляем одинаковые в разных раскладках, экраниуем через `
en := "QWERTYUIOP{}|ASDFGHJKL:`"ZXCVBNM<>?~@#$^&qwertyuiop[]asdfghjkl;'zxcvbnm,./``"
ru := "ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё`"№;:?йцукенгшщзхъфывапролджэячсмитьбю.ё"
; собираем карты переключения в обе стороны
en2ru := Map()
for ch in StrSplit(en)
en2ru[ ch ] := SubStr( ru, A_Index, 1 )
ru2en := Map()
for ch in StrSplit(ru)
ru2en[ ch ] := SubStr( en, A_Index, 1 )
; общий код для всех хоткеев
Correct() {
backup := ClipboardAll() ; сохраняем буфер, потом восстановим
A_Clipboard := "" ; чистим буфер
Send "#{Space}^c" ; Жмём Win+Space и Ctrl+C
ClipWait 0.5 ; дожидаемся копирования в буфер
if A_Clipboard { ; буфер не пустой
result := ""
mode := "en" ; по дефолту переводим в английский
Loop Parse A_Clipboard { ; для каждого символа из буфера
; ищем варианты переключений для текущего симовола
ru := en2ru.Get( A_LoopField, "" )
en := ru2en.Get( A_LoopField, "" )
if en && ru { ; возможны оба варианта - выбираем прошлый
result .= mode = "en" ? en : ru
} else if en {
result .= en
mode := "en"
} else if ru {
result .= ru
mode := "ru"
} else { ; оставляем как есть
result .= A_LoopField
}
}
A_Clipboard := result ; пишем в буфер
Send "^v" ; жмём Ctrl+V
Sleep 100 ; ждём пока данные заберут
}
A_Clipboard := backup ; восстанавливаем буфер
}
; CapsLock - хоткей коррекци выделения
CapsLock:: {
Correct()
}
; Shift + CapsLock - хоткей коррекции последнего слова
+CapsLock:: {
Send "^+{Left}" ; Жмём Ctrl+Shift+Left
Correct()
}
; Ctrl + CapsLock - хоткей коррекции до конца строки
^CapsLock:: {
Send "+{End}" ; Жмём Shift+End
Correct()
}
; Ctrl + Shift + CapsLock - хоткей коррекции с начала строки
^+CapsLock:: {
Send "+{Home}" ; Жмём Shift+Home
Correct()
}Даблкликаем по нему, и получаем:
переключение раскладки выделенного текста по
CapsLockпоследнего слова - по
Shift + CapsLockдо конца строки - по
Ctrl + CapsLockот начала строки - по
Ctrl + Shift + CapsLock
При желании его можно скомпилировать в exe-шник. Интерфейс самого AHK так и сделан.
Из уникальных фичей: переключает одновременно и раскладку введённого текста, и текущую раскладку клавиатуры.
Известные альтернативы:
Punto Switcher - 100 метровый звездолёт против 12 у AHK. Автопереключение часто не к месту, а горячую клавишу
Breakпойди найти на ноуте. Про интеграцию вашего буфра обмена с сервисами Яндекса я даже не заикаюсь.Caramba Switcher - 60 метров и никаких настроек. Переключения по шифту - тот ещё глюкодром, с которым борятся через самообучение.
Mahou - поди найти клавиши
ScrollиPause.Остальные лень ковырять - расскажите в комментах кому не влом.


