QMK слаб
Поэтому надо делать свой идеальный фреймворк будущего. Данная страница объясняет причины слабости QMK.
Слабые фичи
-
Для фичи combo (аккорды) можно задать только базовые кейкоды, что означает, что ими нельзя нажимать слоефикаторы, макросы и кейкоды от lang_shift.
-
Для фичи mod-tap (разное поведение при зажатии и при единичном нажатии) можно задать только базовые модификаторы и снова базовые кейкоды. Так же там нельзя задать слоефикаторы, но это можно сделать через кейкоды для слоя.
-
Для кейкодов слоя
LT(layer, mod)
,LT(layer, kc)
можно задать только слои 0-15, левые модификаторы и базовые кейкоды. -
Возможность автоматически нажимать Shift, Ctrl итд вместе с кейкодом через макросы LSHF(kc), LCTL(kc) можно снова задавать только базовые кейкоды, и нельзя сделать такой макрос, который будет нажимать произвольную клавишу вместе с произвольной клавишей.
Все эти фичи не дают возможности разогнаться когда ты ими проникся.
С точки зрения реализации
-
Одним из главнейших ограничений QMK является то, что он предлагает задавать основную часть фич через побитовое ИЛИ, что для 16-битного числа, которым там представляется кейкод, крайне мало, и сильно ограничивает фантазию. Это сделано для того чтобы пользователь мог вручную легко записывать свою раскладку внутри файла
keymap.c
. Этой проблемы можно было избежать при помощи кодогенерации и визуального конфигуратора/конфигуратора через конфиг-файл, ведь количество используемых кейкодов в раскладке с учётом всех слоёв вряд ли превысит 500, благодаря чему можно просто нагенерить большой switch, который просто вызывает соответствующие функции. -
Когда ты хочешь реализовать собственные расширения для QMK, ты так же ограничен как и остальные фичи, ведь чтобы «нажать» какой-то кейкод, тебе нужно вызвать функцию
(un)register_code(...)
, которая способна работать только с базовыми кейкодами, и не способна нажимать макросы, слоефикаторы итд. -
QMK написан на Си, а это очень плохой и слабый язык. В Си по умолчанию нету юнит-тестов, соответственно у QMK они вроде тоже не особо наблюдаются.
-
Нельзя проверить работоспособность своей прошивки не заливая её на клавиатуру, нельзя её отлаживать на компе.
С точки зрения железа
-
QMK в первую очередь ориентируется на процессоры с архитектурой AVR, которые имеют очень мало флеш-памяти (32кб), из-за чего они даже не рассматривают возможность реализации сложной раскладки или множества интересных программ.
С точки зрения юзабилити
-
Чтобы проверить как себя будет вести раскладка, надо прошить ею клавиатуру. А это очень долго, и сильно затрудняет итерации. Особенно это становится плохо, когда ты пишешь собственное расширение, и дебажить его можно только через printf.
-
Чтобы сделать хоть сколько-нибудь сложную раскладку на QMK, надо иметь дело с кодом. А это не все могут себе позволить, ибо не все являются программистами, и не все готовы разбираться в возникающих ошибках сборки. В QMK даже свою раскладку нельзя задать через конфигурационный файл, где кода по сути и нет, только через Си, где если ты не дай бог забудешь запятую внутри макроса KEYMAP, случайно вылезет такая странная ошибка, что вряд ли вообще можно подумать на запятую.
А в чём же QMK силён?
-
Поддерживает много клав.
-
А самое главное — он Open-Source, и если ты программист, можно написать код самому, который через костыли делает то что тебе нужно.
Что делать?
u/optozorax пишет расширения в виде lang_shift, combo. Так же он предлагает написать другой, более сильный фреймворк.