diff options
Diffstat (limited to 'users/xulkal/custom_tap_dance.c')
-rw-r--r-- | users/xulkal/custom_tap_dance.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/users/xulkal/custom_tap_dance.c b/users/xulkal/custom_tap_dance.c new file mode 100644 index 000000000..a1c644efd --- /dev/null +++ b/users/xulkal/custom_tap_dance.c | |||
@@ -0,0 +1,61 @@ | |||
1 | #include "custom_tap_dance.h" | ||
2 | #include "custom_keycodes.h" | ||
3 | #include "timer_utils.h" | ||
4 | |||
5 | #ifdef TAP_DANCE_ENABLE | ||
6 | |||
7 | //Tap Dance Definitions | ||
8 | qk_tap_dance_action_t tap_dance_actions[] = { | ||
9 | [COMM_QUOT] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_QUOT), | ||
10 | [BACKSPACE] = ACTION_TAP_DANCE_DOUBLE (KC_BSPACE, LCTL(KC_BSPACE)), | ||
11 | [DELETE] = ACTION_TAP_DANCE_DOUBLE (KC_DELETE, LCTL(KC_DELETE)) | ||
12 | }; | ||
13 | |||
14 | #else | ||
15 | |||
16 | static uint16_t td_keycode; | ||
17 | static uint16_t td_timer; | ||
18 | |||
19 | const uint16_t PROGMEM td_keymaps[TD_MAX - TD_MIN][2] = { | ||
20 | [TD_COMM - TD_MIN] = { KC_COMM, KC_QUOT }, | ||
21 | [TD_BSPC - TD_MIN] = { KC_BSPACE, LCTL(KC_BSPACE) }, | ||
22 | [TD_DEL - TD_MIN] = { KC_DELETE, LCTL(KC_DELETE) }, | ||
23 | [TD_DOT - TD_MIN] = { KC_DOT, KC_GRAVE } | ||
24 | }; | ||
25 | |||
26 | void run_tap_dance_double(uint8_t i) | ||
27 | { | ||
28 | tap_code16(pgm_read_word(&td_keymaps[td_keycode - TD_MIN][i])); | ||
29 | td_keycode = KC_TRANSPARENT; | ||
30 | td_timer = timer_read() + TAPPING_TERM; | ||
31 | } | ||
32 | |||
33 | bool process_tap_dance_double(uint16_t keycode, keyrecord_t *record) | ||
34 | { | ||
35 | if (TD_MIN <= keycode && keycode < TD_MAX) | ||
36 | { | ||
37 | if (record->event.pressed) | ||
38 | { | ||
39 | if (td_keycode != keycode || timer_expired(td_timer)) | ||
40 | { | ||
41 | td_keycode = keycode; | ||
42 | td_timer = timer_read() + TAPPING_TERM; | ||
43 | } | ||
44 | else | ||
45 | run_tap_dance_double(1); | ||
46 | } | ||
47 | return false; | ||
48 | } | ||
49 | |||
50 | if (td_keycode != KC_TRANSPARENT) | ||
51 | run_tap_dance_double(0); | ||
52 | return true; | ||
53 | } | ||
54 | |||
55 | void matrix_scan_user(void) | ||
56 | { | ||
57 | if (td_keycode != KC_TRANSPARENT && timer_expired(td_timer)) | ||
58 | run_tap_dance_double(0); | ||
59 | } | ||
60 | |||
61 | #endif | ||