Клавиатурные похождения

Мне кажется, ни у кого не вызовет сомнения тезис, что переключать языки через Alt-Shift или Ctrl-Shift — как минимум неудобно, если не сказать больше.

Достаточно долгое время для переключения языков я пользовался старой программой capsmin.exe. Эта программа перехватывает нажатие клавиши Caps Lock (переназначение этой в общем-то ненужной клавиши — весьма популярное решение) и переключает раскладку клавиатуры с русского на английский и обратно.

К сожалению, несмотря на все достоинства, у программы был выявлен баг — бывало так, что в момент переключения языков используемая программа (как правило, это MS Word либо Sublime Text) зависала. Не знаю, чем это вызвано, но это факт, отслеженный мною на множестве использовавшихся машин.

В один момент после обидного зависания мне это надоело и я решил изменить эту ситуацию.

В Windows7, как известно, можно производить замену нажатия одной клавиши на другую. Так что первый ход был ясен: заменить программу системной настройкой, подменив Caps Lock на ` (он же ~), и установить переключение языков на этот самый `.

В интернете много рецептов прямого редактирования системного реестра для выполнения такой замены, однако я считаю, что проще воспользоваться программами типа sharpkeys и mapkeyboard (архивы с этой программой в интернете на каждом углу, а вот на сайте разработчика программы нет). Ради смеха я даже прописал замену Caps Lock сразу и на LShift и на LAlt, однако это ничего не дало, система обрабатывает только одно вхождение замены.

К сожалению, при этой замене Caps Lock на backtick мы теряем как сам backtick (`) и тильду (~), так и дорогую моему сердцу клавишу ё. Никакого способа обойти это штатными средствами замены нет.

Однако, решение нашлось.

С давних времён я пользуюсь клавиатурной раскладкой Ильи Бирмана. Это крайне удобная вещь, позволяющая в первую очередь писать правильные «кавычки» и ставить типографское тире вместо категорически неграмотного дефиса или иного подобного тире символа, который услужливо подставляет столь же неграмотный в вопросах русской типографики MS Word. Также с её помощью удобно ставить квадратные скобки, до которых из русской раскладки добираться затруднительно (нужно сначала переключиться в английскую).

Однако, клавиатурная раскладка Ильи Бирмана на мой взгляд не лишена недостатков, которые я давно хотел устранить, и тут представился такой случай.

Так что я поставил MS Keyboard Layout Creator 1.4, открыл уже установленную у меня в системе раскладку (для начала русскую) Ильи Бирмана и приступил. Отличной фишкой этой программы является то, что установочные пакеты для раскладок клавиатуры она создаёт автоматически — очень удобно.

Букву ё мы получаем стандартным для его раскладки способом: нажимая AltGr+Shift+;, что переводит клавиатуру в режим ожидания символа, над которым нужно поставить две точки (умляут), ведь ё — это именно что е с умляутом. Так что нажимаем е и пожалуйста. Впрочем, тем же способом можно получить и другие буквы с умляутом, если такой символ есть в стандарте Unicode и такая замена прописана в раскладке. Но не будем на этом останавливаться.

Восстановить тильду чуть сложнее — для этого я модифицировал обе языковых раскладки, так что теперь тильда вводится через AltGr+q или AltGr+й. Опять-таки, это удобно, потому что на тильду у меня завязаны некоторые alias в командной строке, и вызывать тильду можно из двух языков.

Сложнее всего вернуть backtick; для этого на знак ' пришлось переназначить всё то, что было назначено на `. Зачем? Дело в том, что ` работает в раскладке Ильи Бирмана точно так же, как и AltGr+Shift+;, то есть через комбинацию AltGr+Shift+` можно вводить как буквы с ударѐнием (не все, это зависит от языка и от раскладки, нужно ещё разбираться как это устроено), так и непосредственно сам символ `.

К счастью, сами раскладки клавиатуры являются простыми текстовыми файлами, в которых перенести секцию с одной клавиши на другую не составляет труда.

Библиотека DLL соответствующей клавиатурной раскладки создаётся с именем, идентичным названию раскладки; во-первых, лучше чтобы в этом поле не было пробелов, а во-вторых установщик для раскладки даже не подумает создаваться, если в системе уже есть библиотека с таким именем. Так что лучше сначала потестировать свою раскладку в самой программе, и только потом делать установщик, а иначе придётся бесконечно удалять из системы предыдущие версии своей же раскладки.

Готовые версии моей раскладки можно скачать здесь.