Возможности современного клавиатуростроения (программные) +34


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

Часть недостатков можно устранить программно, но все недостатки можно устранить только с помощью клавиатур с оптимальным расположением клавиш. Основным критерием оптимальности в контексте данной статьи будет минимизация времени на перемещение пальцев по клавиатуре.

Чем меньше перемещений пальцев по клавиатуре, тем большую скорость набора текста и вызова команд можно достичь.

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

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

Принцип работы компьютерной клавиатуры

Большинство не стандартных клавиатур управляются микроконтроллерами ATmega32u4, STM32F303, RP2040 и пр.

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

В соответствии с протоколом USB HID, клавиатуре отведено 224 кода. Остальные устройства ввода (мышки, графические планшеты, джойстики и пр.) отправляют аналогичные коды.

Микроконтроллер способен отправлять компьютеру любые коды USB HID.

Таким образом, клавиатура может заменить любое периферийное устройство ввода.

Микроконтроллер может по-разному интерпретировать нажатия клавиш в зависимости от времени их удержания и очередности.

Так нажатия одной клавиши могут преобразовываться микроконтроллером в разные коды.

Для предопределения отправляемых микроконтроллером кодов, его необходимо должным образом запрограммировать.

Для упрощения программирования используются библиотеки для создания прошивок, такие как QMK, ZMK, TMK и пр.

Программирование клавиатур (прикладное отступление)

В статье рассматриваются возможности программирования микроконтроллеров на примере открытой библиотеки на языке Си — QMK (квантовая механическая клавиатура). Библиотека постоянно развивается и поддерживается большим сообществом.

Для использования QMK удобнее всего установить готовую среду сборки QMK (библиотека QMK + MSYS2 + приложение для прошивки микроконтроллеров).

Для программирования микроконтроллера своей клавиатуры, кроме библиотеки QMK, достаточно создать несколько файлов в библиотеке.

Перечень необходимых файлов
  1. qmk_firmware/keyboards/моя_клавиатура/название_клавиатуры.h — обозначение матрицы клавиш.

  2. qmk_firmware/keyboards/моя_клавиатура/config.h — сопоставление контактов микроконтроллера с обозначенной матрицой клавиш.

  3. qmk_firmware/keyboards/моя_клавиатура/keymaps/default/keymap.c — сопоставлением матрицы клавиш с отправляемыми ими кодами.

  4. 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 в три раза ускоряет скорость набора этой последовательности в тексте.

Набор слов и текстов одной клавишей

Функция Send String

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

Таким же образом можно набирать одной клавишей редкие символы с помощью Alt-кодов Windows.

Например, для ввода тире можно использовать сочетание alt + 0151.

При нажатии на такую клавишу клавиатура моментально вводит Alt-код, как если бы вы нажимали обычную клавишу буквы.

Вызов сложных команд одной клавишей

Функция Macros

Клавиатура может «работать» за вас, если вы хотите имитировать работу (актуально для удалёнки).

Можно настроить клавишу, после нажатия на которую, клавиатура беспрерывно отправляет коды движения курсора мышки, коды набираемых букв и т. п. Отключается такой «вспомогательный» режим повторным нажатием на клавишу или через заданное время.

Клавиши смены регистра

Регистр — совокупность символов, выдаваемых клавишами клавиатуры (то же самое, что раскладка или слой).

Клавиша смены регистра (клавиша-модификатор) — клавиша, нажатие на которую модифицирует коды, посылаемые другими клавишами.

Регистры можно разделить на два типа:

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;

Объединение клавиши-модификатора с обычной клавишей

Функция Mod-Tapи

Можно сделать клавишу, при удержании которой она превращается в модификатор (Shift, Ctrl, Alt и пр.), а при коротком нажатии ведёт себя как обычная клавиша (А, Б, В и пр.).

Пример на раскладке ЙЦУКЕН:

  • Удержание клавиши А превращается в удержание Ctrl,

  • Удержание клавиши В превращается в удержание Shift,

  • Удержание клавиши Ы превращается в удержание Alt,

  • Удержание клавиши Ф превращает клавиши О, Л, Д, Ж в курсорные клавиши , , , (функция Layers).

Так, я могу перемещать курсор, выделять текст, использовать командные комбинации (горячие клавиши), не отнимая пальцы с основного ряда.

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

Одноразовая смена регистра

Функция One Shot Keys

После нажатия и отпускания клавиши-модификатора, модифицируется только первая нажатая следом клавиша.

Известный пример: клавиша на сенсорной телефонной клавиатуре.

Клавиша позволяет писать слова с прописными буквами используя для набора только один палец.

Постоянная смена регистра

Нажатие и опускание клавиши-модификатора приводит к постоянной модификации (смене регистра), повторное нажатие на клавишу прекращает модификацию.
Известный пример: клавиши Caps Lock, Num Lock

Специальные регистры (слои)

Функция Layers
QMK позволяет создавать настраиваемые регистры в виде дополнительных матриц клавиш (в файле keymap.c).

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

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

Активировать специальные регистры можно и с помощью аккордов.

Переход на цифровой регистр с помощью аккорда клавиш Ц и Ф.
Переход на цифровой регистр с помощью аккорда клавиш Ц и Ф.

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

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

Так Caps Lock условно можно заменить клавишей Shift с залипающим механизмом или использовать виртуальное залипание клавиш (Key Lock)

Аккорды клавиш

Функция Combos

Аккорд — одновременное нажатие нескольких клавиш, преобразуемое микроконтроллером в код команды или символа.

С помощью аккордов можно вводить недостающие буквы, символы или целые слова и числа.
Примеры:

  • одновременное нажатие клавиш А и Б выдает букву В.

  • одновременное нажатие клавиш П и Р выдает символ %.

  • одновременное нажатие клавиш П и В выдает слово привет.

  • одновременное нажатие клавиш 3 и 1 выдает число 3,14159265358979.

Ещё удобнее использовать данную функцию для вызова команд, не отрывая пальцев от основной позиции.

Примеры (для клавиатуры ЙЦУКЕН):

  • одновременное нажатие клавиш В и АEnter

  • одновременное нажатие клавиш А и ОTab

  • одновременное нажатие клавиш Ф и ЫBackspace

  • одновременное нажатие клавиш Ы и Впробел

  • одновременное нажатие клавиш Н и ЧHome

  • одновременное нажатие клавиш К и НEnd

  • одновременное нажатие клавиш Р и У — активирует русский алфавитный режим и информирует об этом первыми тремя нотами гимна России посредством встроенного в клавиатуру динамика.

  • одновременное нажатие клавиш А и Н — активирует английский алфавитный режим и информирует об этом первыми тремя нотами гимна США.

  • одновременное нажатие клавиш Ц и Ф — переключает клавиатуру на цифровой регистр. Выход из цифрового регистра происходит по таймеру, через 2 секунды после прекращения набора цифр.

Таким образом можно вообще отказаться от командных клавиш на клавиатуре, оставив только алфавитные.

Командные аккорды очень удобны и быстро запоминаются.

Управляющая последовательность нажатий клавиш

Функция The Leader Key

Последовательное нажатие нескольких клавиш, преобразуемое в команду или символ.

Известный пример: Alt-команды в Microsoft Office для выбора необходимого пункта меню и командный режим Vim.

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

  • последовательное нажатие клавиш Ctrl, 2 — выдает знак второй степени ²

  • последовательное нажатие клавиш Ctrl, Р — активирует русский алфавитный режим

  • последовательное нажатие клавиш Ctrl, A — активирует английский алфавитный режим

Ритмическая клавиша

функция Tap Dance

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

время удержания

С помощью функции Auto Shift можно сделать, чтобы короткое нажатие клавиши А отправляло строчную а, а долгое нажатие прописную А.

Прием позволяет минимизировать перемещения пальцев на клавишу Shift.

Функция Space Cadet позволяет отправлять коротким нажатием левого Shift код левой скобки (, а коротким нажатием правого Shift код правой скобки )

темп нажатий

Можно сделать клавишу, поведение которой зависит от количества её нажатий за короткий промежуток времени.

Например можно переделать клавишу курсора так, что при однократном нажатии она работает обычным образом, при двукратном нажатии как клавиша Home.

Можно сделать, чтобы клавиша Backspace при однократном нажатии удаляла букву, а при двукратном — слово.

направление хода

Клавиша может посылать разные коды в зависимости от того, нажимается она или отпускается.

Можно сделать клавишу, нажатие на которую отправляет код C(KC_C) — копирует текст, а отпускание отправляет код C(KC_V) — вставляет текст.

комбинированные

В клавише можно использовать сразу несколько ритмических функций.
Можно заменить все клавиши скобок всего двумя клавишами.

Нажатие клавиши

(

)

одиночное

(

)

двойное

«

»

долгое

[

]

одиночное с Shift

<

>

долгое с Shift

{

}

Ускорение набора текста

Функция Autocorrect позволяет производить автокоррекцию текста на уровне клавиатуры (а не на уровне операционной системы или текстовой программы).

Если вы не верно написали слово, например пивет вместо привет, клавиатура сама заменит его на привет.

Самое эффективное применение функции автокоррекции — использование системы сокращения частых слов.

Так, вместо того, чтобы полностью набирать слово привет можно набрать только пв, а клавиатура сама допишет недостающие буквы.

На 10 клавишной клавиатуре можно сделать аналог телефонной системы предугадывания слов T9.

Так, чтобы ввести слово привет на клавиатуре с 10 клавишами, где для каждой из клавиш определено три буквы,

необходимо нажать клавиши в последовательности Н, Р, И, В, Е, К. Клавиатура сама исправит слово нривек на привет.

Освоив систему сокращения слов, можно назначить аккорды на наиболее частые словосочетания.

Написать слово привет можно одним нажатием — аккордом клавиш П и В.
Так скорость набора можно увеличить в 10 раз!

Набор

Время, мс

слово привет

1000

буквы пв

400

аккорд пв

100

Сокращения и аккорды позволяют кратно сократить перемещения пальцев.

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

Функция набора заглавных предложений. Caps Word

Во отличие от Caps Lock при наборе в таком режиме вместо пробелов будут ставится нижние прочерки: НАПРИМЕР_ТАКИМ_ОБРАЗОМ.

Также можно сделать режим записи слов без пробелов: НапримерТакимОбразом.

Безопасность

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

Функция Secure — с помощью спрятанных в регистрах клавиш или сложных аккордов можно заблокировать клавиатуру или перевести её в альтернативный режим работы.

Замена устройств ввода

Функция отправки любых HID кодов

Клавиатура может заменить любое устройства ввода.

Замена мыши

Функция Mouse keys

Позволяет перемещать курсор мыши с помощью клавиш. Не очень удобно, но бывает полезно.

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

Замена стенографа

Функция Stenography

В западном делопроизводстве для записи стенограмм используется стенотипия — печать текста на стенографической машине. Стенографическая машина — рекордсмен по скорости набора текста (375 слов в минуту).

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

Особенностью функции стенографии, отличающей её от упомянутой функции аккордов, является использование специального ПО для расшифровки аккордов.

Небольшой экскурс в стенотипию (отступление)

Стенографическая машина для набора буквенных сокращений была изобретена французом Шарлем Бивортом в 1904 году и называлась Стенофил.

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

Стенографическая машина и расположение букв на её клавишах
Стенографическая машина и расположение букв на её клавишах

Для оптимизации набора, используется только 22 клавиши, а недостающие буквы набираются комбинацией из имеющихся или заменяются на фонетически схожие буквы: буква Д заменяется буквой Т, а буква Б буквой П.

Некоторые буквенные клавиши дублируются для удобства сокращения и записи слов в одну строку.

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

При наборе аккорда букв, компьютер воспринимает их в порядке расположения клавиш — слева на право.

Простой пример «Там стоит треск», набирается в три аккорда:

ТАМ СТОИТ ТРЕСК

Если попробовать набрать этот текст аккордами на обычной клавиатуре, то из-за невозможности определения последовательности букв, их порядок нарушится и получится что-то вроде: мат остит скерт.

Но есть и сложные примеры записи, требующие знания системы сокращений. Пример «Покрытый снегом дом», набирается в 5 аккордов:

ПОКР ТЕОИ СНЕВК ОМ ТВОМ

Из-за отсутствия клавиш для букв Г и Д они заменяются двумя буквами (ЕВ и ТВ).

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


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

Было бы интересно узнать ваши идеи использования описанных возможностей.

Автор: Леонов Илья




Комментарии (59):

  1. Spectrum-Hyena
    /#24970410 / +5

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

    • SchwarzerEngel
      /#24970768

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

      • Spectrum-Hyena
        /#24971450

        Я не рассчитываю на клавиатуру, которая все решит. Автор уже вторую статью держит интригу, что он там себе придумал, мне просто любопытно. Сам для себя я уже разработал клавиатуру, которая отвечает моим требованиям

        • sophist
          /#24972168 / +2

          Ну вот, теперь ещё и от вас интрига…

          • Spectrum-Hyena
            /#24974334

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

            • Cheater
              /#24974756

              А у неё имя есть? И из рисунка не понял где модификаторы у неё. На основном слое N и под ним Shift серым цветом, что это значит?

              • Spectrum-Hyena
                /#24975182

                Названия у клавиатуры нет. Модификаторы - homerow mods, то бишь работают по зажатию, при нажатии - N, при зажатии - shift, аналогично с остальными модификаторами

                • Cheater
                  /#24975354

                  Как система отличает Shift + клавиша от быстро набранной обычной последовательности N→клавиша, при которой N не успевает отжаться до нажатия 2й клавиши?

                  • lemos
                    /#24975944

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

                  • Spectrum-Hyena
                    /#24975948

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

    • lemos
      /#24970890 / +3

      Считаю, что выбирать клавиатуру нужно не по её красивому виду, количеству клавиш и светодиодов, а по её функциональности. Поэтому хочу сперва раскрыть эту тему.

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

      Если бы я знал про наиболее удобные приемы (указанные в статье) заранее, я бы сэкономил себе очень много времени, сил и средств.

  2. Wesha
    /#24970544 / +12

    Проблема в том, что если выучил QWERTY/ЙЦУКЕН, то сможешь гарантированно управиться с 99.999% компьютеров в этом мире — а вот свою "аккордную клаву" не будешь повсюду с собой таскать, да и не везде её дадут подключить. Стандартизация, аднака, рулезь.

    • lemos
      /#24970788 / -2

      Когда вы ходите в бассейн или едете в путешествие, вы тоже не берете с собой свои удобные плавки и очки, а обходитесь теми, которые можно взять на прокат?

      • qark
        /#24970936 / +3

        А вы и в кафе со своей мультиваркой ходите?

        • lemos
          /#24970976 / +1

          Если бы кофеварку можно было бы положить с собой в карман, как клавиатуру — носил бы с собой.

          Если (кроме шуток) касаться кофейной темы, то лучший капучино у меня получается, когда я делаю его сам (могу про это тоже статью написать, если интересно).

          • Shnurokspb
            /#24971062 / +1

            Боюсь даже спросить, что Вы еще делаете лучше, когда делаете это сами... Гусары, молчать!

            • lemos
              /#24971078 / +2

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

      • Wesha
        /#24970956

        У меня не бывает ситуаций вида "О, кстати, у нас тут бассейн есть, весь ряской зарос, не мог бы ты взад-вперёд по каждой дорожке сплавать, чтобы ряску порвать?"

        • lemos
          /#24970990 / +1

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

  3. aik
    /#24970736 / +1

    Многие решения имеют право на жизнь (и даже используются в винде, типа залипания клавиш или нажатия несколько раз на нестандартные кнопки для активации каких-то функций). Но всё в комплексе? Будет неудобно.

    То есть вы можете под себя сделать оптимальную клавиатуру, но другим она не подойдёт. Будет как в той байке, где у станка была кнопка в таком месте, в которое никто не мог дотянуться. Когда разработчики спросили «а как вы 20 лет им до этого пользовались?» им ответили, что был работник, у которого после перелома рука криво срослась — он дотягивался. А теперь он уволился.

    И вы здесь как тот работник получаетесь. У вас рука «срослась» достаточно криво для того, чтобы запомнить 200 аккордов, выстукивать ритм на кнопках и т.п. Большинству же подобное будет сложно, да и просто не нужно.

    Да, стандартная клавиатура не оптимальна, но она стандартная и более-менее подходит большинству людей. К примеру, как будет аккордной клавиатурой пользоваться однорукий человек? Или тот, у кого части пальцев не хватает? Будет требовать разработки персональной? А с обычной у него больших проблем нет, кроме снижения скорости набора в сравнении со здоровым человеком.

    Плюс на обычной клавиатуре подписаны кнопки. А как можно подписывать кнопки на аккордной клавиатуре?

    PS.

    Можно сделать клавишу, нажатие на которую отправляет код C(KC_C) — копирует текст, а отпускание отправляет код C(KC_V) — вставляет текст.

    А чтобы по отпусканию текст не вставлять, будет кнопка-модификатор? Или надо будет держать кнопку нажатой до того момента, как содержимое буфера понадобится?

    • lemos
      /#24970808 / +3

      Первым пользователям пишущих машин было не удобно использовать клавишу Shift.

      Настолько неудобно, что делали машины с клавиатурами без Shift с отдельными клавишами для строчных и прописных букв.

      Описанные решения не сильно сложнее приема с Shift-ом и позволяют ускорить работу.

      • aik
        /#24970838

        Описанные решения не сильно сложнее приема с Shift-ом

        Шифт — это одна клавиша. Причём принцип работы с ней универсальный, точно такой же, как и с остальными модификаторами (модификатор+клавиша). При этом даже её некоторые неспособны осилить и предпочитают caps'ом пользоваться для набора больших букв.
        А у вас предлагается два десятка вариантов модификаторов разной степени упоротости.

        позволяют ускорить работу.

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

        • lemos
          /#24970876 / +1

          Shift стал универсальным и стандартным, когда все производители договорились использовать его. Пользователям не оставалось ничего иного, как привыкнуть к нему.

          У меня предлагается вообще отказаться от клавиш-модификаторов, в частности Shift-а.

          Эти приемы позволяют ускорить работу и тем, кто вообще не набирает текст с клавиатуры. Пример — одна клавиша для копирования. Сколько нужно времени чтобы выучить комбинацию Ctrl+c?

          • aik
            /#24970894 / +1

            Shift стал универсальным и стандартным, когда все производители договорились использовать его.

            Универсален не шифт сам по себе, а способ его использования, «модификатор+клавиша». Точно так же используется «alt+клавиша», «ctrl+клавиша». А что именно они обозначают — это уже второй вопрос.
            У меня предлагается вообще откараться от клавиш-модификаторов

            Не так. У вас предлагается все клавиши сделать модификаторами. Причём отличающимися по использованию. Нажать «а» — одно, держать «а» — другое, нажать «а+в» — третье, нажать «в+а» — четвёртое, два раза нажать «а», затем держать «а», затем нажать «в», затем отпустить «а», затем отпустить и нажать «в» — пятой. Зато кнопки экономятся, да.
            позволяют ускорить работу и тем, кто вообще не набирает текст с клавиатуры

            Если человек не набирает текст с клавиатуры, то ему вообще ничего не надо, кроме Enter'a.
            Сколько нужно времени чтобы выучить комбинацию Ctrl+c?

            Не знаю. Но её совсем не обязательно учить для того, чтобы набрать текст и скопировать его куда-то. Есть мышь, есть контекстное меню, есть кнопки на панели инструментов. То есть можно работать и без этого знания, оно придёт потом, при желании оптимизировать работу. А может и без желания, само — пока ползаешь по меню и нажимаешь на кнопки, будешь там видеть хоткеи. Рано или поздно запомнишь.

            • lemos
              /#24970932 / +1

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

              2. Если человек пользуется только клавишей Enter, то он может сделать клавиатуру только с одной клавишей Enter, чтобы меньше тратить время на её поиск среди ненужных клавиш.

              3. А сколько нужно времени, чтобы обучить человека пользоваться контекстным меню и сколько времени он будет терять на его вызов?

              4. А может нужно сразу людям обучаться эффективной работе, чтобы потом (при желании) не переучиваться?

              • aik
                /#24970986

                Я не ратую за что-то конкретное для всех.

                А стандартная клавиатура должна быть решением для всех.
                он может сделать клавиатуру только с одной клавишей Enter, чтобы меньше тратить время на её поиск среди ненужных клавиш.

                Может. Но только в том случае, если ему важна скорость нажатия на Enter. Обычно же вполне может позволить себе и поискать нужную кнопку, если его работа не завязана на её нажатие.
                сколько нужно времени, чтобы обучить человека пользоваться контекстным меню

                Несколько секунд. У стандартной мыши две кнопки, а не 38. Потому сказать человеку, что действие правой и левой кнопок различаются много времени не займёт.
                сколько времени он будет терять на его вызов?

                В сравнении с тремя годами на обучение стенографии?
                А может нужно сразу людям обучаться эффективной работе, чтобы потом (при желании) не переучиваться?

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

                • lemos
                  /#24971010 / +2

                  А стандартная клавиатура должна быть решением для всех.

                  Как и стандартный велосипед, стандартное ПО, стандартный автомобиль, стандартный ПК и пр. стандартное.

                  Вы подменяете темы в разговоре. Есть два пути повышения эффективности использования клавиатуры — повышение физической совместимости (использование аккордов) и повышение когнитивной совместимости (использование одной клавиши для конкретной команды).

                  • aik
                    /#24971038

                    Как и стандартный велосипед, стандартное ПО, стандартный автомобиль, стандартный ПК и пр. стандартное.

                    Да. А всякие уникальные решения, типа одноколёсных велосипедов, машин с полностью ручным управлением, безмониторных компьютеров и т.п. — они именно что уникальные, рассчитанные на определённую нишу. В которой могут быть удобнее для использования, чем стандартные решения. Но за пределами этой ниши они скорее превратятся в обузу, чем облегчат жизнь пользователя.
                    Есть два пути повышения эффективности

                    Повышения эффективности чего именно? Скорости набора текста?

          • grumegargler
            /#24973072

            У меня предлагается вообще отказаться от клавиш-модификаторов, в частности Shift-а.

            Тоже поначалу так сделал, но потом, через какое-то время, модификаторы решил вернуть. Несомненно, autoshift, typedancing, combo и далее, фактически сводят на нет необходимость модификаторов для набора символов, и даже copy/paste или веделение слов курсорными стрелками с shift-ом, можно назначить на кнопки в зависимости от продолжительности удержания.

            Но вот с шорткатами становится работать не очень удобно, особенно с комбинациями и в программах, где переназначение недоступно. Я имею ввиду всякие там: alt+shift+left, ctrl+shift+f4, alt+буква, ralt+rctrl+enter, alt+up/down, ctrl+shift+page down и ряд других.

            • lemos
              /#24975954

              Если переназначение недоступно в самой программе, то сложные комбинации, вроде ctrl+shift+f4, можно назначить на неиспользуемые функциональные клавиши (F1...F12...F24) с помощью AutoHotKey.

              Все классические комбинации я переназначил на аккорды.

              • grumegargler
                /#24976030

                можно назначить на неиспользуемые функциональные клавиши с помощью AutoHotKey

                к сожалению не везде работает это стабильно, в частности залипает в vnc- и rdp-клиентах (работаю в линуксе, использую autokey, но проблемы теже, что и под виндой)

                Все классические комбинации я переназначил на аккорды.

                Я с ними не подружился. Во-первых на акордных кнопках начинает чуть с другим таймаутом работать автошифт (у меня он 135мс), игрался со всеми *_TERM-ами, и пока не разобрался в чём дело. Во-вторых, не удается победить брак, потому что при быстром наборе, нередко срабатывает combo, а не набранная последовательность. А заведомо редкие комбинации для двух языков, да еще и под пальцами (без смещения кисти) - не уверен, что таких много. Можно было бы по идее перенести на слой, но тогда уже можно просто модификатор оставить, или LM().

                • lemos
                  /#24976056

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

                  Автошифтом и Mod-tap-ом невозможно вместе пользоваться. Вы видете в Автошифте существенную пользу для себя?

                  • grumegargler
                    /#24976134

                    Автошифт да, плотно зашел, я даже пытался отказаться от него (давно было, еще кажется тогда на Planck-е сидел), но все равно вернулся. Одна из сильных для меня сторон автошифта - это как бы сквозной над-слой, который по умолчанию работает на всех слоях. И у меня много по такому принципу запрограмировано сочетаний. Например, нажатие на home это home, нажатие и удержание, работает как shift + home. Или, долгий Fx = shift + Fx, двойной удар по Fx = ctrl + Fx и так далее.

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

                    На знаю к какой клавиатуре вы пришли, но у небольших клав есть

                    интересная побочка

                    т.е. просто разгибая пальцы, можно достать но "мышки", и в совокупности с программируемыми жестами (libinput-gestures), получается очень удобно.

  4. stalker_316
    /#24970810 / +1

    Человеку, как ленивому животному, свойственно стремление к простоте. Видишь кнопку с буквой - жмёшь кнопку с буквой. Видишь кнопку с цЫфрой - жмёшь кнопку с цифрой. Заучивать какие-то аккорды, чтобы вместо кнопочки с процентом нужно раскорячивать пальцы и мозг, нажимая 10500 клавиш нужно не только лишь всем. Человечество уже проходило это, когда к цифровой клавиатуре телефона прикрутили буквы и символы. Потом все выдохнули и перешли на экранные кверти-клавы или на что-то блэкберри подобное, забыв как страшный сон, что о - это три раза 5, а ъ - пять раз 8.

    • lemos
      /#24970822

      Да, если вы стремитесь к простоте, то вам нужна клавиатура с 165 клавишами на все случаи жизни.

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

      • stalker_316
        /#24970888 / +1

        Вы предлагаете условное "моноколесо", которое, скорее всего, действительно быстрее для передвижения по городу, чем обычные ноги и даже чем электросамокаты. Но на нём нужно научиться ездить, да и чисто физиологически оно доступно не всем. Так и с кастомной клавиатурой - вы создали (создали?) и научились пользоваться инструментом, который удобен лично вам и решает именно ваши задачи (кстати, сколько времени ушло на написание поста и сколько на его тнабор на клавиатуре?), но почему-то пытаетесь уже во второй статье убедить всех, что это нужно всем.

        • lemos
          /#24970910 / +6

          Я пишу о возможностях, которые способны повысить эффективность использования клавиатуры. Про то, что это нужно всем, я ничего не пишу. Если человек хочет быть эффективнее, то он сам примет решение о том, нужно ли это ему. Статья эта ему в пользу.

          • eyeless_watcher
            /#24971044 / +1

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

            • lemos
              /#24971102 / +1

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

              • VanKrock
                /#24973334

                купите педаль для смены раскладки

        • grumegargler
          /#24973930 / +2

          непонимаю, почему вы так остро реагируете? Отличный цикл статей, по теме хабра, без скрытой рекламы и пропаганды кастомных клавиатур. А как заядлый моноколесник, могу сказать, что это отличная вещь, особенно как транспорт последней милли. И да, по "простому" можно и дальше передвигаться пешком, или наматывать круги по забитой парковке в поисках свободного места (потому что это проще, чем, припарковаться дальше и идти потом пешком), а можно не по простому, сделать над собой усилие, и за пару вечеров на парковке, овладеть "мини-телепортом". Каждому своё.

          • aik
            /#24975416

            Про моноколесо пара вопросов:
            Не страшно на нём по обочинам ездить и вообще рядом с трафиком? А то я видел в наших краях парочку таких в прошлом году. В этом уже не видел, правда. Может не понравилось, а может не дожили.
            Сумки в руках на баланс влияют? Допустим, из магазина идёте/едете.
            Ну и вообще, если в магазин пришли — колесо привязываете как-то или с собой таскаете?

            • grumegargler
              /#24975706

              Не страшно на нём по обочинам ездить и вообще рядом с трафиком?

              страшно, но мне даже на велике страшно, поэтому стараюсь только по велосипедным дорожкам.

              Сумки в руках на баланс влияют? Допустим, из магазина идёте/едете.

              не существенно, главное чтобы не сильно габаритное в ветренную погоду. Как-то заселялся в отель и вёз чемодан, порывом ветра развернуло, чуть не грохнулся.

              Ну и вообще, если в магазин пришли — колесо привязываете как-то или с собой таскаете?

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

    • sophist
      /#24972196

      Так это и не для человека, а для программиста гика. Нишевой продукт, а не массовый.

    • 0xd34df00d
      /#24973616 / +3

      Я себе на эргодоксе (который, гм, близок к QMK) сделал слои с прописными/строчными греческими буквами, верхними-нижними индексами, знаком тождественности, уникодными стрелками в разные стороны, и прочими интересными символами. Клавиатуры вроде того, что делает автор — очень хороши и полезны в таких ситуациях.

      • grumegargler
        /#24973914

        так это оно и есть, там даже ссылочка на скачивание исходников есть, я так ихний plank программировал, после эргодокса.

  5. ris58h
    /#24970912 / +1

    Спасибо.

    Жаль не всегда есть возможность клавиатуру запрограммировать. Обзор программных решений на ОС/прикладном уровне планируется?

    • lemos
      /#24970954

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

  6. ihouser
    /#24971240 / +1

    Надо думать дальше: две аккордные мышки, для левой и правой руки. Какие возможности открывается! Захватываешь объект двумя курсорами, воротишь как хочется и попутно текст набиваешь по кривой.

    • inkelyad
      /#24971646

      И еще педали для ног. Разные shift и alt стандартной раскладки, кстати, очень хорошо должны адаптироваться под такой вариант.

  7. inkelyad
    /#24971714 / +1

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

    • aik
      /#24971828 / +2

      Я думаю, что идеальной клавиатурой в итоге окажется геймпад.
      Можно даже не кнопки там сделать, а всё стиками заменить, чтобы кроме нажатия ещё и в разные стороны отклонять можно было.
      Представляете, какая свобода творчества будет и какие аккорды можно будет изображать на десяти многопозиционных «кнопках»?

      Хотя… Всё уже придумано до нас: www.charachorder.com/products/charachorder-one

  8. ibnteo
    /#24973628

    Клавиатурную прошивку для микроконтроллера можно сделать ещё и на Arduino IDE, есть библиотеки Keyboard и Mouse, реализующие USB HID протокол этих устройств, причём Keyboard умеет преобразовывать строку в коды нажимаемых кнопок, включая шифт.

    Библиотека Keypad считывает нажатия матрицы кнопок, матриц может быть несколько, а кроме состояний нажатой и отпущенной кнопки есть ещё состояние долгого нажатия кнопки.

    Раньше использовал библиотеку LUFA, которой пользуются QMK и аналоги, приходилось дорабатывать библиотеку мыши, чтобы работало колесо мыши, и мне очень не понравился тот код, а когда увидел реализацию ардуиновских библиотек, сразу перешёл на них и Arduino IDE, писать прошивки и загружать стало гораздо проще и удобнее, всегда доступна Serial консоль для отладки.

    • lemos
      /#24975968

      QMK позволяет все то же самое. Возможно, вы пробовали QMK, когда он был ещё слишком сырой. Я сам год назад расстраивался, что у него нет возможности сделать аккорды на 3 и более клавиши, а теперь такая возможность есть.

  9. Cheater
    /#24973950 / +1

    Любопытный экскурс, но многие приёмы на практике малоприменимы.

    Mod-tap не дружит с быстрым набором и с движением, называемым Finger roll. "Удержание клавиши Ф превращает клавиши О, Л, Д, Ж в курсорные клавиши" - Как система отличит набор курсорной клавиши от очень быстро набранного сочетания ФО, когда Ф ещё опущена в момент нажатия О? Туда же аккорды (на не аккордовой клавиатуре).

    последовательное нажатие клавиш Ctrl, Р — активирует русский алфавитный режим

    Я бы не стал так делать. Это препятстствует быстрому переключению языка. Для того, чтобы система не распознала это как Ctrl+P, надо при вводе делать демонстративную паузу между Ctrl и P, чтобы успел отжаться Ctrl. То есть традиционное переключение Modkey+key или однократным нажатием клавиши будет быстрее.

    Нажатие одной клавиши может по разному интерпретироваться микроконтроллером в зависимости от ритма нажатия

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

    Клавиша может посылать разные коды в зависимости от того, нажимается она или отпускается.

    Иными словами, чтобы вызвать действие отжатия надо производить удержание пальца на кнопке (в народе "парализация пальца") Палец, парализация которого на клавише не причиняет вреда остальному вводу, всего 1 (большой) и клавиш под него всего ничего (пробел, альты, thumb pad) и в раскладках они давно разобраны, кроме мб педали.

    • lemos
      /#24976008

      1. Я сам скептически относился к Mod-tap-у, пока не попробовал. На практике все работает отлично. Клавиши с Mod-tap-ом отправляют код не в момент нажатия, а в момент отпускания. Если вам интересно, вот лучшая статья по Mod-tap.

      2. Да, вы верно заметили, последовательные нажатия для вызова команд не самое быстрое решение. Я использую их только для набора редких символов. На языки переключаюсь клавишей А/Р или аккордами.

      3. Когнитивная сложность больше, да, но количество клавиш так можно уменьшить (поднять физиологическую совместимость).

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

      4. Чтобы вызвать действие отжатия, надо отжать клавишу.

        Я не соглашусь, что большой палец наиболее удобен для парализации. Для набора текстов он удобен, да. Но для ввода цифр удобно удерживать левым безымянным пальцем Mod-tap модификатор (клавишу Ы, как пример), а цифры вводить правой рукой.

      • Cheater
        /#24976954

        Клавиши с Mod-tap-ом отправляют код не в момент нажатия, а в момент отпускания

        Ок, но это означает, что система теряет способность мгновенно реагировать на нажатие клавиши, как это происходит при обычном вводе

    • utyv
      /#24976312 / +1

      Я почти год использую сплит-клавиатуру на QMK. Раскладку делал для себя (йцукен оставил без изменения). По началу использовал mod-tap для пробела и бэкспейса, как это в раскладках по-умолчанию для такого рода клавиатур. Но как только вышел на свою обычную скорость, начались проблемы - ложные срабатывания. В итоге поменял раскладку теперь мне хватает моих 44 клавиш на все про все без mod-tap. Я знаю, многие mod-tap успешно используют, видимо тут зависит от индивидуальной пряморукости, может быть спсособность ритмично набирать имеет значение. У меня с этим все очень посредственно.