vial/encoders: use action_exec hack to support any keycode
This commit is contained in:
parent
dcf794eb9f
commit
a9ccf9aa92
@ -177,8 +177,17 @@ void dynamic_keymap_set_buffer(uint16_t offset, uint16_t size, uint8_t *data) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef VIAL_ENCODERS_ENABLE
|
||||
extern uint16_t g_vial_magic_keycode_override;
|
||||
#endif
|
||||
|
||||
// This overrides the one in quantum/keymap_common.c
|
||||
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) {
|
||||
#ifdef VIAL_ENCODERS_ENABLE
|
||||
if (key.row == 254 && key.col == 254)
|
||||
return g_vial_magic_keycode_override;
|
||||
#endif
|
||||
|
||||
if (layer < DYNAMIC_KEYMAP_LAYER_COUNT && key.row < MATRIX_ROWS && key.col < MATRIX_COLS) {
|
||||
return dynamic_keymap_get_keycode(layer, key.row, key.col);
|
||||
} else {
|
||||
|
@ -112,6 +112,19 @@ void vial_handle_cmd(uint8_t *msg, uint8_t length) {
|
||||
}
|
||||
|
||||
#ifdef VIAL_ENCODERS_ENABLE
|
||||
uint16_t g_vial_magic_keycode_override;
|
||||
|
||||
static void exec_keycode(uint16_t keycode) {
|
||||
g_vial_magic_keycode_override = keycode;
|
||||
|
||||
action_exec((keyevent_t){
|
||||
.key = (keypos_t){.row = 254, .col = 254}, .pressed = 1, .time = (timer_read() | 1) /* time should not be 0 */
|
||||
});
|
||||
action_exec((keyevent_t){
|
||||
.key = (keypos_t){.row = 254, .col = 254}, .pressed = 0, .time = (timer_read() | 1) /* time should not be 0 */
|
||||
});
|
||||
}
|
||||
|
||||
void vial_encoder_update(uint8_t index, bool clockwise) {
|
||||
uint16_t code;
|
||||
|
||||
@ -121,13 +134,13 @@ void vial_encoder_update(uint8_t index, bool clockwise) {
|
||||
if (layers & (1UL << i)) {
|
||||
code = dynamic_keymap_get_encoder(i, index, clockwise);
|
||||
if (code != KC_TRNS) {
|
||||
tap_code16(code);
|
||||
exec_keycode(code);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* fall back to layer 0 */
|
||||
code = dynamic_keymap_get_encoder(0, index, clockwise);
|
||||
tap_code16(code);
|
||||
exec_keycode(code);
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user