aboutsummaryrefslogtreecommitdiffstats
path: root/users/pcoves/tapDance.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/pcoves/tapDance.c')
-rw-r--r--users/pcoves/tapDance.c127
1 files changed, 127 insertions, 0 deletions
diff --git a/users/pcoves/tapDance.c b/users/pcoves/tapDance.c
new file mode 100644
index 000000000..f8c9aaf46
--- /dev/null
+++ b/users/pcoves/tapDance.c
@@ -0,0 +1,127 @@
+#include "tapDance.h"
+
+#include "quantum.h"
+
+void left(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed)
+ tap_code16(S(KC_LBRACKET));
+ else
+ tap_code16(S(KC_9));
+ break;
+ case 2:
+ if (state->pressed)
+ tap_code16(S(KC_COMM));
+ else
+ tap_code(KC_LBRACKET);
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+void right(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed)
+ tap_code16(S(KC_RBRACKET));
+ else
+ tap_code16(S(KC_0));
+ break;
+ case 2:
+ if (state->pressed)
+ tap_code16(S(KC_DOT));
+ else
+ tap_code(KC_RBRACKET);
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+enum { REST, HOLD1, HOLD2, HOLD3 };
+
+static int Alt = REST;
+void altFinish(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed) {
+ register_code(KC_LALT);
+ Alt = HOLD1;
+ }
+ break;
+ case 2:
+ if (state->pressed) {
+ register_code(KC_RALT);
+ Alt = HOLD2;
+ }
+ break;
+ case 3:
+ if (state->pressed) {
+ register_code(KC_RALT);
+ register_code(KC_RSHIFT);
+ Alt = HOLD3;
+ }
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+void altReset(qk_tap_dance_state_t* state, void* user_data) {
+ switch (Alt) {
+ case HOLD1:
+ unregister_code(KC_LALT);
+ break;
+ case HOLD2:
+ unregister_code(KC_RALT);
+ break;
+ case HOLD3:
+ unregister_code(KC_RSHIFT);
+ unregister_code(KC_RALT);
+ break;
+ }
+ Alt = REST;
+}
+
+static int Ctrl = REST;
+void ctrlFinish(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed) {
+ register_code(KC_LCTL);
+ Ctrl = HOLD1;
+ } else {
+ tap_code(KC_ESC);
+ }
+ break;
+ case 2:
+ if (state->pressed) {
+ register_code(KC_LGUI);
+ Ctrl = HOLD2;
+ }
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+void ctrlReset(qk_tap_dance_state_t* state, void* user_data) {
+ switch (Ctrl) {
+ case HOLD1:
+ unregister_code(KC_LCTL);
+ break;
+ case HOLD2:
+ unregister_code(KC_LGUI);
+ break;
+ }
+ Ctrl = REST;
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [ALT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altFinish, altReset),
+ [CTRL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlFinish, ctrlReset),
+ [LEFT] = ACTION_TAP_DANCE_FN(left),
+ [RIGHT] = ACTION_TAP_DANCE_FN(right),
+};