Свой переключатель раскладки на Delphi, от низкоуровневого хука до скоринга n-грамм
Знакомая картина. Пишешь на автомате сложный однострочник в терминале или строчку кода в любимой IDE, нажимаешь клавишу – и с тоской наблюдаешь, как вместо команды на экране появляется россыпь кракозябр вроде git ghjvjnt или docker compose гз (примеры – для примера). Шелл ожидаемо выдает ошибку, пальцы по привычке зажимают Ctrl+Backspace или долбят клавишу удаления, а рабочий настрой разбивается о банальный язык ввода. Хуже этого может быть только поведение так называемых «умных помощников», которые вроде бы призваны эту боль лечить. Начинаешь набивать пароль в консоли – утилита радостно лезет переводить скрытые символы. Объявляешь в коде переменную user_name – программа бодро режет ее по нижнему подчеркиванию и превращает хвост в кириллицу. Запускаешь терминальную утилиту со сложными ключами – переключатель решает проявить инициативу прямо посреди флагов сборки. В итоге ловишь себя на том, что тратишь больше сил на борьбу с самодеятельностью программы, чем на саму опечатку, и в приступе раздражения просто выгружаешь ее из трея (или вносишь в исключения). Прекрасно, круг замкнулся. Многие могут сказать, что современные программы уже достаточно умные, чтобы не совершать подобных ошибок. Но ведь и я человек не простой... Если бы разработчики таких программ узнали что я иногда набираю, то, думаю, они бы впали в депрессию. Казалось бы, тема автоматического переключения раскладки исследована вдоль и поперек еще в нулевых. Есть ветеран Punto Switcher, доживающий свой век под крылом Яндекса, есть минималистичная Caramba Switcher от того же автора, есть комбайны вроде EveryLang с переводчиками и распознаванием текста, есть узкоспециализированные Aml Maple и Key Switcher, а для любителей открытого кода – Mahou. Читать далее
