From 6d6eee5571f282d96408e95f7b0ed38886d29b9a Mon Sep 17 00:00:00 2001 From: rootiest Date: Fri, 10 Apr 2026 23:13:36 -0400 Subject: [PATCH 1/2] feat(k17): add tap-chords to keychron k17_max --- .../ansi_encoder/rgb/keymaps/via/keymap.c | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c b/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c index a4260abe38..cea2ebfb89 100644 --- a/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c +++ b/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c @@ -21,6 +21,12 @@ enum { TD_HOME_END, + TD_CHORDS, +}; + +enum custom_keycodes { + CK_CTRL_K_C = NEW_SAFE_RANGE, + CK_CTRL_K_D, }; enum layers { @@ -33,7 +39,7 @@ enum layers { // clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MAC_BASE] = LAYOUT_104_ansi( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTRL, KC_LNPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, RGB_MOD, KC_DEL, KC_F13, KC_F14, KC_F15, KC_MUTE, + KC_ESC, KC_BRID, KC_BRIU, KC_MCTRL, KC_LNPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, RGB_MOD, KC_DEL, TD(TD_CHORDS), KC_F14, KC_F15, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, TD(TD_HOME_END), KC_P4, KC_P5, KC_P6, @@ -49,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), [WIN_BASE] = LAYOUT_104_ansi( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, RGB_MOD, KC_DEL, _______, _______, _______, KC_MUTE, + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, RGB_MOD, KC_DEL, TD(TD_CHORDS), _______, _______, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_HOME, KC_P4, KC_P5, KC_P6, @@ -79,6 +85,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (!process_record_keychron_common(keycode, record)) { return false; } + switch (keycode) { + case CK_CTRL_K_C: + if (record->event.pressed) { + SEND_STRING(SS_LCTL("kc")); + } + return false; + case CK_CTRL_K_D: + if (record->event.pressed) { + SEND_STRING(SS_LCTL("kd")); + } + return false; + } return true; } @@ -86,4 +104,5 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { tap_dance_action_t tap_dance_actions[] = { // Tap once for Home, twice for End [TD_HOME_END] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END), + [TD_CHORDS] = ACTION_TAP_DANCE_DOUBLE(CK_CTRL_K_C, CK_CTRL_K_D), }; \ No newline at end of file From 5f9121c0d259675280e884d5971fd92e01124d28 Mon Sep 17 00:00:00 2001 From: rootiest Date: Sat, 11 Apr 2026 00:07:45 -0400 Subject: [PATCH 2/2] fix(k17): remove dead custom keycode stubs from tap-chord dance CK_CTRL_K_C and CK_CTRL_K_D were leftover from an earlier failed attempt using ACTION_TAP_DANCE_DOUBLE with custom keycodes. Now that TD_CHORDS uses ACTION_TAP_DANCE_FN with SEND_STRING, they are unused. --- .../ansi_encoder/rgb/keymaps/via/keymap.c | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c b/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c index cea2ebfb89..2370023312 100644 --- a/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c +++ b/keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c @@ -24,10 +24,13 @@ enum { TD_CHORDS, }; -enum custom_keycodes { - CK_CTRL_K_C = NEW_SAFE_RANGE, - CK_CTRL_K_D, -}; +void dance_chords_finished(tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + SEND_STRING(SS_LCTL("kc")); + } else { + SEND_STRING(SS_LCTL("kd")); + } +} enum layers { MAC_BASE, @@ -85,18 +88,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (!process_record_keychron_common(keycode, record)) { return false; } - switch (keycode) { - case CK_CTRL_K_C: - if (record->event.pressed) { - SEND_STRING(SS_LCTL("kc")); - } - return false; - case CK_CTRL_K_D: - if (record->event.pressed) { - SEND_STRING(SS_LCTL("kd")); - } - return false; - } return true; } @@ -104,5 +95,5 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { tap_dance_action_t tap_dance_actions[] = { // Tap once for Home, twice for End [TD_HOME_END] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END), - [TD_CHORDS] = ACTION_TAP_DANCE_DOUBLE(CK_CTRL_K_C, CK_CTRL_K_D), + [TD_CHORDS] = ACTION_TAP_DANCE_FN(dance_chords_finished), }; \ No newline at end of file