mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-11-30 12:47:37 +06:00
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_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),
|
||
|
};
|