Как стать автором
Обновить

Альтернативные клавиши переключения языка

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров8.4K

Привычный способ переключать раскладку клавиатуры не оптимален. Нужно помнить, какая у тебя раскладка сейчас, и затем подумать, нажать или не нажать комбинацию. Звучит смешно, когда описываешь словами. Но эту операцию мы делаем тысячи раз в день, и самая крохотная её оптимизация ощутимо прибавляет комфорт.

Гораздо удобнее, когда есть разные клавиши «Переключить на язык такой‑то». Если этот язык уже выбран — то просто ничего не происходит. Весь смысл в том, что не нужно думать: собираешься писать на языке — нажал его кнопку. Перешёл в другое окно — автоматом нажал кнопку для желаемого языка. Отвлёкся — снова нажал. Для мозга нажать на автомате лишнюю кнопку в сто раз проще, чем вспоминать, какая там раскладка стоит сейчас.

Как только пальцы привыкнут, то явление «начал писать не на том языке» уйдёт из вашей жизни на уровне концепции. Особенно рекомендую тем, кто смотрит на клавиатуру при печати.

В Linux эти настройки доступны «из коробки», по крайней мере там, где не уничтожили окно настройки клавиш иксов. В Винтусе же «из коробки» тоже можно это наладить, но только на комбинацию Ctrl + Alt + цифра. Которая, кстати, самая удобная, когда у вас в ходу 5–6 равно используемых раскладок. Но не две.

Поэтому предлагаю создать хоткеи вручную, воспользовавшись бесплатной программой AutoHotKey. Ещё бывает, делают те же вещи через PowerToys и PuntoSwitcher, но это всё большие комплексы с кучей всего, а я предлагаю компактное решение. После установки AutoHotKey (версии 2) не надо его запускать, а нужно создать текстовый файл с инструкциями и расширением .ahk

#Requires AutoHotkey v2.0 64-bit
#SingleInstance Force

SetInputLang(TargetLang)
{   
    currentLayout := DllCall("GetKeyboardLayout", "UInt", 0)
    if (currentLayout != TargetLang){
        WinHnd := WinExist("A")
        if not WinHnd {
            return
        }
        CtrlInFocus := ControlGetFocus()
        if not CtrlInFocus {
            PostMessage(0x50, 0, TargetLang)
            return
        }
        PostMessage(0x50, 0, TargetLang, CtrlInFocus)
    }
}

CapsLock::SetInputLang(0x0809) ; English (UK)

+CapsLock::SetInputLang(0x0419) ; Russian

Эти инструкции означают: Capslock переключает всегда на английский, Shift+Capslock на русский. Если хотите другие комбинации, смотрите здесь. Когда сохраните файл, его должно быть возможно запустить правой кнопкой → Run Script. Он будет сидеть в трее, перехватывать нажатия капслока и менять язык.

Проверяйте. Если всё работает и всё понравилось, скрипт можно добавить в автозагрузку. Для этого открывайте или проводник, или Win+R, в строке адреса набирайте shell:startup. Откроется папка. Туда нужно поместить ярлык на скрипт.

Одна проблема — скрипт не может перехватывать кнопки в особых окнах, таких как окно UAC. Там, если нужно, язык придётся переключать старым добрым Win+Пробел, который работает везде и всегда. Это, кстати, на заметку тем, кто часто ходит по чужим компьютерам: Alt+Shift и Ctrl+Shift опциональны, а вот Win+Пробел без бубна не отключишь.

P. S. Ещё один хороший скриптик всем любителям понагибать: когда на экране полноэкранное приложение, кнопка Win заменяется на Enter.

#Requires AutoHotkey v2.0 64-bit

isFullScreen()
{
    WinGetPos , , &W, &H, "A" ; "A" is a codename for current window
    return (W H = A_ScreenWidth A_ScreenHeight)
}

#HotIf isFullScreen()
LWin::Return
#HotIf

Теги:
Хабы:
Всего голосов 7: ↑6 и ↓1+8
Комментарии43

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань