Как должно работать переключение раскладок на клавиатуре
Все нижеследующее может показаться вам мелочью, недостойной обсуждения. Не переживайте, с вами все в порядке — просто у вас Другое Мнение. На всякий случай выпейте стакан воды, это никогда не повредит.
Вот такое действие
При работе на компьютере я люблю эффективные микродействия. Удалить слово «гудрон» в ворде однократным нажатием комбинации Ctrl+Backspace лучше, чем нажимать Backspace шесть раз. И уж точно лучше, чем убирать руку с клавиатуры, брать мышку, выделять текст курсором и жать Delete. Так же удобно с помощью Ctrl+стрелок прыгать курсором между словами, а с помощью Ctrl+Home/End попадать сразу в начало/конец документа.
Но есть одно важное действие, которое плохо поддается микро-оптимизации. Это переключение между языками ввода.
Аче всмысле 🐱
Олды помнят: после переустановки винды нужно поменять комбинацию с Alt+Shift на Ctrl+Shift
Во-первых, раскладка переключается комбинацией из двух клавиш. В Windows стандартное сочетание — Alt+Shift. При быстром наборе текста переключение срабатывает не с первой попытки — как коробка передач на старой «копейке». Печатаешь-печатаешь на русском, разогнался, надо напечатать пару слов на английском, без остановки жмешь альтшифт, печатаешь дальше — комп издает противный звук, один из пунктов меню открытой программы вылезает чорт знает зачем. Олды тоже знают: однократное нажатие на альт переводит фокус программы на верхнее меню с выпадающими списками, дальнейшее нажатие клавиши вызывает подменю.
Логика же подсказывает, что нажатие альт-шифт происходит так: большой палец нажимает альт, вслед за ним мизинец или безымянный нажимает шифт. В случае быстрой печати и фокусе на тексте, а не на контроле переключения языка, большой палец может уйти с альта раньше, чем мизинец коснется шифта, и произойдет вышеописанное. Еще можно промахнуться по шифту и нажать капслок.
Олды умеют менять раскладку на шифт-контрол, ошибок становится поменьше, но это компромисс. Дело же не в сочетании клавиш, дело в убогом микросценарии.
По шагам:
- Печатаем на русском. Нужно переключиться на английский.
- Нажимаем на нужную комбинацию клавиш для переключения.
- Печатаем дальше.
Ок, три шага. Вроде немного. Но это идеальный сценарий, когда все сработало. Если не сработало и вы хотели напечатать слово на английском, а получилось на русском — придется стереть ошибочно напечатанное и снова запускать сценарий с шага 2. Это дорого с т.з. упущенного времени, поэтому придется ввести проверку.
Получается так:
- Печатаем на русском. Нужно переключиться на английский.
- Нажимаем на нужную комбинацию клавиш для переключения.
- Смотрим на крошечный значок языка в углу экрана (проверка)
- Печатаем дальше.
Чуете подвох? Если проверка на третьем шагу не даст нужного результата, придется вернуться на шаг «два». Возможно, не раз. Концентрация сбилась, придется потратить драгоценные секунды на возврат в русло потока. Если вы быстро печатаете — хотя бы 200 символов в минуту — для вас это катастрофа. Ну, микро.
А ведь это не худший сценарий. Смотрите:
- Сидим в браузере и читаем. Решаем что-то записать в ворд
- Открываем ворд
- Определяем, какая включена раскладка — смотрим на крошечный значок языка в углу экрана (тут условная развилка)
- Переключаем в случае необходимости
- Начинаем печатать.
Тут тоже возможна проблема: если начали печатать и раскладка все-таки не та, то возврат с пятого на третий шаг, снова цикл.
Убираем этот плохо предсказуемый цикл:
- Сидим в браузере и опять читаем. Решаем что-то записать в ворд
- Открываем ворд
- Смотрим на крошечный значок языка в углу экрана (определение режима)
- Переключаем в случае необходимости
- Смотрим на крошечный значок языка в углу экрана ещё разок (проверка)
- Начинаем печатать.
Тут все-таки есть цикл (5→4), но он более предсказуемый и с переключением контекста. Из потока вылетели, но находитесь в режиме выполнения сценария «переключение раскладки» явным образом.
Ну что же, шесть чертовых шагов. Целая микро-жизнь.
Как исправить
Дело, конечно, в модальности. Есть два режима — «русская раскладка» и «английская раскладка», одновременно они работать не могут, переключаются комбинацией клавиш. Какой включен режим — сигнализируется крошечной иконкой в углу экрана.
Чтобы включить нужную раскладку, необходимо понять, в каком режиме мы находимся (1), переключить режим, если он неправильный (2), убедиться, что переключение сработало (3, опционально). В сценарии, где мы уже печатаем и надо переключиться, меньше энтропия — мы знаем, какой режим включен.
Избавиться от модальности легко. Нужно заменить логику переключателя режимов на логику включателей для каждого режима.
Как поменяется наше чтение браузера?
- Сидим в браузере и снова что-то читаем. Решаем что-то записать в ворд
- Открываем ворд
- Адресно включаем нужную нам раскладку
- Начинаем печатать.
Нам не нужно ничего проверять: требуемая раскладка всегда включается одной и той же комбинацией. Если мы уже в нужном режиме — ничего страшного не произойдет.
Конечно, есть риск цикла 4→3, когда что-то не сработало, можно ввести проверку и т. п. Но в случае корректного срабатывания адресное включение убирает целый шаг и необходимость смотреть на значок перед включением.
Есть, конечно, и тут проблемки. Для корректного срабатывания нужно, чтобы включение раскладки было с помощью одной глобально работающей клавиши — это идеальный вариант. Стандартными средствами винды можно назначить комбинацию (например, контрол + 1) на каждую раскладку, но они просто не работают. Нажимаешь — ничего не происходит. Поэтому решить проблему можно с помощью пунто свитчера (отключаем все, кроме этого, и особенно в первую очередь выключаем автоматическое переключение) или даже лучше — с помощью SimpleSwitcher (старая, уже не поддерживается, но работает). Я ставлю левый контрол на включение русского языка, правый — английского.
Есть ощущение, что можно этот же сценарий реализовать с помощью скрипта Autohotkey, но я пока с этим не разбирался.
Еще есть проблема, когда указанный способ (L/R Control для разных языков) в винде просто не срабатывает. Тыкаешь в этот несчастный правый контрол, пялишься на значок языка, а он не меняется. Сдаешься, переключаешь стандартным для винды способом — все срабатывает, и контрол тоже начинает работать. Позорная капитуляция из-за каких-то проблем на уровне то ли операционки, то ли программы переключения.
Посмотрите еще раз на фото из заголовка — там выделенные клавиши для адресного включения русского и латиницы.
Закруглим выводом, следующим из названия.
Переключение раскладки должно включаться на уровне системы двумя способами: прямым включением нужной раскладки (нямка 🍧) или циклическим перебором всех вариантов. Оба способа должны активироваться глобальными хоткеями.
Почему я оставил шанс классическому способу? Потому что я за разнообразие.
Альтернативные школы мысли
Когда-то давно Артём Горбунов предлагал другое решение: красить текстовый курсор в разные цвета в зависимости от выбранной раскладки. Это облегчает нам шаги, связанные с определением режима при старте печати или проверке того, что переключение сработало при печати-в-процессе. Минусов два: во-первых, это не поможет людям, которые смотрят при печати не в экран, а на клавиатуру (почти все); во-вторых, хороших приложений, реализующих этот принцип, я не встречал.
Ну и отдельно отмечу пунто свитчер и практику автоматического переключения раскладок. За десять с лишним лет периодического использования пунто (и его более симпатичного клона Caramba Switcher) автопереключения успели меня задрать почище, чем альтшифт. Лучше уж я сам буду контролировать поведение системы. Предложение создавать новое правило каждый раз после ошибки автокоррекции (руками забивать в настройках 🤮) — это садизм высшей пробы.
Пунто мне нужен был только для назначения отдельных включателей для каждой раскладки, все остальное я безжалостно, будто акула, выключал. После обнаружения SimpleSwitcher и эта надобность отпала — он меньше, проще и не сует яндекс-браузер в инсталлер.
Если вам нравится автопереключение, посмотрите Caramba Switcher. Ее сделал и регулярно развивает автор пунто свитчера Сергей Москалев.
Фото в начале — из поста https://xlat.livejournal.com/654025.html
Уже после написания и вычитки поста я пошел гуглить на тему. И нагуглил прекрасный пост: https://habr.com/ru/post/156779/. В мире есть (или был) еще один такой же.
upd. Наладил переключение на маке: https://artemushanov.ru/?go=all/nastroil-pravilnoe-pereklyuchenie-raskladok-na-make/