Created
November 1, 2019 14:20
-
-
Save weilbith/26cdac334c2fd76d5ed26adf10fa826c to your computer and use it in GitHub Desktop.
QMK firmware Mod-Tab simulation with Tab-Dance for One-Shot-Modifier feature
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typedef enum { | |
SINGLE_TAP, | |
SINGLE_HOLD, | |
} td_state_t; | |
static td_state_t td_state; | |
int cur_dance (qk_tap_dance_state_t *state); | |
void gui_control_finished (qk_tap_dance_state_t * state, void *user_data); | |
void gui_control_reset (qk_tap_dance_state_t* state, void *user_data); | |
int cur_dance (qk_tap_dance_state_t *state) { | |
if (state->count == 1) { | |
if (state->interrupted || !state->pressed) { | |
return SINGLE_TAP; | |
} else { | |
return SINGLE_HOLD; | |
} | |
} else { | |
return 2; | |
} | |
}; | |
void gui_control_finished (qk_tap_dance_state_t *state, void *user_data) { | |
td_state = cur_dance(state); | |
switch (td_state) { | |
case SINGLE_TAP: | |
set_oneshot_mods(MOD_BIT(KC_LGUI)); | |
break; | |
case SINGLE_HOLD: | |
register_mods(MOD_BIT(KC_LCTL)); | |
break; | |
} | |
}; | |
void gui_control_reset (qk_tap_dance_state_t *state, void *user_data) { | |
switch (td_state) { | |
case SINGLE_TAP: | |
clear_oneshot_mods(); | |
break; | |
case SINGLE_HOLD: | |
unregister_mods(MOD_BIT(KC_LCTL)); | |
break; | |
} | |
}; | |
enum tab_dance_codes { | |
GUI_CONTROL = 0, | |
}; | |
qk_tap_dance_action_t tap_dance_actions[] = { | |
[GUI_CONTROL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, gui_control_finished, gui_control_reset), | |
}; | |
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
[LAYER_BASE] = LAYOUT_ergodox_pretty( | |
TD(GUI_CONTROL), .... | |
), | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment