* to ease the maintenance for some boards ibnuda has. * followed ridingqwerty's suggestion on 8821. * folloing drashna's suggestion on qmk's 8221. * following drashn's suggestion on qmk's 8211
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "tapdance.h"
 | 
						|
 | 
						|
static td_state_t td_state;
 | 
						|
 | 
						|
void dance_dlt_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
						|
    if (state->count == 1) {
 | 
						|
        register_code16(KC_DELT);
 | 
						|
    } else {
 | 
						|
        register_code16(C(KC_DELT));
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void dance_dlt_reset(qk_tap_dance_state_t *state, void *user_data) {
 | 
						|
    if (state->count == 1) {
 | 
						|
        unregister_code16(KC_DELT);
 | 
						|
    } else {
 | 
						|
        unregister_code16(C(KC_DELT));
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void dance_cln_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
						|
    if (state->count == 1) {
 | 
						|
        register_code(KC_LSFT);
 | 
						|
    }
 | 
						|
    register_code(KC_SCLN);
 | 
						|
}
 | 
						|
 | 
						|
void dance_cln_reset(qk_tap_dance_state_t *state, void *user_data) {
 | 
						|
    if (state->count == 1) {
 | 
						|
        unregister_code(KC_LSFT);
 | 
						|
    }
 | 
						|
    unregister_code(KC_SCLN);
 | 
						|
}
 | 
						|
 | 
						|
int current_dance(qk_tap_dance_state_t *state) {
 | 
						|
    if (state->count == 1) {
 | 
						|
        if (state->interrupted || !state->pressed) {
 | 
						|
            return SINGLE_TAP;
 | 
						|
        } else {
 | 
						|
            return SINGLE_HOLD;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    if (state->count == 2) {
 | 
						|
        return DOUBLE_TAP;
 | 
						|
    } else {
 | 
						|
        return 3;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void dance_tmb_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
						|
    td_state = current_dance(state);
 | 
						|
    switch (td_state) {
 | 
						|
        case SINGLE_TAP:
 | 
						|
            register_code16(KC_ESC);
 | 
						|
            break;
 | 
						|
        case SINGLE_HOLD:
 | 
						|
            register_mods(MOD_BIT(KC_LSFT));
 | 
						|
            break;
 | 
						|
        case DOUBLE_TAP:
 | 
						|
            register_code16(KC_DELT);
 | 
						|
            break;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void dance_tmb_reset(qk_tap_dance_state_t *state, void *user_data) {
 | 
						|
    switch (td_state) {
 | 
						|
        case SINGLE_TAP:
 | 
						|
            unregister_code16(KC_ESC);
 | 
						|
            break;
 | 
						|
        case SINGLE_HOLD:
 | 
						|
            unregister_mods(MOD_BIT(KC_LSFT));
 | 
						|
            break;
 | 
						|
        case DOUBLE_TAP:
 | 
						|
            unregister_code16(KC_DELT);
 | 
						|
            break;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
qk_tap_dance_action_t tap_dance_actions[] = {
 | 
						|
    [TD_DLT_CTLDLT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_dlt_finished, dance_dlt_reset),
 | 
						|
    [TD_SCLN_CLN]   = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_cln_finished, dance_cln_reset),
 | 
						|
    [TD_LEFT_THUMB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_tmb_finished, dance_tmb_reset),
 | 
						|
};
 |