From 5d23b2a9e1c6b0522db9f5c47db228e7a923ac03 Mon Sep 17 00:00:00 2001 From: Karl Hallsby Date: Mon, 10 Jan 2022 09:10:17 -0600 Subject: Page Up/Down are double-tap on Up/Down arrows --- keymap.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 79 insertions(+), 9 deletions(-) (limited to 'keymap.c') diff --git a/keymap.c b/keymap.c index 3d28918..d47aef3 100644 --- a/keymap.c +++ b/keymap.c @@ -60,6 +60,8 @@ enum tap_dance_codes { DANCE_0, DANCE_1, DANCE_2, + DANCE_3, + DANCE_4, }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -68,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRACKET, KC_RBRACKET, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, KC_ESCAPE, KC_A, KC_S, KC_D, KC_F, KC_G, TG(1), TG(1), KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RSHIFT, - KC_BSPACE, WEBUSB_PAIR, KC_DELETE, KC_LEFT, KC_RIGHT, KC_HYPR, MT(MOD_LCTL, KC_ESCAPE),KC_UP, KC_DOWN, KC_MEH, KC_TRANSPARENT, TD(DANCE_1), + KC_BSPACE, WEBUSB_PAIR, KC_DELETE, KC_LEFT, KC_RIGHT, KC_HYPR, MT(MOD_LCTL, KC_ESCAPE),TD(DANCE_1), TD(DANCE_2), KC_MEH, KC_TRANSPARENT, TD(DANCE_3), KC_LCTRL, KC_BSPACE, KC_LGUI, KC_LALT, KC_ENTER, MT(MOD_LCTL, KC_SPACE) ), [1] = LAYOUT_moonlander( @@ -92,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, - KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_SPACE, KC_SPACE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TD(DANCE_2), + KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_SPACE, KC_SPACE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TD(DANCE_4), KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT ), }; @@ -187,7 +189,7 @@ enum { MORE_TAPS }; -static tap dance_state[3]; +static tap dance_state[5]; uint8_t dance_step(qk_tap_dance_state_t *state); @@ -237,44 +239,112 @@ void dance_0_reset(qk_tap_dance_state_t *state, void *user_data) { } dance_state[0].step = 0; } +void on_dance_1(qk_tap_dance_state_t *state, void *user_data); void dance_1_finished(qk_tap_dance_state_t *state, void *user_data); void dance_1_reset(qk_tap_dance_state_t *state, void *user_data); +void on_dance_1(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + tap_code16(KC_UP); + tap_code16(KC_UP); + tap_code16(KC_UP); + } + if(state->count > 3) { + tap_code16(KC_UP); + } +} + void dance_1_finished(qk_tap_dance_state_t *state, void *user_data) { dance_state[1].step = dance_step(state); switch (dance_state[1].step) { - case SINGLE_HOLD: layer_on(2); break; - case DOUBLE_TAP: layer_move(3); break; + case SINGLE_TAP: register_code16(KC_UP); break; + case DOUBLE_TAP: register_code16(KC_PGUP); break; + case DOUBLE_SINGLE_TAP: tap_code16(KC_UP); register_code16(KC_UP); } } void dance_1_reset(qk_tap_dance_state_t *state, void *user_data) { wait_ms(10); switch (dance_state[1].step) { - case SINGLE_HOLD: layer_off(2); break; + case SINGLE_TAP: unregister_code16(KC_UP); break; + case DOUBLE_TAP: unregister_code16(KC_PGUP); break; + case DOUBLE_SINGLE_TAP: unregister_code16(KC_UP); break; } dance_state[1].step = 0; } +void on_dance_2(qk_tap_dance_state_t *state, void *user_data); void dance_2_finished(qk_tap_dance_state_t *state, void *user_data); void dance_2_reset(qk_tap_dance_state_t *state, void *user_data); +void on_dance_2(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + tap_code16(KC_DOWN); + tap_code16(KC_DOWN); + tap_code16(KC_DOWN); + } + if(state->count > 3) { + tap_code16(KC_DOWN); + } +} + void dance_2_finished(qk_tap_dance_state_t *state, void *user_data) { dance_state[2].step = dance_step(state); switch (dance_state[2].step) { - case DOUBLE_TAP: layer_move(0); break; + case SINGLE_TAP: register_code16(KC_DOWN); break; + case DOUBLE_TAP: register_code16(KC_PGDOWN); break; + case DOUBLE_SINGLE_TAP: tap_code16(KC_DOWN); register_code16(KC_DOWN); } } void dance_2_reset(qk_tap_dance_state_t *state, void *user_data) { wait_ms(10); switch (dance_state[2].step) { + case SINGLE_TAP: unregister_code16(KC_DOWN); break; + case DOUBLE_TAP: unregister_code16(KC_PGDOWN); break; + case DOUBLE_SINGLE_TAP: unregister_code16(KC_DOWN); break; } dance_state[2].step = 0; } +void dance_3_finished(qk_tap_dance_state_t *state, void *user_data); +void dance_3_reset(qk_tap_dance_state_t *state, void *user_data); + +void dance_3_finished(qk_tap_dance_state_t *state, void *user_data) { + dance_state[3].step = dance_step(state); + switch (dance_state[3].step) { + case SINGLE_HOLD: layer_on(2); break; + case DOUBLE_TAP: layer_move(3); break; + } +} + +void dance_3_reset(qk_tap_dance_state_t *state, void *user_data) { + wait_ms(10); + switch (dance_state[3].step) { + case SINGLE_HOLD: layer_off(2); break; + } + dance_state[3].step = 0; +} +void dance_4_finished(qk_tap_dance_state_t *state, void *user_data); +void dance_4_reset(qk_tap_dance_state_t *state, void *user_data); + +void dance_4_finished(qk_tap_dance_state_t *state, void *user_data) { + dance_state[4].step = dance_step(state); + switch (dance_state[4].step) { + case DOUBLE_TAP: layer_move(0); break; + } +} + +void dance_4_reset(qk_tap_dance_state_t *state, void *user_data) { + wait_ms(10); + switch (dance_state[4].step) { + } + dance_state[4].step = 0; +} qk_tap_dance_action_t tap_dance_actions[] = { [DANCE_0] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_0, dance_0_finished, dance_0_reset), - [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_1_finished, dance_1_reset), - [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_2_finished, dance_2_reset), + [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_1, dance_1_finished, dance_1_reset), + [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_2, dance_2_finished, dance_2_reset), + [DANCE_3] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_3_finished, dance_3_reset), + [DANCE_4] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_4_finished, dance_4_reset), }; -- cgit v1.2.3