|
@@ -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),
|
|
|
|
+};
|