Pull to refresh

Русская инженерная раскладка (Ручей)

Reading time7 min
Views10K

Будучи программистом, я много печатаю как код программ, так и технические тексты. Мне постоянно приходится переключаться между раскладками, часть текста набирать на английском языке, а часть на русском. И в принципе это нормально, если бы не спецсимволы.

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

Решено было избавиться от этой проблемы. Собственно разработать саму раскладку (по сути две) и сформировать установочные пакеты для операционных систем.

Я постараюсь описать с помощью каких средств создаются раскладки, свои размышления по их разработке и с какими проблемами приходится сталкиваться. Статья имеет практический уклон, а не научный. Здесь не будет статистики по подсчёту часто встречающихся символов, словосочетаний и чередованию рук.

Кому не интересен сам процесс создания, но есть желание попробовать:
- для Windows 7 и выше: win-ruchey-1.2.0.zip
- для Debian / Ubuntu: xkb-ruchey_1.2.0_all.deb

Разработка раскладки

Начальные требования к раскладкам:

  • удобство набора технических текстов и кодов программ;

  • полный набор спецсимволов;

  • одинаковое расположение спецсимволов для раскладок;

  • переключаться должны именно раскладки, а не языки ввода.

В разработке, лёгких для восприятия раскладок есть ограничения. Первое - это число клавиш на клавиатуре, а второе - уже нанесённые символы на клавиши. Существуют раскладки, позволяющие заметно ускорить печать слепым методом, использовать больше символов, но к сожалению производители выпускают клавиатуры только с QWERTY и ЙЦУКЕН раскладками (про «кастомные» поговорим отдельно).

Удобство набора также зависит от языка программирования, но всё же в первую очередь нужно обратить внимание на «C-подобные» языки и такие, как JSP, HTML, XML, JSON т.к. они имеют большое количество спецсимволов.

Отсюда еще требования:

  • раскладка не должна решать проблему скорости набора, т.е. все буквы остаются на своих местах. В конце концов, Дворак потратил 20 лет, а в результате мы видим QWERTY на клавиатурах;

  • спецсимволам также желательно находиться на своих местах, но при этом должен быть обеспечен удобный набор часто встречаемых спецсимволов в коде;

  • перенос спецсимволов должен компенсироваться их лёгким запоминанием;

  • не должен страдать опыт набора методом «слепой печати».

Разумеется, чтобы вместить все спецсимволы в Русской раскладке, необходимо использовать третий уровень. Первый уровень идёт без модификаторов, второй - с нажатым Shift, третий - с нажатым AltGr (он же правый Atl, он же левый Ctrl + левый Alt).

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

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

Формальный, автоматизированный подход (подсчёт часто встречающихся символов, включение во внимание максимального чередования рук и т.д.) не привёл к вменяемому результату, а только к каше в голове и на клавиатуре. Для выполнения требования, чтобы спецсимволы находились в основном на своих местах нужно было вводить такое число ограничений, что решение всё равно в итоге выглядело неформальным.

Пришлось подходить неформально и подбирать «удобные» варианты. За основу решено взять Русскую раскладку, составленные требования и перебор возможных вариантов (по сути их не так много). А позже применить замечания от коллег по работе и по духу (в надежде, что они будут).

Подробный порядок изменения расположения символов

1) Буквы, цифры, точка, запятая, оставлены на своём месте.

2) В цифровом ряду на третий уровень вынесены «@» «#» «$» «%» «^» «&», к тому же эти символы обычно не парные и после их ввода идёт некая задержка. Знак «~» переехал на третий уровень цифры «8», удобство набора комбинации «~/» оказалось вполне сносным.

3) На втором уровне цифрового ряда одинарная кавычка заменила двойную, а двойная перенесена на клавишу с цифрой 5. Это позволило довольно сносно набирать строки в «С-подобных» языках.

4) Косая черта «/» была размещена на первом уровне, т.к. встречается в дробях, путях, закрывающихся тэгах. Обратная косая черта «\» вынесена на второй уровень, а прямая «|» - на третий.

5) Фигурные скобки оставлены на своих клавишах, но перенесены на третий уровень. Квадратные скобки перенесены на третий уровень клавиш «Ж» и «Э». Знаки больше-меньше или угловые скобки, оставлены на своих клавишах, но перенесены на третий уровень.

6) При наборе фигурных и квадратных скобок, а так же символов меньше и больше, во время «слепой печати», оказалось удобным переносить кисть так, чтобы маркером являлась не клавиша «О», а правый Alt (AltGr). Т.е. кисть смещается, как если бы была необходимость воспользоваться стрелками. По сути так и есть, ведь при наборе сначала печатается пара скобок, а потом их содержимое. Но чтобы перейти в место ввода содержимого нужно нажать «←».

7) На третий уровень цифр «9» и «0» добавлены символы « и », на клавишу «Ё» добавлен знак параграфа «§», а на цифру «1» знак рубля «₽» (в Windows символ недоступен т. к. для раскладки на основе «Русской» отсутствует поддержка юникода).

8) Обратный апостроф (косая кавычка) добавлен на третий уровень клавиши с символом точки, что, как и в случае со знаком больше/меньше, набирается достаточно легко.

В итоге, после доработок, при полном наборе спецсимволов, как для Русской раскладки, так и для Английской, необходимо запомнить расположение всего 6 символов! Т.е. на клавишах отсутствуют подсказки только для символов: «'», «"», «`», «~», «[»,«]». Причём они часто набираются, так что запомнить их расположение легче лёгкого. Опционально добавлены символы §, ₽, «, », которые при необходимости также легко запоминаются.

Результат оказался приемлемый. Расположение спецсимволов быстро запомнилось, а набор через AltGr оказался вполне сносным, даже для кода с бесконечными «{», «}». Я даже отказался от идеи заказать наклейки со спецсимволами на клавиши: настолько это просто.

Раскладки решено назвать «Ручей».

«Русская (инженерная, кириллица)»
«Русская (инженерная, кириллица)»
«Русская (инженерная, латиница)»
«Русская (инженерная, латиница)»

Разработка и создание установочных пакетов для Windows

Для создания используется программа «Microsoft Keyboard Layout Creator (MSKLC)», загружается «Русская» раскладка и вносятся изменения, после чего создаётся установочный пакет.

Просмотр раскладки в MSKLC с зажатым AltGr
Просмотр раскладки в MSKLC с зажатым AltGr

Далее готовый пакет просто устанавливается в систему. Для Русского языка выбираются нужные раскладки, а Английский язык удаляется. После настраиваются клавиши переключения и приоритет.

Всё просто, но ложка дёгтя присутствует. В Windows могут появляться штатные раскладки. Проблема общая, мы просто с ней не сталкивались. Например, у Американцев появляется Британская раскладка. Решение проблемы - перейти в "Настройки языка" - "Административные параметры" и применить раскладки для "Экран приветствия и учётных записей". А также в настройках реестра для каталога "Компьютер\HKEY_USERS.DEFAULT\Keyboard Layout\Preload" выключить наследование и указать для всех права только на чтение.

Также знак «₽» отсутствует в раскладке для Windows т.к. является символом юникода, а в Windows раскладка базируется на CP-1251.

Разработка и создание установочных пакетов для Linux

И тут самая большая загвоздка (кто бы мог подумать) - нет возможности определить свои раскладки в каталоге «/etc». А если и есть, то Gnome напрочь отказывается их от туда считывать. Т.е. можно поменять только системные файлы в каталоге «/usr/share/X11/xkb». И они конечно затрутся при очередном системном обновлении. Как-то не в духе «базар».

Но всё же, вот как можно добавить свою раскладку в Linux:

  1. Описать раскладку в файле «/usr/share/X11/xkb/symbols/ru». Файл имеет достаточно простой синтаксис и множество примеров. Главное знать, что есть «VoidSymbol» и «NoSymbol». Первый означает, что ввод будет игнорироваться, а второй - что ввод определяется раскладкой, от которой мы наследуемся.

  2. Зарегистрировать раскладку в файлах «base.xml» и «evdev.xml» каталога «/usr/share/X11/xkb/rules/» (это для современных приложений).

  3. Зарегистрировать раскладку в файлах «base.lst» и «evdev.lst» каталога «/usr/share/X11/xkb/rules/» (это для совместимости).

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

Для применения раскладок в консоли необходимо изменить файл «/etc/default/keyboard»:

XKBMODEL="pc104"
XKBLAYOUT="ru,ru"
XKBVARIANT="ruchey_latin,ruchey_cyrillic"
XKBOPTIONS="grp:caps_toggle,lv3:ralt_switch,grp_led:scroll"
BACKSPACE="guess"

И выполнить команду: dpkg-reconfigure -phigh console-setup (для Debian / Ubuntu) или update-initramfs -u (для остальных).

Для применения раскладок в initramfs необходимо изменить файл «/etc/initramfs-tools/initramfs.conf»:

KEYMAP=y

И выполнить команду: update-initramfs -u

Повторюсь, что самая большая проблема в том, что при очередном системном обновлении xkb* все настройки будут перезаписаны, и есть только один правильный путь — это добавить свою раскладку в исходный код проекта «freedesktop.org», репозиторий «xkeyboard-config».

Для набора раскладок «Ручей» разработан пакет с хуком, который автоматически патчит файлы xkb после установки обновлений Debian / Ubuntu.

Как итог

С ограничениями, но задача выполнима. Раскладка получилась, сделан установочный пакет для Windows и Linux (Debian / Ubuntu).

Хочется отметить, что на момент написания статьи я во всю пользуюсь этой раскладкой как в Windows, так и в Linux, пишу код на C#, JS, Java, Bash, работаю по RDP.

Огромная просьба читателей присоединиться и протестировать раскладку. Проще простого установить два пакета в Windows и как только надоело удалить их. Если раскладка понравилась и есть возможность, то попробуйте реализовать для Mac OS. Исходный код свободный и распространяется без лицензии (The Unlicense).

Недостатки, фантомные нажатия, дискомфорт, описывайте в комментариях или в issue репозитория. Позже я постараюсь сделать pull request в основной репозиторий Freedesktop.

Репозиторий на GitHub, где ведётся разработка раскладки: https://github.com/A-Projects/Ruchey

Корректировка

  • Выпущена версия 1.2, по сути это окончательная редакция с принятыми доработками от коллег;

  • Раскладка добавлена в основной репозиторий Freedesktop и вскоре появится во всех дистрибутивах «из коробки».

Tags:
Hubs:
Total votes 13: ↑11 and ↓2+14
Comments21

Articles