⌨️СофтQmkСлаб

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. Так же он предлагает написать другой, более сильный фреймворк.