Будучи программистом, я много печатаю как код программ, так и технические тексты. Мне постоянно приходится переключаться между раскладками, часть текста набирать на английском языке, а часть на русском. И в принципе это нормально, если бы не спецсимволы.
По какому-то странному стечению обстоятельств в русской раскладке отсутствуют даже такие символы, как больше/меньше или фигурные скобки (хорошо, что хоть плюс с минусом не забыли). И приходится переключаться для их набора.
Решено было избавиться от этой проблемы. Собственно разработать саму раскладку (по сути две) и сформировать установочные пакеты для операционных систем.
Я постараюсь описать с помощью каких средств создаются раскладки, свои размышления по их разработке и с какими проблемами приходится сталкиваться. Статья имеет практический уклон, а не научный. Здесь не будет статистики по подсчёту часто встречающихся символов, словосочетаний и чередованию рук.
Кому не интересен сам процесс создания, но есть желание попробовать:
- для Windows 7 и выше: win-ruchey-1.1.0.zip
- для Debian / Ubuntu: xkb-ruchey_1.1.0_all.deb
Разработка раскладки
Начальные требования к раскладкам:
удобство набора технических текстов и кодов программ;
полный набор спецсимволов;
одинаковое расположение спецсимволов для раскладок;
переключаться должны именно раскладки, а не языки ввода.
В разработке, лёгких для восприятия раскладок есть ограничения. Первое - это число клавиш, а второе - уже нанесённые символы на клавиши. Существуют раскладки, позволяющие заметно ускорить печать слепым методом, использовать больше символов, но к сожалению производители выпускают клавиатуры только с QWERTY и ЙЦУКЕН раскладками (про «кастомные» поговорим отдельно).
Удобство набора также зависит от языка программирования, но всё же в первую очередь нужно обратить внимание на «C-подобные» языки и такие, как JSP, HTML, XML, JSON т.к. они имеют большое количество спецсимволов.
Отсюда еще требования:
раскладка не должна решать проблему скорости набора, т.е. все буквы остаются на своих местах. В конце концов, Дворак потратил 20 лет, а в результате мы видим QWERTY на клавиатурах;
спецсимволам также желательно находиться на своих местах, но при этом должен быть обеспечен удобный набор часто встречаемых спецсимволов в коде;
перенос спецсимволов должен компенсироваться их лёгким запоминанием;
не должен страдать опыт набора методом «слепой печати».
Разумеется, чтобы вместить все спецсимволы в Русской раскладке, необходимо использовать третий уровень. Первый уровень идёт без модификаторов, второй - с нажатым Shift, третий - с нажатым AltGr (он же правый Atl, он же левый Ctrl + левый Alt).
Самый простой вариант - это вынос цифр в третий уровень и размещение на первом самых встречающихся спецсимволов. Правда он приводит к тому, что набор большого диапазона цифр (например ip-адреса) превращается в ад, а большой палец очень часто находится в подвёрнутом состоянии и начинает болеть.
Вот тут-то кажется и подошла бы «кастомная» клавиатура с дополнительным рядом под цифры, но, как оказалось, дополнительного ряда символов нет ни у кого: только фан и светодиоды, а изготавливать самому, да еще и контроллер выдумывать в планы не входит. Отмечу, что и драйвер под Windows, и описание в Linux, и раскладку придётся делать всё равно.
Формальный, автоматизированный подход (подсчёт часто встречающихся символов, включение во внимание максимального чередования рук и т.д.) не привёл к вменяемому результату, а только к каше в голове и на клавиатуре. Для выполнения требования, чтобы спецсимволы находились в основном на своих местах нужно было вводить такое число ограничений, что решение всё равно в итоге выглядело неформальным.
Пришлось подходить неформально и подбирать «удобные» варианты. За основу решено взять Русскую раскладку, составленные требования и перебор возможных вариантов (по сути их не так много). А позже применить замечания от коллег по работе и по духу (в надежде, что они будут).
Подробный порядок изменения расположения символов
1) Буквы, цифры, точка, запятая оставлены на своём месте.
2) В цифровом ряду на третий уровень вынесены «@» «#» «$» «%» «^» «&», к тому же эти символы обычно не парные и после их ввода идёт некая задержка. Редко используемый «№» переехал на третий уровень цифры «1». Знак «~» переехал на третий уровень цифры «8», удобство набора комбинации «~/» оказалось вполне сносным.
3) Косая черта «/» была размещена на первом уровне, т.к. встречается в дробях, путях, закрывающихся тэгах. Обратная косая черта «\» вынесена на второй уровень, а прямая «|» - на третий.
4) При наборе фигурных и квадратных скобок, а так же символов меньше и больше, во время «слепой печати», оказалось удобным переносить кисть так, чтобы маркером являлась не клавиша «О», а правый Alt (AltGr). Т.е. кисть смещается, как если бы была необходимость воспользоваться стрелками. По сути так и есть, ведь при наборе сначала печатается пара скобок, а потом их содержимое. Но чтобы перейти в место ввода содержимого нужно нажать «←».
5) Фигурные скобки оставлены на своих клавишах, но перенесены на третий уровень. Квадратные скобки перенесены на третий уровень клавиш «Ж» и «Э». Знаки больше-меньше или угловые скобки, оставлены на своих клавишах, но перенесены на третий уровень.
6) На второй уровень цифрового ряда вынесены «`», «'», «"», «;» Причём двойные кавычки перенесены с безымянного пальца на средний, а точка запятой перенесена с среднего на указательный для компенсации скорости набора кода для «С-подобных» языках.
7) На третий уровень цифр «9» и «0» добавлены символы « и », а на клавишу «Ё» добавлен знак рубля «₽» (в Windows символ недоступен т. к. для раскладки на основе «Русской» отсутствует поддержка юникода).
В итоге получилось, что на клавишах будут отсутствовать подсказки только для символов: «№», «`», «'», «"», «;», «~», «[»,«]» (опционально ₽, «, »). Всего 8 символов! Причём они часто встречаются, так что запомнить их расположение легче лёгкого.
Результатом я остался доволен. Расположение спецсимволов быстро запомнилось, а набор через AltGr оказался вполне сносным, даже для кода с бесконечными «{», «}». Я даже отказался от идеи заказать наклейки со спецсимволами на клавиши: настолько это просто.
Раскладки решено назвать «Ручей».
Разработка и создание установочных пакетов для Windows
Для создания используется программа «Microsoft Keyboard Layout Creator (MSKLC)», загружается «Русская» раскладка и вносятся изменения, после чего создаётся установочный пакет.
Далее готовый пакет просто устанавливается в систему. Для Русского языка выбираются нужные раскладки, а Английский язык удаляется. После настраиваются клавиши переключения и приоритет.
Всё просто, но ложка дёгтя присутствует. В Windows могут появляться штатные раскладки. Проблема общая, мы просто с ней не сталкивались. Например, у Американцев появляется Британская раскладка. Решение проблемы - перейти в "Настройки языка" - "Административные параметры" и применить раскладки для "Экран приветствия и учётных записей". А также в настройках реестра для каталога "Компьютер\HKEY_USERS.DEFAULT\Keyboard Layout\Preload" выключить наследование и указать для всех права только на чтение.
Также знак «₽» отсутствует в раскладке для Windows т.к. является символом юникода, а в Windows раскладка базируется на CP-1251.
Разработка и создание установочных пакетов для Linux
И тут самая большая загвоздка (кто бы мог подумать) - нет возможности определить свои раскладки в каталоге «/etc». А если и есть, то Gnome напрочь отказывается их от туда считывать. Т.е. можно поменять только системные файлы в каталоге «/usr/share/X11/xkb». И они конечно затрутся при очередном системном обновлении. Как-то не в духе «базар».
Но всё же, вот как можно добавить свою раскладку в Linux:
Описать раскладку в файле «/usr/share/X11/xkb/symbols/ru». Файл имеет достаточно простой синтаксис и множество примеров. Главное знать, что есть «VoidSymbol» и «NoSymbol». Первый означает, что ввод будет игнорироваться, а второй - что ввод определяется раскладкой, от которой мы наследуемся.
Зарегистрировать раскладку в файлах «base.xml» и «evdev.xml» каталога «/usr/share/X11/xkb/rules/» (это для современных приложений).
Зарегистрировать раскладку в файлах «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, Bash, работаю по RDP.
Огромная просьба читателей присоединиться и протестировать раскладку. Проще простого установить два пакета в Windows и как только надоело удалить их. Если раскладка понравилась и есть возможность, то попробуйте реализовать для Mac OS. Исходный код свободный и распространяется без лицензии (The Unlicense).
Недостатки, фантомные нажатия, дискомфорт, описывайте в комментариях или в issue репозитория. Позже я постараюсь сделать pull request в основной репозиторий Freedesktop.
Репозиторий на GitHub, где ведётся разработка раскладки: https://github.com/A-Projects/Ruchey
Комментарии (20)
ri1wing
25.01.2022 13:34Лично я просто повесил переключение раскладки на правый ctrl.
Один раз нажать переключение раскладки мне кажется удобнее, чем зажимать alt gr для каждого спец.символа.
Earthsea
25.01.2022 14:03Фатальный недостаток всех (или большинства, не знаю) раскладок - то что точка и запятая в русской раскладке находятся на одной клавише, второй аспект - в английской и русской раскладке точка и запятая находятся в разных местах. Ну и можно притянуть за уши остальные знаки препинания, они тоже в разных местах.
Angeld
25.01.2022 14:31+1в Руской(машинопись) точка и запятая на разных клавишах и без шифта
с тем же что в английской в другом месте сложно что-то сделать, букв в русском языке больше, на свободных клавишах по любому что-то будет. А так как это клавиши из основных рядов логично туда размешать самое использумое.
6ap Автор
25.01.2022 16:32Самое большое ограничение - это число клавиш. Вынос цифр в третий уровень и размещение на первом самых встречающихся спецсимволов был просто фантастикой. Нажатия «Shift» нужны были только для редко встречающихся спецсимволов. Даже для буквы «Ё» нашлось место (как в машинопись). Но автоматически набор цифр превращался в АД.
Я бегло пересмотрел интернет, в поисках производителя кастомных раскладок с дополнительным рядом клавиш, чтобы на него вынести цифры, но ничего не нашёл.
fk0
25.01.2022 16:01По какому-то странному стечению обстоятельств в русской раскладке отсутствуют даже такие символы, как больше/меньше или фигурные скобки (хорошо, что хоть плюс с минусом не забыли). И приходиться переключаться для их набора.
Никогда не задумывался и не замечал. Даже специально проверил. Был неприятно удивлён. Всю жизнь пользуюсь ЯВЕРТЫ-раскладкой, но там оказывается такая же проблема!
С одной стороны это говорит о том, раз никогда не замечал, что такая возможность и не особенно нужна.
С другой стороны, очевидно, это объясняет отсутствие языков программирования основанных на семантике русского языка. Действительно, с программным кодом в раскладке без скобок и ряда прочих символов работать неудобно.
6ap Автор
25.01.2022 16:46С другой стороны, очевидно, это объясняет отсутствие языков программирования основанных на семантике русского языка. Действительно, с программным кодом в раскладке без скобок и ряда прочих символов работать неудобно.
Эта раскладка, которую удалось сделать, решает данную проблему. Я набираю код в основном на C# / C++ и не испытываю проблем, но ради интереса набрал код на абстрактном языке.
#импорт com.habr.сеть; Строка $сетевойШлюз = "192.168.0.254"; проверкаСети() { если($сетевойШлюз.первыеСимволы("192.") ) { Подключение $подключение; $подключение.добавитьАдрес($сетевойШлюз); Целое $результат = $подключение.выполнить(); если($результат != 0) { отладка << "ошибка подключения"; } } } проверкаСети();
Набрал, что шутя! А ведь обычно IDE ещё помогает.
KarmicDude
26.01.2022 00:03+1Есть несколько раскладок, которые удобней дефолтного йцукен. Основные это Диктор и Зубачев. В свое время владел и той и той. Но Диктор показался удобнее. Достиг на нем достаточно хорошего перформанса в 800 зн/мин полноценным 10-пальцевым слепым методом набора. Есть огромное множество разных раскладок кириллицы от сообщества, модификаций существующих и разработок под свои типы клавиатур. За годы скоростной печати в качестве хобби пришел к определенным выводам по удобству раскладок. На базе раскладки Диктор реализовал свою раскладку, которая больше подходит для набора "динамикой" и улучшил набор для левой руки. Ознакомиться можно https://github.com/karmicdude/alter
По ощущениям при наборе максимально близка к английскому двораку из-за высокого процента чередования и баланса рук и пальцев в наборе.
Ознакомиться с достаточно детальными и весьма научными расчетами по раскладкам, в которых присутствуют вышеупомянутые Диктор и Зубачев можно в этом посту хорошо известного в кругах развивающих скорость печати Дяди Паши.
Но владея 7 или 8 разными раскладками (хобби было такое, не судите :)), могу сказать, что не нужно это все. При небольшом желании дефолтные йцукен и qwerty более чем достаточны для вполне уверенного набора на средней скорости около 400 зн/мин, чего просто за глаза для любой работы, если ты не стенографист. В общем мог бы про это большой пост накатать, да вряд ли кому такие дебри нужны. Но перед сменой раскладок, особенно на кастомные, которых нет в системах из коробки, очень бы советовал 10 раз подумать, потому что это того на самом деле не стоит.
А с возможностью реализации достаточного функцианала, в чем то способного в юзерспейсе заменить возможности программируемой QMK клавиатуры со слоями, модификаторами и пр., может помочь kmonad. Сам не тестировал, но выглядит вкусно.
6ap Автор
26.01.2022 00:34800 знаков это что-то недостижимое! В обычном ритме, тоже слепым методом, я набираю около 200 зн/мин.
Вообще раскладка Ручей не про скорость набора. Она решает проблему отсутствия спецсимволов в русской раскладе, при этом достаточно ювелирно. Необходимо запомнить расположение всего 8 символов, пару скобок и клавишу AltGr.
Я попробовал разные раскладки (Вашу увидел впервые, любопытно), несколько сделал сам и понял, что проблема "отката" весьма существенная. Через несколько недель невозможно нормально набирать текст на других компьютерах. Поэтому тут этот вопрос тоже учтён. На данный момент я не ощущаю трудности набрать текст на другом ПК, хотя на работе и хобби много разнообразных ОС.
KarmicDude
26.01.2022 00:49+1если вас не смущает возможность таскать с собой компактную клавиатуру, то можете присмотреться к разным вариантам типа Jorne, Corne. Более полноценные в плане размера - Moonlander. Очень многие именно так и делают. Например Moonlander легко складывается в чехол. Сами раскладки и слои можете вшить прошивкой. Если не знакомы с возмонжостями QMK по части модификаторов, слоев и пр. - рекомендую ознакомиться. Там очень много крутых фишек, помимо возможности создания огромного количества слоев, которые могут активироваться с разной логикой и разными модификаторами. Возможно именно это вам и понравится и подойдет лучше, чем делать кастомные раскладки и лишаться возможности использования их на других системах без установки. Все будет внутри клавиатуры, при подключении к любой системе ничего в самой системе менять не придется. Достаточно наличия дефолтный йцукен и qwerty.
Проблема же "отката" очень быстро проходит, если начать очень часто переключаться между раскладками, это даже можно натренировать. Сначала это кажется сложным и невозможным, но потом даже в рамках одного языка можно на лету менять разные раскладки, сохраняя достаточную безошибочность. Нейронные связи укрепляются от большого количества повторений. По началу придется хендлить все головой, задумываясь что нажимаешь, с каждым разом время на вспоминание, как в текущей раскладке что-то расположено уходит все меньше, дальше это переходит в полностью автоматический навык и эти слои и раскладки меняются в голове без твоего участия и задумываться о том, что в твоей модификации переставлены знаки и символы не приходится. Можно буквально менять через слово раскладки и ошибаться не будешь. В свое время я проводил такой эксперимент и уверено менял раскладки в рамках одного предложения, сохраняя скорость около 300 зн/мин. Но за ненадобностью отказался до совершенствования этого навыка. Я знаю человека, который переключает разные раскладки в пределах одного языка, просто по окнам. Типа в чатах набирает на йцукен, в соседнем окне на дикторе. И делает это практически с одинаковой высокой скоростью, хорошей безошибочностью. Просто он так делал часто и у него этот навык хорошо развился.
d-rus
26.01.2022 00:35Привет. Где взять для вин11?
6ap Автор
26.01.2022 00:43Вот прямо под Win 11 я не тестировал (только Win 10, Win 7, Win 2012R2). Но, насколько мне известно, в этой части ничего особо не менялось со времён Win 7. На выходных проверю, заодно потанцую с VirtualBox и Win 11.
Сам репозиторий на GitHub, там же и релизы https://github.com/A-Projects/Ruchey/releases
d-rus
26.01.2022 22:42И для KUBUNTU нужно, хелп
6ap Автор
27.01.2022 16:06В релиз добавлен xkb-ruchey_1.1.0_all.deb пакет. Проверен на Debian, Kubuntu, Neon. Механизм доработан и после системных обновлений раскладки не слетят.
После установки пакета выполнить перезагрузку. В "Параметрах системы" указать клавишу для 3-го уровня и добавить раскладки.
Если раскладки необходимы в консоли, то изменить файл "/etc/default/keyboard", как указано в статье, и выполнить
dpkg-reconfigure -phigh console-setup
.
palyaros02
27.01.2022 16:06В русской раскладке для винды давным давно есть ₽. Правый Alt + 8.
6ap Автор
27.01.2022 16:14Я так понимаю, что формирование раскладок разработчиками Windows не выполняется с помощью программы MSKLC. Если сформировать раскладку на основе «Русской» с помощью программы MSKLC (это официальная и похоже единственная программа для таких задач) и добавить туда знак ₽ или U+20BD, то начинают происходить странные вещи, например перестаёт работает Backspace.
amarao
Долго читал пост пока не обнаружил, что это Windows. :/
akostrikov
Всё нормально, надо читать ещё дальше до "Разработка и создание установочных пакетов для Linux".
amarao
А, увидел. Что-то вы мимо системной конфигурации полезли. Посмотрите на пакет keyboard-configuration. Там же есть ценный файл
/usr/share/doc/keyboard-configuration/README.Debian
Дистрибутив у вас не указан, предполагаю ubuntu/debian. Возможно, у арчово-федоровых по другому.
6ap Автор
Файл ценный. Из него я и взял где менять раскладку для консоли: "/etc/default/keyboard". Вообще для меня было открытие, что за раскладки в консоли отвечает пакет из иксов.
Каюсь, в статье я не очень подробно разобрал механизмы формирования раскладок в Linux, но постарался указать на конкретные точки, где надо смотреть.
Проверены дистрибутивы базирующиеся на Debian, но это стандарт и должно работать везде. В конечном счёте, инсталятор это лишь костыль. Я попробую сформировать pull request в основной репозиторий freedesktop.org. Если не откажут, то раскладка автоматически будет доступна в любом Linux.
Для Debian есть ещё один файл "/usr/share/console-setup/KeyboardNames.pl", о котором я умолчал. Он отвечает за отображение раскладок в конфигураторе "dpkg-reconfigure keyboard-configuration" и тут уже патчи слать в debian.org
Есть еще несколько команд:
amarao
Да, ещё и
localectl
. Вообще, у дебиана - это не набор костылей, а система конфигурирования. В частности, вы можете управлять конфигурацией без использования диалогов, помечать конфигурационные файлы как diversion (чтобы система управления не трогала их при обновлении пакетов) и т.д.Это весьма разумная система и не надо её пытаться взламывать "снизу", если можно использовать по назначению.