В QMK имеются функции только для нажатия кейкодов вида KC_A
через вызов register_keycode(KC_A)
, но нету возможности "нажать" более сложный кейкод, например: MO(4)
. Специально для устранения этого недостатка и создан этот модуль, он позволяет вам с минимальными усилиями "нажимать" любой кейкод. Может пригодиться если вы делаете нестандартное расширение для QMK, и вы не особо заботитесь о том насколько красив код внутри QMK, вам лишь важно чтобы оно работало у вас.
Данный модуль нужен для работы других модулей, например: аккорды.
Ещё одно интересное применение данного модуля: если у вас есть динамик в клавиатуре, то при помощи здешней функции можно прикрутить возможность проигрывать музыку при нажатии любой клавиши.
press_arbitrary_keycode(MO(4), true);
Где кейкод - MO(4)
, а true
означает что клавиша будет зажата, false
будет означать что она отпущена. Сигнатуру и реализацию можно посмотреть в файле include.h
.
#include "arbitrary_keycode/include.h"
- В файле
quantum/keymap_common.c
в функцииkeymap_key_to_keycode
:
__attribute__((weak)) uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) {
// Read entire word (16bits)
- return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
+ if (key.use_custom_keycode) {
+ return key.custom_keycode;
+ } else {
+ return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
+ }
}
- В файле
tmk_core/quantum/keyboard.h
в структуреkeypos_t
:
typedef struct {
uint8_t col;
uint8_t row;
+ bool use_custom_keycode;
+ uint16_t custom_keycode;
} keypos_t;
- В файле
quantum/rgb_matrix.c
в функцииprocess_rgb_matrix
. Это необходимо, чтобы вызове этой функции не подсвечивались рандомные клавиши.
bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.key.custom_keycode) {
+ return true;
+ }
- В коде данного модуля закомментировать строчку с ошибкой, которая говорит прочитать данный документ.
7.02.2021:
- Теперь в коде есть сообщение об ошибке, которое направляет на эту страницу. Оно нужно, чтобы новичок при компиляции чего-то с данным модулем не думал что за странные ошибки у него вылезли.
20.01.2021:
- Теперь надо модифицировать ещё и файл
quantum/rgb_matrix.c
. - Теперь не надо передавать
row
иcol
. Раньше они нужны были только для корректного отображения подсветки, а теперь с костылём в коде подсветки, это больше не нужно. Плюс, иногда передача текущих позиций ломала внутренний алгоритм QMK по обнаружению когда клавиша отжата или нажата, и это вызывало такие ошибки, что какие-то клавиши просто не отжимались.