Pull to refresh

LangBar++. Два вечных вопроса: индикация раскладки и ее исправление в набранном тексте

Level of difficultyEasy
Reading time6 min
Views3.9K

Речь пойдет о программе LangBar++, сейчас, как я надеюсь, готовой к выходу из форумного подземелья в свет. Написание программ такого рода принадлежит к одной из неисчерпаемых тем, разработанных в самых разных направлениях. Большая часть таких изысканий оказывается посвящена конкретным неудобствам, особо допекающими автора, и с их устранением исчезает и стимул дальнейшего развития. Вопрос же создания чего-то большего “в одном флаконе” до сих пор висит в воздухе. Не то, что бы я намеревался создать нечто великое в этой области и превзойти легенды. Напротив, я шел тем же путем малых решений, но из периодического возвращения к одной и той же теме постепенно сформировалось нечто целостное, что сейчас и предлагается вашему вниманию.

Прежде всего, я не люблю автоматику, и, подобно многим, здесь присутствующим, почти не могу пользоваться автоматическим исправлением раскладки в обычной жизни. Ручное же использование Punto Switcher и подобных ему программ и скриптов всегда казалось неудобным, и как-то я написал скрипт на Autohotkey, работающий с выделением набранного текста, пока нажата пауза Pause, так что можно последовательно менять несколько последних набранных слов:

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

Это явно не для всех, но привыкнуть можно, тем более что скорость выделения сейчас детально настраивается для любых навыков печати, от самых детских до вполне профессиональных. Исправление раскладки работает в командной строке, FAR, ConEmu и терминале Windows 10-11, причем из-за особенностей этих программ вместо выделения текста по сочетанию Shift+Left производится его забивание:

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

Примерно в то же время мне попался достаточно популярный скрипт Irbis, отрисовывающий флажок раскладки у текстового курсора. Скрипт был доработан, флажок был сделан c настраиваемым размером и прозрачностью, необходимость чего следовала уже из увеличивающегося диапазона разрешений мониторов и возможной полезности для подслеповатых людей:

К флажку была добавлена поддержка командной строки, появилась иконка раскладки в трее, был прикручен вышеописанный скрипт исправления раскладки, и все вместе это было выложено на форуме Ru.Board под именем LangBar++, в полной уверенности отсутствия далеко идущих последствий. Идея понравилась, но общество потребовало дальнейших шагов. И, прежде всего, возможности отображения флажков других раскладок. Следуя излюбленному принципу наименьшего действия, я добавил на такой случай иконку и флажок с вопросительным знаком. Вышло терпимо, но сам этот вопросительный знак не давал мне спокойно жить: программа тихо сползала в многоязычность, и сделать с этим что-то было сложно.

Поскольку же автор имеет права самозащиты, он может взваливать ненужный труд на плечи пользователя. Никаких флажков в ресурсах, как в Punto Switcher - пусть сами выбирают то, что им нравится и с тем живут! Была сделана генерация иконок из тех же png-флажков, а там стало естественным добавить отображение состояния кнопок NumLock и ScrollLock на иконке в трее, как на флажке отображается CapsLock. Визуальные элементы, используемые для этого легко заменяемы, как и флажки, архив которых идет с программой. Не нравится ушастая иконка - можно сделать мигающие глазки или что еще. Имеется интерфейс, отображающий требуемые названия флажков и быстро открывающий папку с ними:

В случае, если вы имеете дело с каким-то уникальным наречием, не фигурирующем в перечне Microsoft, вместо короткого обозначения языка имя файла флажка будет сгенерировано из цифрового кода раскладки. Раскладки с еще неназначенными флажками отображаются картинками с вопросительными знаками трех разных цветов.

Из Punto Switcher потянулся длинный кармический хвост в виде преобразования регистра набранного текста и его транслитерации, сделанных уже с таким же беглым его выделением. В дополнение к переключению раскладки при клике левой кнопкой мыши, флажок получил возможность исправления набранного текста и инверсии раскладки при нажатии на него соответственно правой и средней кнопкой мыши. Все работает с тем же “быстрым выделением”, и, иногда, это удобно.

Кнопка CapsLock обросла множеством настроек. Помимо ее простого выключения или использования в качестве Shift, можно использовать ее для переключения раскладки, ее исправления или инверсии регистра, в последнем случае даже с сохранением ее основной функции. Имеются необходимые настройки и для остальных Lock-клавиш.

Программа отображает флажок не во всех программах (вроде злополучного терминала и “современных” (UWP) приложений), поэтому было решено сделать неподвижный индикатор раскладки. Кроме того, многие не без причин предпочитают самодельный скрипт, отображающий флажок или даже просто цветной прямоугольник в центре экрана - на уровне навыков это проще, не нужно следить ни за кареткой, ни за индикатором в трее. К тому же, его можно сделать достаточно большим, так что какое-то угловое, рассосредоточенное зрение будет само собой фиксировать то, что он показывает. Очевидно, выгода есть и для обычных людей, и для незрячих. Здесь это все та же иконка в трее, только увеличенная, на которой отрисовывается состояние всех Lock-клавиш (два “уха” на NumLock и ScrollLock, голубая “тень” для CapsLock). По умолчанию индикатор прозрачен для кликов, но возможно его использование и в качестве дополнительного переключателя раскладки.

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

Правила создаются с учетом исполняемого файла программы и класса окна; на основании последнего возможно создание правил для подобных приложений. В списке правил можно менять их иерархию, удалять или выключать ненужные.

Подобные вещи задумывались давно, нужно было только дойти и как-то заняться этим. Неожиданным поворотом стал однажды заданный вопрос из ближнего зарубежья: можно ли сделать исправление раскладки меж разных клавиатур, а не только пары английский-русский, для довершения ee языковой универсальности? Программа тогда работала в пределах стандартных раскладок qwerty-клавиатуры методом простой заменой символов, и ни о чем большем в тот момент я не помышлял. Было найдено решение: вместо постоянной записи введенных символов программа теперь записывает виртуальные коды клавиш. Все исправление сводится к тому, чтобы переключить раскладку и послать тот же набор виртуальных клавиш вместо старого текста.

В пределах восьми раскладок можно преобразовывать набранный или выделенный текст по нумерованным клавиатурным сочетаниям с тем же “быстрым выделением”, что и английский или русский. Сейчас уже программа может преобразовывать дополнительные символы, диакритические знаки и пр., набираемые с зажатым правым Alt. Например, возможно преобразование французского в немецкий и обратно с учетом всех особенностей этих клавиатур.

Помимо этого, на левые и правые клавиши Ctrl и Shift возможно повесить четыре настраиваемых раскладки для их быстрой активации. Есть и возможность вызова раскладок по горячим клавишам, автоматически сгенерированным на основании их последовательности. Таким образом, программа получила наиболее мощные возможности для работы с множеством языков ввода.

В описании сказано, что программа “отличается высокой совместимостью”. LangBar++ производит запись виртуальных кодов клавиш, и поэтому не зависит от физического типа клавиатуры и используемых раскладок. Если у вас ужатая клавиатура, вместо кнопки Pause можно использовать сочетание клавиш Shift+Backspace, достаточно удобное ввиду их размера. Настройки флажка, производимые на ПК мышью, на ноутбуке выполняются через отдельный интерфейс. Имеются настройки сглаживания и масштабирования флажка, позволяющие адаптировать программу к достаточно добитым мониторам.

Переключение языка ввода, - часто наиболее существенное, что реально ограничивает использование такого рода программ, - по умолчанию производится посылкой обычных клавиш изменения раскладки, а не “посылкой сообщений” (Post- или SendMessage), как у аналогов, что может приводить к падению приложений, даже таких именитых, как изделия Autodesk. Есть демон, перезапускающий ее при крайне редких, но полностью неисключимых падениях. В наличи бэкап (или сброс плюс бэкап) настроек в каталог программы.

Имеется адаптация к работе на виртуальных машинах. Установленная на хосте версия автоматически блокируется, а запущенная на гостевой системе выполняет основной функционал, ограниченный погрешностями работы горячих клавиш, которых почти нет в продуктах VMware и хватает на VirtualBox.

Программа идет в одном исполняемом файле, откуда возможна установка и распаковка портативной версии. Предусмотрено быстрое копирование настроек и флажков из каталога установки, если в этом возникнет необходимость.

Наконец, программа свободная, код в Autohotkey v1.1 выложен на GitHub. Возможно, вам удастся вывести из нее что-нибудь еще. Успехов!

Tags:
Hubs:
Total votes 26: ↑26 and ↓0+26
Comments13

Articles