aboutsummaryrefslogtreecommitdiff
path: root/qmk/keyboards/sofle_choc/keymaps/custom/tap_hold_dance.h
diff options
context:
space:
mode:
Diffstat (limited to 'qmk/keyboards/sofle_choc/keymaps/custom/tap_hold_dance.h')
-rw-r--r--qmk/keyboards/sofle_choc/keymaps/custom/tap_hold_dance.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/tap_hold_dance.h b/qmk/keyboards/sofle_choc/keymaps/custom/tap_hold_dance.h
new file mode 100644
index 0000000..4c895d5
--- /dev/null
+++ b/qmk/keyboards/sofle_choc/keymaps/custom/tap_hold_dance.h
@@ -0,0 +1,25 @@
+#pragma once
+#include QMK_KEYBOARD_H
+#include "quad_tapdance.h"
+
+typedef struct {
+ td_state_t state;
+ const uint16_t tap;
+ const uint16_t hold;
+ uint16_t held;
+ bool left;
+} tap_hold_dance_t;
+
+void tap_hold_dance_each(tap_dance_state_t *state, void *user_data);
+void tap_hold_dance_finished(tap_dance_state_t *state, void *user_data);
+void tap_hold_dance_reset(tap_dance_state_t *state, void *user_data);
+void tap_hold_dance_released(tap_dance_state_t *state, void *user_data);
+void tap_hold_dance_process_record(uint16_t keycode, keyrecord_t *record);
+uint16_t tap_hold_dance_tapping_term(uint16_t keycode, keyrecord_t *record);
+
+#define ACTION_TAP_HOLD_DANCE(tap, hold, left) \
+ { \
+ .fn = {NULL, tap_hold_dance_finished, tap_hold_dance_reset, tap_hold_dance_released}, \
+ .user_data = (void *)&((tap_hold_dance_t){TD_NONE, tap, hold, 0, 0}), \
+ }
+