Skip to content

Instantly share code, notes, and snippets.

@weilbith
Created November 1, 2019 14:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save weilbith/26cdac334c2fd76d5ed26adf10fa826c to your computer and use it in GitHub Desktop.
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
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