#include "custom_tap_dance.h" #include "custom_keycodes.h" #ifdef TAP_DANCE_ENABLE //Tap Dance Definitions qk_tap_dance_action_t tap_dance_actions[] = { [COMM_QUOT] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_QUOT), [BACKSPACE] = ACTION_TAP_DANCE_DOUBLE (KC_BSPACE, LCTL(KC_BSPACE)), [DELETE] = ACTION_TAP_DANCE_DOUBLE (KC_DELETE, LCTL(KC_DELETE)) }; #else static uint16_t td_keycode; static uint16_t td_timer; const uint16_t PROGMEM td_keymaps[TD_MAX - TD_MIN][2] = { [TD_COMM - TD_MIN] = { KC_COMM, KC_QUOT }, [TD_BSPC - TD_MIN] = { KC_BSPACE, LCTL(KC_BSPACE) }, [TD_DEL - TD_MIN] = { KC_DELETE, LCTL(KC_DELETE) } }; static void run_custom_tap_dance(uint8_t i) { tap_code16(pgm_read_word(&td_keymaps[td_keycode - TD_MIN][i])); td_keycode = KC_TRANSPARENT; td_timer = timer_read() + TAPPING_TERM; } bool process_custom_tap_dance(uint16_t keycode, keyrecord_t *record) { if (TD_MIN <= keycode && keycode < TD_MAX) { if (record->event.pressed) { if (td_keycode != keycode || timer_expired(td_timer)) { td_keycode = keycode; td_timer = timer_read() + TAPPING_TERM; } else run_custom_tap_dance(1); } return false; } if (td_keycode != KC_TRANSPARENT) run_custom_tap_dance(0); return true; } void matrix_scan_user(void) { if (td_keycode != KC_TRANSPARENT && timer_expired(td_timer)) run_custom_tap_dance(0); } #endif