В предыдущей статье были обозначены недостатки стандартной клавиатуры, из-за которых работа на ней может быть неудобна, медленна и вредна для здоровья рук.
Часть недостатков можно устранить программно, но все недостатки можно устранить только с помощью клавиатур с оптимальным расположением клавиш. Основным критерием оптимальности в контексте данной статьи будет минимизация времени на перемещение пальцев по клавиатуре.
Чем меньше перемещений пальцев по клавиатуре, тем большую скорость набора текста и вызова команд можно достичь.
Перед выбором клавиатуры с определенным набором клавиш, которые кажутся нужными, важно разобраться в программных возможностях, позволяющих сделать некоторые из них ненужными.
О том какие существуют возможности программируемых клавиатур, как можно увеличить скорость набора текста с помощью повышения физической совместимости (сокращения перемещений и нажатий), я хотел бы рассказать в данной статье.
Принцип работы компьютерной клавиатуры
Большинство не стандартных клавиатур управляются микроконтроллерами ATmega32u4, STM32F303, RP2040 и пр.
При нажатии на клавишу происходит замыкание контактов микроконтроллера, преобразуемое им в код стандартного протокола USB HID. Микроконтроллер отправляет этот код компьютеру/планшету/смартфону, а тот преобразует полученный код в команду или символ (в соответствии с выбранным алфавитным режимом).
В соответствии с протоколом USB HID, клавиатуре отведено 224 кода. Остальные устройства ввода (мышки, графические планшеты, джойстики и пр.) отправляют аналогичные коды.
Микроконтроллер способен отправлять компьютеру любые коды USB HID.
Таким образом, клавиатура может заменить любое периферийное устройство ввода.
Микроконтроллер может по-разному интерпретировать нажатия клавиш в зависимости от времени их удержания и очередности.
Так нажатия одной клавиши могут преобразовываться микроконтроллером в разные коды.
Для предопределения отправляемых микроконтроллером кодов, его необходимо должным образом запрограммировать.
Для упрощения программирования используются библиотеки для создания прошивок, такие как QMK, ZMK, TMK и пр.
Программирование клавиатур (прикладное отступление)
В статье рассматриваются возможности программирования микроконтроллеров на примере открытой библиотеки на языке Си — QMK (квантовая механическая клавиатура). Библиотека постоянно развивается и поддерживается большим сообществом.
Для использования QMK удобнее всего установить готовую среду сборки QMK (библиотека QMK + MSYS2 + приложение для прошивки микроконтроллеров).
Для программирования микроконтроллера своей клавиатуры, кроме библиотеки QMK, достаточно создать несколько файлов в библиотеке.
Перечень необходимых файлов
qmk_firmware/keyboards/моя_клавиатура/название_клавиатуры.h — обозначение матрицы клавиш.
qmk_firmware/keyboards/моя_клавиатура/config.h — сопоставление контактов микроконтроллера с обозначенной матрицой клавиш.
qmk_firmware/keyboards/моя_клавиатура/keymaps/default/keymap.c — сопоставлением матрицы клавиш с отправляемыми ими кодами.
qmk_firmware/keyboards/моя_клавиатура/rules.mk — файл с перечнем необходимых функций библиотеки QMК.
Для программирования существующих на рынке клавиатур проще скопировать соответствующую директорию qmk_firmware/keyboards/существующая_клавиатура и работать с нею.
Перед началом процесса обновления, микроконтроллер переводится в режим обновления прошивки устройства (DFU). Для этого необходимо замкнуть контакты GND
и RST
на плате контроллера (для упрощения процедуры, переход в DFU лучше сразу назначить на клавишу клавиатуры в одном из настраиваемых регистров).
Далее в компилятор вводится команда:
qmk flash -kb моя_клавиатура -km default
После выполнения команды, прошивка создается и записывается в микроконтроллер.
Сопоставление матрицы клавиш с кодами
В QMK используются свои обозначения для кодов клавиш.
Так, для кода клавиши А
используется код KC_A
, для кода клавиши 1
код KC_1
, а для кода клавиши 1
цифрового блока KC_KP_1
.
Для сопоставления физической матрицы клавиш с программной, соответствующие коды клавиш прописываются через запятую в файле keymap.c следующим образом:
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[OCHOBA] = LAYOUT_ortho_4x4(
KC_A, KC_B,
KC_1, KC_2
),
};
В результате получается такая клавиатура:
В матрице можно обозначить все возможные коды клавиш протокола USB HID.
Но важно понимать, что протокол не имеет кодов для русских букв и символов юникода. То есть нет кодов KC_Ж
, KC_П
и пр.
Кроме базовых кодов, QMK позволяет прописывать в матрице сервисные коды. Например сервисный код код S(KC_1)
будет передаваться клавиатурой как коды KC_LSFT
+ KC_1
и выдавать восклицательный знак !
.
Также в матрице прописываются коды специальных функций QMK или заранее обозначенные клавиши с определенной последовательностью кодов.
Обычно пользователи, которым достаточно функционала клавиш стандартной клавиатуры, просто меняют сопоставление клавиш в матрице. Оптимальное расположение клавиш в матрице — тема для отдельной статьи.
Но как не меняй расположение клавиш, их функциональность от этого не изменится.
Для нестандартного поведения клавиш существуют специальные функции QMK.
Многокомандные клавиши
Одна клавиша может отправлять не один код, а последовательность кодов с заранее заданной скоростью и порядком.
Так можно заменить часто-используемые командные комбинации клавиш нажатием одной клавишей.
Например можно сделать клавишу Копировать
при нажатии которой клавиатура отправляет коды KC_LCTL
+ KC_C
.
Можно заменить частые нажатия нескольких клавиш одной клавишей.
Например после нажатия клавиши запятой ,
почти всегда следует пробел
.
Одна клавиша, отправляющая коды запятой и пробела (KC_COMM
+ KC_SPC
) в два раза ускоряет скорость набора этой последовательности в тексте.
Аналогично можно поступить с точкой. После точки почти всегда набирается пробел и слово с большой буквы.
Одна клавиша с кодами KC_DOT
+ KC_SPC
+ KC_LSFT
в три раза ускоряет скорость набора этой последовательности в тексте.
Набор слов и текстов одной клавишей
Можно настроить на одну клавишу автоматический ввод часто используемых слов или словосочетаний, таких как ФИО, пароли, частые команды и пр.
Таким же образом можно набирать одной клавишей редкие символы с помощью Alt-кодов Windows.
Например, для ввода тире —
можно использовать сочетание alt
+ 0151
.
При нажатии на такую клавишу клавиатура моментально вводит Alt-код, как если бы вы нажимали обычную клавишу буквы.
Вызов сложных команд одной клавишей
Клавиатура может «работать» за вас, если вы хотите имитировать работу (актуально для удалёнки).
Можно настроить клавишу, после нажатия на которую, клавиатура беспрерывно отправляет коды движения курсора мышки, коды набираемых букв и т. п. Отключается такой «вспомогательный» режим повторным нажатием на клавишу или через заданное время.
Клавиши смены регистра
Регистр — совокупность символов, выдаваемых клавишами клавиатуры (то же самое, что раскладка или слой).
Клавиша смены регистра (клавиша-модификатор) — клавиша, нажатие на которую модифицирует коды, посылаемые другими клавишами.
Регистры можно разделить на два типа:
1. Регистры определяемые системой
____________
/ /
строчные /___________//
прописные /___________// — Shift
управляющий /___________// — Ctrl
дополнительный /___________// — Alt
комбинированный /___________/ — Ctrl + Shift
2. Регистры определяемые клавиатурой
____________
/ /
заглавный /___________// — Caps Lock
Специальный_1 /___________// — C_1
Специальный_2 /___________/ — C_2
_:_:_:_:_:__
/ : : : : : /
Специальный_31 /___________// — C_31
Специальный_32 /___________/ — C_32
Клавиши смены регистра можно разделить на три типа:
временная смена регистра;
одноразовая смена регистра;
постоянная смена регистра.
Временная смена регистра (при удержании клавиши)
Нажатая и удерживаемая клавиша модифицирует нажатия других клавиш. При отпускании клавиши, модификация прекращается.
Всем известные примеры: клавиши Shift
, Ctrl
, Alt
, Win
.
QMK позволяет менять стандартные правила модификации. Например выполнять альтернативные команды при нажатии клавиш с удерживаемым Shift
.
Так, вместо двух клавиш Backspace
и Delete
можно использовать только одну клавишу Backspace
, превратив сочетание Shift
+ Backspace
в Delete
.
Для этого в файл прошивки добавляется следующий код:
bool shift_held = false; // создаем логический индикатор нажатого Shift (не активный)
case KC_LSFT: // в случае нажатия клавиши Shift
shift_held = record->event.pressed; // активируем индикатор нажатого Shift
return true; // и выполняем обычное действие (отправляем код клавиши Shift)
break;
case KC_BSPC: // в случае нажатия клавиши BS
if (record->event.pressed & shift_held) // если индикатор нажатого Shift активен
{
unregister_code(KC_LSFT); // отпускаем Shift
tap_code(KC_DEL); // нажимаем и отпускаем DEL
return false; // не выполняем обычное действие (не нажимаем BS)
}
break;
Объединение клавиши-модификатора с обычной клавишей
Можно сделать клавишу, при удержании которой она превращается в модификатор (Shift
, Ctrl
, Alt
и пр.), а при коротком нажатии ведёт себя как обычная клавиша (А
, Б
, В
и пр.).
Пример на раскладке ЙЦУКЕН:
Удержание клавиши
А
превращается в удержаниеCtrl
,Удержание клавиши
В
превращается в удержаниеShift
,Удержание клавиши
Ы
превращается в удержаниеAlt
,Удержание клавиши
Ф
превращает клавишиО
,Л
,Д
,Ж
в курсорные клавиши←
,↓
,↑
,→
(функция Layers).
Так, я могу перемещать курсор, выделять текст, использовать командные комбинации (горячие клавиши), не отнимая пальцы с основного ряда.
Это решение полностью исключает все бесполезные перемещения пальцев на клавиши-модификаторы, значительно повышая скорость управления клавиатурой.
Одноразовая смена регистра
После нажатия и отпускания клавиши-модификатора, модифицируется только первая нажатая следом клавиша.
Известный пример: клавиша ⇧
на сенсорной телефонной клавиатуре.
Клавиша позволяет писать слова с прописными буквами используя для набора только один палец.
Постоянная смена регистра
Нажатие и опускание клавиши-модификатора приводит к постоянной модификации (смене регистра), повторное нажатие на клавишу прекращает модификацию.
Известный пример: клавиши Caps Lock
, Num Lock
Специальные регистры (слои)
Функция Layers
QMK позволяет создавать настраиваемые регистры в виде дополнительных матриц клавиш (в файле keymap.c).
Так на клавиатуре с ограниченным количеством клавиш, можно сделать отдельные регистры для цифр, командных клавиш, символов и пр.
Активация специальных регистров осуществляется с помощью обозначенных в основном регистре клавиш-модификаторов, которые также могут быть временными, постоянными или одноразовыми.
Активировать специальные регистры можно и с помощью аккордов.
QMK позволяет создать 32 специальных регистра, но на практике трудно запомнить расположение клавиш большого количества регистров без соответствующих подписей.
Для индикации выбранного регистра могут использоваться светодиоды или залипающие механизмы клавиш, превращающие, с помощью механической фиксации, временные клавиши-модификаторы в постоянные.
Так Caps Lock
условно можно заменить клавишей Shift
с залипающим механизмом или использовать виртуальное залипание клавиш (Key Lock)
Аккорды клавиш
Аккорд — одновременное нажатие нескольких клавиш, преобразуемое микроконтроллером в код команды или символа.
С помощью аккордов можно вводить недостающие буквы, символы или целые слова и числа.
Примеры:
одновременное нажатие клавиш
А
иБ
выдает буквуВ
.одновременное нажатие клавиш
П
иР
выдает символ%
.одновременное нажатие клавиш
П
иВ
выдает словопривет
.одновременное нажатие клавиш
3
и1
выдает число3,14159265358979
.
Ещё удобнее использовать данную функцию для вызова команд, не отрывая пальцев от основной позиции.
Примеры (для клавиатуры ЙЦУКЕН):
одновременное нажатие клавиш
В
иА
—Enter
одновременное нажатие клавиш
А
иО
—Tab
одновременное нажатие клавиш
Ф
иЫ
—Backspace
одновременное нажатие клавиш
Ы
иВ
—пробел
одновременное нажатие клавиш
Н
иЧ
—Home
одновременное нажатие клавиш
К
иН
—End
одновременное нажатие клавиш
Р
иУ
— активирует русский алфавитный режим и информирует об этом первыми тремя нотами гимна России посредством встроенного в клавиатуру динамика.одновременное нажатие клавиш
А
иН
— активирует английский алфавитный режим и информирует об этом первыми тремя нотами гимна США.одновременное нажатие клавиш
Ц
иФ
— переключает клавиатуру на цифровой регистр. Выход из цифрового регистра происходит по таймеру, через 2 секунды после прекращения набора цифр.
Таким образом можно вообще отказаться от командных клавиш на клавиатуре, оставив только алфавитные.
Командные аккорды очень удобны и быстро запоминаются.
Управляющая последовательность нажатий клавиш
Последовательное нажатие нескольких клавиш, преобразуемое в команду или символ.
Известный пример: Alt-команды в Microsoft Office для выбора необходимого пункта меню и командный режим Vim.
Клавишу активации режима управляющей последовательности удобно назначить на одиночное нажатие клавиши-модификатора Ctrl
.
Примеры:
последовательное нажатие клавиш
Ctrl
,2
— выдает знак второй степени²
последовательное нажатие клавиш
Ctrl
,Р
— активирует русский алфавитный режимпоследовательное нажатие клавиш
Ctrl
,A
— активирует английский алфавитный режим
Ритмическая клавиша
Нажатие одной клавиши может по разному интерпретироваться микроконтроллером в зависимости от ритма нажатия. Такие параметры нажатия клавиши, как время удержания, количество нажатий за заданный промежуток времени можно использовать для того, чтобы изменять отправляемые ею коды. Так любая клавиша может быть аналогом ключа Морзе.
время удержания
С помощью функции Auto Shift можно сделать, чтобы короткое нажатие клавиши А
отправляло строчную а
, а долгое нажатие прописную А
.
Прием позволяет минимизировать перемещения пальцев на клавишу Shift
.
Функция Space Cadet позволяет отправлять коротким нажатием левого Shift
код левой скобки (
, а коротким нажатием правого Shift
код правой скобки )
темп нажатий
Можно сделать клавишу, поведение которой зависит от количества её нажатий за короткий промежуток времени.
Например можно переделать клавишу курсора ←
так, что при однократном нажатии она работает обычным образом, при двукратном нажатии как клавиша Home
.
Можно сделать, чтобы клавиша Backspace
при однократном нажатии удаляла букву, а при двукратном — слово.
направление хода
Клавиша может посылать разные коды в зависимости от того, нажимается она или отпускается.
Можно сделать клавишу, нажатие на которую отправляет код C(KC_C)
— копирует текст, а отпускание отправляет код C(KC_V)
— вставляет текст.
комбинированные
В клавише можно использовать сразу несколько ритмических функций.
Можно заменить все клавиши скобок всего двумя клавишами.
Нажатие клавиши |
|
|
---|---|---|
одиночное | ( | ) |
двойное | « | » |
долгое | [ | ] |
одиночное с | < | > |
долгое с | { | } |
Ускорение набора текста
Функция Autocorrect позволяет производить автокоррекцию текста на уровне клавиатуры (а не на уровне операционной системы или текстовой программы).
Если вы не верно написали слово, например пивет
вместо привет
, клавиатура сама заменит его на привет
.
Самое эффективное применение функции автокоррекции — использование системы сокращения частых слов.
Так, вместо того, чтобы полностью набирать слово привет
можно набрать только пв
, а клавиатура сама допишет недостающие буквы.
На 10 клавишной клавиатуре можно сделать аналог телефонной системы предугадывания слов T9.
Так, чтобы ввести слово привет
на клавиатуре с 10 клавишами, где для каждой из клавиш определено три буквы,
необходимо нажать клавиши в последовательности Н
, Р
, И
, В
, Е
, К
. Клавиатура сама исправит слово нривек
на привет
.
Освоив систему сокращения слов, можно назначить аккорды на наиболее частые словосочетания.
Написать слово привет можно одним нажатием — аккордом клавиш П
и В
.
Так скорость набора можно увеличить в 10 раз!
Набор | Время, мс |
---|---|
слово | 1000 |
буквы | 400 |
аккорд | 100 |
Сокращения и аккорды позволяют кратно сократить перемещения пальцев.
Примечание: учитывая ограниченную память микроконтроллеров, функцию автозамены для больших словарей проще реализовать на уровне операционной системы, например с помощью ПО AutoHotKey.
Функция набора заглавных предложений. Caps Word
Во отличие от Caps Lock
при наборе в таком режиме вместо пробелов будут ставится нижние прочерки: НАПРИМЕР_ТАКИМ_ОБРАЗОМ.
Также можно сделать режим записи слов без пробелов: НапримерТакимОбразом.
Безопасность
Клавиатуру можно использовать для ввода заранее записанных в нее паролей с помощью клавиш, спрятанных в регистрах, или сложных аккордов. Так становится невозможно отследить последовательность набора пароля, даже посредством видеофиксации (в том числе тепловизора).
Функция Secure — с помощью спрятанных в регистрах клавиш или сложных аккордов можно заблокировать клавиатуру или перевести её в альтернативный режим работы.
Замена устройств ввода
Функция отправки любых HID кодов
Клавиатура может заменить любое устройства ввода.
Замена мыши
Позволяет перемещать курсор мыши с помощью клавиш. Не очень удобно, но бывает полезно.
Также функция позволяет настроить клавиши для прокрутки (скролл мыши). Благодаря возможности тонкой настройки ускорения, такие клавиши прокрутки намного удобнее обычного колеса прокрутки мыши.
Замена стенографа
В западном делопроизводстве для записи стенограмм используется стенотипия — печать текста на стенографической машине. Стенографическая машина — рекордсмен по скорости набора текста (375 слов в минуту).
Профессиональная компьютерная стенoграфическая машина стоит около 1000 $, поэтому возможность заменить стенографическую машину недорогой клавиатурой важна для стенографов-любитей.
Особенностью функции стенографии, отличающей её от упомянутой функции аккордов, является использование специального ПО для расшифровки аккордов.
Небольшой экскурс в стенотипию (отступление)
Стенографическая машина для набора буквенных сокращений была изобретена французом Шарлем Бивортом в 1904 году и называлась Стенофил.
При наборе на стенографической машине, в отличие от пишущей машины, нажимается сразу несколько клавиш, отпечатывающих за раз слово или слог. Такие слоги отпечатываются в одну строку на рулонной бумаге. После каждого аккорда происходит переход на новую строку.
Для оптимизации набора, используется только 22 клавиши, а недостающие буквы набираются комбинацией из имеющихся или заменяются на фонетически схожие буквы: буква Д заменяется буквой Т, а буква Б буквой П.
Некоторые буквенные клавиши дублируются для удобства сокращения и записи слов в одну строку.
Раньше такая запись требовала последующей расшифровки. Сегодня на цифровых стенографических машинах сокращения автоматически преобразуются компьютером в слова, в соответствии со встроенным словарем.
При наборе аккорда букв, компьютер воспринимает их в порядке расположения клавиш — слева на право.
Простой пример «Там стоит треск», набирается в три аккорда:
ТАМ СТОИТ ТРЕСК
Если попробовать набрать этот текст аккордами на обычной клавиатуре, то из-за невозможности определения последовательности букв, их порядок нарушится и получится что-то вроде: мат остит скерт.
Но есть и сложные примеры записи, требующие знания системы сокращений. Пример «Покрытый снегом дом», набирается в 5 аккордов:
ПОКР ТЕОИ СНЕВК ОМ ТВОМ
Из-за отсутствия клавиш для букв Г и Д они заменяются двумя буквами (ЕВ и ТВ).
Время подготовки опытного англоязычного стенoграфиста составляет около 3 лет.
В России машинная стенография не обрела популярности из-за большого количества падежей, букв, большой длины слов в русском языке.
Освоение указанных приемов изменяет манеру использования клавиатуры. Трудности при возврате к стандартной клавиатуре возникают не из-за иного расположения букв, а из-за отсутствия этих приемов.
Было бы интересно узнать ваши идеи использования описанных возможностей.
Автор: Леонов Илья