Как должно работать переключение раскладок на клавиатуре

Клавиатура компьютера «Львов ПК-01». Фото © xlat.livejournal.com

Все нижеследующее может показаться вам мелочью, недостойной обсуждения. Не переживайте, с вами все в порядке — просто у вас Другое Мнение. На всякий случай выпейте стакан воды, это никогда не повредит.


Вот такое действие

При работе на компьютере я люблю эффективные микродействия. Удалить слово «гудрон» в ворде однократным нажатием комбинации Ctrl+Backspace лучше, чем нажимать Backspace шесть раз. И уж точно лучше, чем убирать руку с клавиатуры, брать мышку, выделять текст курсором и жать Delete. Так же удобно с помощью Ctrl+стрелок прыгать курсором между словами, а с помощью Ctrl+Home/End попадать сразу в начало/конец документа.

Но есть одно важное действие, которое плохо поддается микро-оптимизации. Это переключение между языками ввода.

Аче всмысле 🐱

Олды помнят: после переустановки винды нужно поменять комбинацию с Alt+Shift на Ctrl+Shift

Во-первых, раскладка переключается комбинацией из двух клавиш. В Windows стандартное сочетание — Alt+Shift. При быстром наборе текста переключение срабатывает не с первой попытки — как коробка передач на старой «копейке». Печатаешь-печатаешь на русском, разогнался, надо напечатать пару слов на английском, без остановки жмешь альтшифт, печатаешь дальше — комп издает противный звук, один из пунктов меню открытой программы вылезает чорт знает зачем. Олды тоже знают: однократное нажатие на альт переводит фокус программы на верхнее меню с выпадающими списками, дальнейшее нажатие клавиши вызывает подменю.

Логика же подсказывает, что нажатие альт-шифт происходит так: большой палец нажимает альт, вслед за ним мизинец или безымянный нажимает шифт. В случае быстрой печати и фокусе на тексте, а не на контроле переключения языка, большой палец может уйти с альта раньше, чем мизинец коснется шифта, и произойдет вышеописанное. Еще можно промахнуться по шифту и нажать капслок.
Олды умеют менять раскладку на шифт-контрол, ошибок становится поменьше, но это компромисс. Дело же не в сочетании клавиш, дело в убогом микросценарии.

По шагам:

  1. Печатаем на русском. Нужно переключиться на английский.
  2. Нажимаем на нужную комбинацию клавиш для переключения.
  3. Печатаем дальше.

Ок, три шага. Вроде немного. Но это идеальный сценарий, когда все сработало. Если не сработало и вы хотели напечатать слово на английском, а получилось на русском — придется стереть ошибочно напечатанное и снова запускать сценарий с шага 2. Это дорого с т.з. упущенного времени, поэтому придется ввести проверку.

Получается так:

  1. Печатаем на русском. Нужно переключиться на английский.
  2. Нажимаем на нужную комбинацию клавиш для переключения.
  3. Смотрим на крошечный значок языка в углу экрана (проверка)
  4. Печатаем дальше.

Чуете подвох? Если проверка на третьем шагу не даст нужного результата, придется вернуться на шаг «два». Возможно, не раз. Концентрация сбилась, придется потратить драгоценные секунды на возврат в русло потока. Если вы быстро печатаете — хотя бы 200 символов в минуту — для вас это катастрофа. Ну, микро.

А ведь это не худший сценарий. Смотрите:

  1. Сидим в браузере и читаем. Решаем что-то записать в ворд
  2. Открываем ворд
  3. Определяем, какая включена раскладка — смотрим на крошечный значок языка в углу экрана (тут условная развилка)
  4. Переключаем в случае необходимости
  5. Начинаем печатать.

Тут тоже возможна проблема: если начали печатать и раскладка все-таки не та, то возврат с пятого на третий шаг, снова цикл.

Убираем этот плохо предсказуемый цикл:

  1. Сидим в браузере и опять читаем. Решаем что-то записать в ворд
  2. Открываем ворд
  3. Смотрим на крошечный значок языка в углу экрана (определение режима)
  4. Переключаем в случае необходимости
  5. Смотрим на крошечный значок языка в углу экрана ещё разок (проверка)
  6. Начинаем печатать.

Тут все-таки есть цикл (5→4), но он более предсказуемый и с переключением контекста. Из потока вылетели, но находитесь в режиме выполнения сценария «переключение раскладки» явным образом.

Ну что же, шесть чертовых шагов. Целая микро-жизнь.

Как исправить

Дело, конечно, в модальности. Есть два режима — «русская раскладка» и «английская раскладка», одновременно они работать не могут, переключаются комбинацией клавиш. Какой включен режим — сигнализируется крошечной иконкой в углу экрана.
Чтобы включить нужную раскладку, необходимо понять, в каком режиме мы находимся (1), переключить режим, если он неправильный (2), убедиться, что переключение сработало (3, опционально). В сценарии, где мы уже печатаем и надо переключиться, меньше энтропия — мы знаем, какой режим включен.
Избавиться от модальности легко. Нужно заменить логику переключателя режимов на логику включателей для каждого режима.

Как поменяется наше чтение браузера?

  1. Сидим в браузере и снова что-то читаем. Решаем что-то записать в ворд
  2. Открываем ворд
  3. Адресно включаем нужную нам раскладку
  4. Начинаем печатать.

Нам не нужно ничего проверять: требуемая раскладка всегда включается одной и той же комбинацией. Если мы уже в нужном режиме — ничего страшного не произойдет.
Конечно, есть риск цикла 4→3, когда что-то не сработало, можно ввести проверку и т. п. Но в случае корректного срабатывания адресное включение убирает целый шаг и необходимость смотреть на значок перед включением.

Есть, конечно, и тут проблемки. Для корректного срабатывания нужно, чтобы включение раскладки было с помощью одной глобально работающей клавиши — это идеальный вариант. Стандартными средствами винды можно назначить комбинацию (например, контрол + 1) на каждую раскладку, но они просто не работают. Нажимаешь — ничего не происходит. Поэтому решить проблему можно с помощью пунто свитчера (отключаем все, кроме этого, и особенно в первую очередь выключаем автоматическое переключение) или даже лучше — с помощью SimpleSwitcher (старая, уже не поддерживается, но работает). Я ставлю левый контрол на включение русского языка, правый — английского.
Есть ощущение, что можно этот же сценарий реализовать с помощью скрипта Autohotkey, но я пока с этим не разбирался.
Еще есть проблема, когда указанный способ (L/R Control для разных языков) в винде просто не срабатывает. Тыкаешь в этот несчастный правый контрол, пялишься на значок языка, а он не меняется. Сдаешься, переключаешь стандартным для винды способом — все срабатывает, и контрол тоже начинает работать. Позорная капитуляция из-за каких-то проблем на уровне то ли операционки, то ли программы переключения.
Посмотрите еще раз на фото из заголовка — там выделенные клавиши для адресного включения русского и латиницы.

© xlat.livejournal.com

Закруглим выводом, следующим из названия.

Переключение раскладки должно включаться на уровне системы двумя способами: прямым включением нужной раскладки (нямка 🍧) или циклическим перебором всех вариантов. Оба способа должны активироваться глобальными хоткеями.

Почему я оставил шанс классическому способу? Потому что я за разнообразие.

Альтернативные школы мысли

Когда-то давно Артём Горбунов предлагал другое решение: красить текстовый курсор в разные цвета в зависимости от выбранной раскладки. Это облегчает нам шаги, связанные с определением режима при старте печати или проверке того, что переключение сработало при печати-в-процессе. Минусов два: во-первых, это не поможет людям, которые смотрят при печати не в экран, а на клавиатуру (почти все); во-вторых, хороших приложений, реализующих этот принцип, я не встречал.

Ну и отдельно отмечу пунто свитчер и практику автоматического переключения раскладок. За десять с лишним лет периодического использования пунто (и его более симпатичного клона 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/

Отправить
Поделиться
Запинить