mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-12-17 16:54:21 +08:00
Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
@@ -309,7 +309,7 @@ bool process_autocorrect(uint16_t keycode, keyrecord_t *record) {
|
||||
|
||||
if (code & 128) { // A typo was found! Apply autocorrect.
|
||||
const uint8_t backspaces = (code & 63) + !record->event.pressed;
|
||||
const char * changes = (const char *)(autocorrect_data + state + 1);
|
||||
const char *changes = (const char *)(autocorrect_data + state + 1);
|
||||
|
||||
/* Gather info about the typo'd word
|
||||
*
|
||||
|
||||
@@ -225,7 +225,7 @@ static inline void dump_key_buffer(void) {
|
||||
key_buffer_next = key_buffer_i + 1;
|
||||
|
||||
queued_record_t *qrecord = &key_buffer[key_buffer_i];
|
||||
keyrecord_t * record = &qrecord->record;
|
||||
keyrecord_t *record = &qrecord->record;
|
||||
|
||||
if (IS_NOEVENT(record->event)) {
|
||||
continue;
|
||||
@@ -318,14 +318,14 @@ void apply_combo(uint16_t combo_index, combo_t *combo) {
|
||||
#if defined(EXTRA_EXTRA_LONG_COMBOS)
|
||||
uint32_t state = 0;
|
||||
#elif defined(EXTRA_LONG_COMBOS)
|
||||
uint16_t state = 0;
|
||||
uint16_t state = 0;
|
||||
#else
|
||||
uint8_t state = 0;
|
||||
#endif
|
||||
|
||||
for (uint8_t key_buffer_i = 0; key_buffer_i < key_buffer_size; key_buffer_i++) {
|
||||
queued_record_t *qrecord = &key_buffer[key_buffer_i];
|
||||
keyrecord_t * record = &qrecord->record;
|
||||
keyrecord_t *record = &qrecord->record;
|
||||
uint16_t keycode = qrecord->keycode;
|
||||
|
||||
uint8_t key_count = 0;
|
||||
@@ -365,7 +365,7 @@ static inline void apply_combos(void) {
|
||||
// Apply all buffered normal combos.
|
||||
for (uint8_t i = combo_buffer_read; i != combo_buffer_write; INCREMENT_MOD(i)) {
|
||||
queued_combo_t *buffered_combo = &combo_buffer[i];
|
||||
combo_t * combo = combo_get(buffered_combo->combo_index);
|
||||
combo_t *combo = combo_get(buffered_combo->combo_index);
|
||||
|
||||
#ifdef COMBO_MUST_TAP_PER_COMBO
|
||||
if (get_combo_must_tap(buffered_combo->combo_index, combo)) {
|
||||
@@ -470,7 +470,7 @@ static combo_key_action_t process_single_combo(combo_t *combo, uint16_t keycode,
|
||||
combo_t *drop = NULL;
|
||||
for (uint8_t combo_buffer_i = combo_buffer_read; combo_buffer_i != combo_buffer_write; INCREMENT_MOD(combo_buffer_i)) {
|
||||
queued_combo_t *qcombo = &combo_buffer[combo_buffer_i];
|
||||
combo_t * buffered_combo = combo_get(qcombo->combo_index);
|
||||
combo_t *buffered_combo = combo_get(qcombo->combo_index);
|
||||
|
||||
if ((drop = overlaps(buffered_combo, combo))) {
|
||||
DISABLE_COMBO(drop);
|
||||
@@ -578,8 +578,8 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) {
|
||||
/* Only check keycodes from one layer. */
|
||||
keycode = keymap_key_to_keycode(COMBO_ONLY_FROM_LAYER, record->event.key);
|
||||
#else
|
||||
uint8_t highest_layer = get_highest_layer(layer_state | default_layer_state);
|
||||
uint8_t ref_layer = combo_ref_from_layer(highest_layer);
|
||||
uint8_t highest_layer = get_highest_layer(layer_state | default_layer_state);
|
||||
uint8_t ref_layer = combo_ref_from_layer(highest_layer);
|
||||
if (ref_layer != highest_layer) {
|
||||
keycode = keymap_key_to_keycode(ref_layer, record->event.key);
|
||||
}
|
||||
|
||||
@@ -45,8 +45,8 @@ typedef struct combo_t {
|
||||
#ifdef EXTRA_SHORT_COMBOS
|
||||
uint8_t state;
|
||||
#else
|
||||
bool disabled;
|
||||
bool active;
|
||||
bool disabled;
|
||||
bool active;
|
||||
# if defined(EXTRA_EXTRA_LONG_COMBOS)
|
||||
uint32_t state;
|
||||
# elif defined(EXTRA_LONG_COMBOS)
|
||||
@@ -57,10 +57,8 @@ typedef struct combo_t {
|
||||
#endif
|
||||
} combo_t;
|
||||
|
||||
#define COMBO(ck, ca) \
|
||||
{ .keys = &(ck)[0], .keycode = (ca) }
|
||||
#define COMBO_ACTION(ck) \
|
||||
{ .keys = &(ck)[0] }
|
||||
#define COMBO(ck, ca) {.keys = &(ck)[0], .keycode = (ca)}
|
||||
#define COMBO_ACTION(ck) {.keys = &(ck)[0]}
|
||||
|
||||
#define COMBO_END 0
|
||||
#ifndef COMBO_TERM
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
#define BV_64(shift) (((uint64_t)1) << (shift))
|
||||
#define GET_KEY_ARRAY(code) (((code) < 0x40) ? key_state[0] : ((code) < 0x80) ? key_state[1] : ((code) < 0xC0) ? key_state[2] : key_state[3])
|
||||
#define GET_CODE_INDEX(code) (((code) < 0x40) ? (code) : ((code) < 0x80) ? (code)-0x40 : ((code) < 0xC0) ? (code)-0x80 : (code)-0xC0)
|
||||
#define GET_CODE_INDEX(code) (((code) < 0x40) ? (code) : ((code) < 0x80) ? (code) - 0x40 : ((code) < 0xC0) ? (code) - 0x80 : (code) - 0xC0)
|
||||
#define KEY_STATE(code) (GET_KEY_ARRAY(code) & BV_64(GET_CODE_INDEX(code))) == BV_64(GET_CODE_INDEX(code))
|
||||
#define SET_KEY_ARRAY_STATE(code, val) \
|
||||
do { \
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
# define key_override_printf dprintf
|
||||
#else
|
||||
# define key_override_printf(str, ...) \
|
||||
{}
|
||||
{ \
|
||||
}
|
||||
#endif
|
||||
|
||||
// Helpers
|
||||
|
||||
@@ -58,23 +58,41 @@ typedef struct {
|
||||
void (*layer_function)(uint8_t);
|
||||
} tap_dance_dual_role_t;
|
||||
|
||||
#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) \
|
||||
{ .fn = {tap_dance_pair_on_each_tap, tap_dance_pair_finished, tap_dance_pair_reset, NULL}, .user_data = (void *)&((tap_dance_pair_t){kc1, kc2}), }
|
||||
#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) \
|
||||
{ \
|
||||
.fn = {tap_dance_pair_on_each_tap, tap_dance_pair_finished, tap_dance_pair_reset, NULL}, \
|
||||
.user_data = (void *)&((tap_dance_pair_t){kc1, kc2}), \
|
||||
}
|
||||
|
||||
#define ACTION_TAP_DANCE_LAYER_MOVE(kc, layer) \
|
||||
{ .fn = {tap_dance_dual_role_on_each_tap, tap_dance_dual_role_finished, tap_dance_dual_role_reset, NULL}, .user_data = (void *)&((tap_dance_dual_role_t){kc, layer, layer_move}), }
|
||||
#define ACTION_TAP_DANCE_LAYER_MOVE(kc, layer) \
|
||||
{ \
|
||||
.fn = {tap_dance_dual_role_on_each_tap, tap_dance_dual_role_finished, tap_dance_dual_role_reset, NULL}, \
|
||||
.user_data = (void *)&((tap_dance_dual_role_t){kc, layer, layer_move}), \
|
||||
}
|
||||
|
||||
#define ACTION_TAP_DANCE_LAYER_TOGGLE(kc, layer) \
|
||||
{ .fn = {NULL, tap_dance_dual_role_finished, tap_dance_dual_role_reset, NULL}, .user_data = (void *)&((tap_dance_dual_role_t){kc, layer, layer_invert}), }
|
||||
#define ACTION_TAP_DANCE_LAYER_TOGGLE(kc, layer) \
|
||||
{ \
|
||||
.fn = {NULL, tap_dance_dual_role_finished, tap_dance_dual_role_reset, NULL}, \
|
||||
.user_data = (void *)&((tap_dance_dual_role_t){kc, layer, layer_invert}), \
|
||||
}
|
||||
|
||||
#define ACTION_TAP_DANCE_FN(user_fn) \
|
||||
{ .fn = {NULL, user_fn, NULL, NULL}, .user_data = NULL, }
|
||||
#define ACTION_TAP_DANCE_FN(user_fn) \
|
||||
{ \
|
||||
.fn = {NULL, user_fn, NULL, NULL}, \
|
||||
.user_data = NULL, \
|
||||
}
|
||||
|
||||
#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) \
|
||||
{ .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, NULL}, .user_data = NULL, }
|
||||
{ \
|
||||
.fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, NULL}, \
|
||||
.user_data = NULL, \
|
||||
}
|
||||
|
||||
#define ACTION_TAP_DANCE_FN_ADVANCED_WITH_RELEASE(user_fn_on_each_tap, user_fn_on_each_release, user_fn_on_dance_finished, user_fn_on_dance_reset) \
|
||||
{ .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, user_fn_on_each_release}, .user_data = NULL, }
|
||||
{ \
|
||||
.fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, user_fn_on_each_release}, \
|
||||
.user_data = NULL, \
|
||||
}
|
||||
|
||||
#define TD_INDEX(code) QK_TAP_DANCE_GET_INDEX(code)
|
||||
#define TAP_DANCE_KEYCODE(state) TD(((tap_dance_action_t *)state) - tap_dance_actions)
|
||||
|
||||
Reference in New Issue
Block a user