From 40183b3cfa7fa2f487e1bfb828ddeecfc76c25e7 Mon Sep 17 00:00:00 2001 From: Gustaf Rydholm Date: Sun, 10 Mar 2024 00:47:43 +0100 Subject: Add sfrp to fix right parenthesis bug --- aktersnurra/sftrp.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 aktersnurra/sftrp.c (limited to 'aktersnurra/sftrp.c') diff --git a/aktersnurra/sftrp.c b/aktersnurra/sftrp.c new file mode 100644 index 0000000..b80f6c7 --- /dev/null +++ b/aktersnurra/sftrp.c @@ -0,0 +1,69 @@ +enum td_keycodes { + SFT_RP // `LSFT` when held, `(` when tapped. +}; + +typedef enum { + TD_NONE, + TD_UNKNOWN, + TD_SINGLE_TAP, + TD_SINGLE_HOLD, + TD_DOUBLE_SINGLE_TAP +} td_state_t; + +static td_state_t td_state; + +td_state_t cur_dance(tap_dance_state_t *state) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) + return TD_SINGLE_TAP; + else + return TD_SINGLE_HOLD; + } + + if (state->count == 2) + return TD_DOUBLE_SINGLE_TAP; + else + return TD_UNKNOWN; // Any number higher than the maximum state value you + // return above +} + +void sftrp_finished(tap_dance_state_t *state, void *user_data) { + td_state = cur_dance(state); + switch (td_state) { + case TD_SINGLE_TAP: + register_code16(KC_RPRN); + break; + case TD_SINGLE_HOLD: + register_mods(MOD_BIT( + KC_LSFT)); // For a layer-tap key, use `layer_on(_MY_LAYER)` here + break; + case TD_DOUBLE_SINGLE_TAP: // Allow nesting of 2 parens `))` within tapping + // term + tap_code16(KC_RPRN); + register_code16(KC_RPRN); + break; + default: + break; + } +} + +void sftrp_reset(tap_dance_state_t *state, void *user_data) { + switch (td_state) { + case TD_SINGLE_TAP: + unregister_code16(KC_RPRN); + break; + case TD_SINGLE_HOLD: + unregister_mods(MOD_BIT( + KC_LSFT)); // For a layer-tap key, use `layer_off(_MY_LAYER)` here + break; + case TD_DOUBLE_SINGLE_TAP: + unregister_code16(KC_RPRN); + break; + default: + break; + } +} + +tap_dance_action_t tap_dance_actions[] = { + [SFT_RP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftrp_finished, sftrp_reset)}; + -- cgit v1.2.3-70-g09d2