mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-12-25 10:44:59 +06:00
74223c34a9
* `KC_RSHIFT` -> `KC_RSFT` * `KC_RCTRL` -> `KC_RCTL` * `KC_LSHIFT` -> `KC_LSFT` * `KC_LCTRL` -> `KC_LCTL`
128 lines
3.1 KiB
C
128 lines
3.1 KiB
C
#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_LEFT_BRACKET));
|
|
else
|
|
tap_code16(S(KC_9));
|
|
break;
|
|
case 2:
|
|
if (state->pressed)
|
|
tap_code16(S(KC_COMM));
|
|
else
|
|
tap_code(KC_LEFT_BRACKET);
|
|
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_RIGHT_BRACKET));
|
|
else
|
|
tap_code16(S(KC_0));
|
|
break;
|
|
case 2:
|
|
if (state->pressed)
|
|
tap_code16(S(KC_DOT));
|
|
else
|
|
tap_code(KC_RIGHT_BRACKET);
|
|
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_RSFT);
|
|
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_RSFT);
|
|
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),
|
|
};
|