@ -1,6 +1,12 @@
/ / Tap Dance Settings
# include "wanleg.h"
/ / audio settings for one of the tap dances below
# ifdef AUDIO_ENABLE
float lyrup_song [ ] [ 2 ] = SONG ( MUSIC_ON_SOUND ) ;
float lyrdown_song [ ] [ 2 ] = SONG ( MUSIC_OFF_SOUND ) ;
# endif
/ / / / / QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION START / / / / /
/ / / / / ( no need to edit this section ) / / / / /
/ / Enums used to clearly convey the state of the tap dance
@ -9,7 +15,10 @@ enum {
SINGLE_HOLD = 2 ,
DOUBLE_TAP = 3 ,
DOUBLE_HOLD = 4 ,
DOUBLE_SINGLE_TAP = 5 / / send SINGLE_TAP twice - NOT DOUBLE_TAP
DOUBLE_SINGLE_TAP = 5 , / / send SINGLE_TAP twice - NOT DOUBLE_TAP
TRIPLE_TAP = 6 ,
TRIPLE_HOLD = 7 ,
TRIPLE_SINGLE_TAP = 8
/ / Add more enums here if you want for triple , quadruple , etc .
} ;
@ -32,69 +41,18 @@ int cur_dance (qk_tap_dance_state_t *state) {
else if ( state - > pressed ) return DOUBLE_HOLD ;
else return DOUBLE_TAP ;
}
else return 6 ; / / magic number . At some point this method will expand to work for more presses
}
/ / / / / QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END / / / / /
/ / / / / QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START / / / / /
/ / instantiate ' tap ' for the ' ENT ' tap dance .
static tap ENTtap_state = {
. is_press_action = true ,
. state = 0
} ;
void ENT_finished ( qk_tap_dance_state_t * state , void * user_data ) {
ENTtap_state . state = cur_dance ( state ) ;
switch ( ENTtap_state . state ) {
case SINGLE_TAP : register_code ( KC_SPC ) ; break ;
case SINGLE_HOLD : register_code ( KC_LSFT ) ; break ;
case DOUBLE_TAP : register_code ( KC_ENT ) ; break ;
case DOUBLE_HOLD : register_code ( KC_NO ) ; break ; / / setting double hold to do nothing ( change this if you want )
case DOUBLE_SINGLE_TAP : register_code ( KC_SPC ) ; unregister_code ( KC_SPC ) ; register_code ( KC_SPC ) ;
/ / Last case is for fast typing . Assuming your key is ` f ` :
/ / For example , when typing the word ` buffer ` , and you want to make sure that you send ` ff ` and not ` Esc ` .
/ / In order to type ` ff ` when typing fast , the next character will have to be hit within the ` TAPPING_TERM ` , which by default is 200 ms .
}
}
void ENT_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( ENTtap_state . state ) {
case SINGLE_TAP : unregister_code ( KC_SPC ) ; break ;
case SINGLE_HOLD : unregister_code ( KC_LSFT ) ; break ;
case DOUBLE_TAP : unregister_code ( KC_ENT ) ; break ;
case DOUBLE_HOLD : unregister_code ( KC_NO ) ;
case DOUBLE_SINGLE_TAP : unregister_code ( KC_SPC ) ;
}
ENTtap_state . state = 0 ;
}
/ / instantiate ' tap ' for the ' DEL ' tap dance .
static tap DELtap_state = {
. is_press_action = true ,
. state = 0
} ;
void DEL_finished ( qk_tap_dance_state_t * state , void * user_data ) {
DELtap_state . state = cur_dance ( state ) ;
switch ( DELtap_state . state ) {
case SINGLE_TAP : register_code ( KC_BSPC ) ; break ;
case SINGLE_HOLD : register_code ( KC_LCTL ) ; break ;
case DOUBLE_TAP : register_code ( KC_DEL ) ; break ;
case DOUBLE_HOLD : register_code ( KC_NO ) ; break ;
case DOUBLE_SINGLE_TAP : register_code ( KC_BSPC ) ; unregister_code ( KC_BSPC ) ; register_code ( KC_BSPC ) ;
}
}
void DEL_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( DELtap_state . state ) {
case SINGLE_TAP : unregister_code ( KC_BSPC ) ; break ;
case SINGLE_HOLD : unregister_code ( KC_LCTL ) ; break ;
case DOUBLE_TAP : unregister_code ( KC_DEL ) ; break ;
case DOUBLE_HOLD : unregister_code ( KC_NO ) ;
case DOUBLE_SINGLE_TAP : unregister_code ( KC_BSPC ) ;
/ / If count = 3 , and it has been interrupted - assume that user is trying to type the letter associated
/ / with double tap .
else if ( state - > count = = 3 ) {
if ( state - > interrupted ) return TRIPLE_SINGLE_TAP ;
else if ( state - > pressed ) return TRIPLE_HOLD ;
else return TRIPLE_TAP ;
}
DELtap_state . state = 0 ;
else return 9 ; / / magic number . At some point this method will expand to work for more presses
}
/ / / / / QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END / / / / /
/ / / / / QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START / / / / /
/ / instantiate ' tap ' for the ' CAD ' tap dance .
static tap CADtap_state = {
. is_press_action = true ,
@ -104,14 +62,14 @@ static tap CADtap_state = {
void CAD_finished ( qk_tap_dance_state_t * state , void * user_data ) {
CADtap_state . state = cur_dance ( state ) ;
switch ( CADtap_state . state ) {
case SINGLE_TAP :
/ / register_code ( KC_SPC ) ;
case SINGLE_TAP :
/ / register_code ( KC_SPC ) ;
SEND_STRING ( SS_LGUI ( " l " ) ) ;
# ifdef BACKLIGHT_ENABLE
backlight_set ( 3 ) ;
backlight_level ( 3 ) ;
# endif
break ;
case SINGLE_HOLD :
case SINGLE_HOLD :
/ / register_code ( KC_NO ) ;
/ / take a screenshot of a single window , open Paint and paste
SEND_STRING ( SS_LALT ( SS_TAP ( X_PSCREEN ) ) SS_LGUI ( " r " ) ) ;
@ -120,47 +78,37 @@ void CAD_finished (qk_tap_dance_state_t *state, void *user_data) {
_delay_ms ( 700 ) ;
SEND_STRING ( SS_LCTRL ( " v " ) ) ;
break ; / / register this keycode when button is held
case DOUBLE_TAP :
/ / register_code ( KC_ENT ) ;
case DOUBLE_TAP :
/ / register_code ( KC_ENT ) ;
SEND_STRING ( SS_LCTRL ( SS_LALT ( SS_TAP ( X_DELETE ) ) ) ) ;
# ifdef BACKLIGHT_ENABLE
backlight_set ( 0 ) ;
backlight_level ( 0 ) ;
# endif
break ;
/ / case DOUBLE_HOLD : register_code ( KC_NO ) ; break ; / / register this keycode when button is tapped and then held
case DOUBLE_HOLD :
reset_keyboard ( ) ;
case DOUBLE_HOLD :
reset_keyboard ( ) ;
break ; / / register this keycode when button is tapped and then held
case DOUBLE_SINGLE_TAP : register_code ( KC_NO ) ; unregister_code ( KC_NO ) ; register_code ( KC_NO ) ;
case TRIPLE_TAP :
SEND_STRING ( " wanleg@github.com " ) ;
break ;
case TRIPLE_HOLD :
set_single_persistent_default_layer ( 1 ) ;
# ifdef AUDIO_ENABLE
stop_all_notes ( ) ;
PLAY_SONG ( lyrup_song ) ;
# endif
break ;
}
}
void CAD_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( CADtap_state . state ) {
case SINGLE_TAP :
/ / unregister_code ( KC_SPC ) ;
SEND_STRING ( SS_LGUI ( " l " ) ) ;
# ifdef BACKLIGHT_ENABLE
backlight_set ( 3 ) ;
# endif
break ;
case SINGLE_HOLD :
register_code ( KC_NO ) ; / / ( un ) register this keycode when button is held and then released
/ / SEND_STRING ( SS_LCTRL ( " v " ) ) ;
break ;
case DOUBLE_TAP :
/ / register_code ( KC_ENT ) ;
SEND_STRING ( SS_LCTRL ( SS_LALT ( SS_TAP ( X_DELETE ) ) ) ) ;
# ifdef BACKLIGHT_ENABLE
backlight_set ( 0 ) ;
# endif
break ;
case DOUBLE_HOLD : register_code ( KC_NO ) ; / / ( un ) register this keycode when button is tapped and then held , and then released
case DOUBLE_SINGLE_TAP : unregister_code ( KC_NO ) ;
/ / nothing to do
}
CADtap_state . state = 0 ;
}
}
/ / instantiate ' tap ' for the ' RST ' tap dance .
static tap RSTtap_state = {
. is_press_action = true ,
@ -173,21 +121,18 @@ void RST_finished (qk_tap_dance_state_t *state, void *user_data) {
case SINGLE_TAP : register_code ( KC_LCTL ) ; break ;
case SINGLE_HOLD : register_code ( KC_LCTL ) ; break ;
case DOUBLE_TAP : reset_keyboard ( ) ; break ;
case DOUBLE_HOLD : register_code ( KC_NO ) ; break ;
case DOUBLE_SINGLE_TAP : register_code ( KC_LCTL ) ; unregister_code ( KC_LCTL ) ; register_code ( KC_LCTL ) ;
case DOUBLE_SINGLE_TAP : register_code ( KC_LCTL ) ; unregister_code ( KC_LCTL ) ; register_code ( KC_LCTL ) ; break ;
}
}
}
void RST_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( RSTtap_state . state ) {
case SINGLE_TAP : unregister_code ( KC_LCTL ) ; break ;
case SINGLE_HOLD : unregister_code ( KC_LCTL ) ; break ;
case DOUBLE_TAP : unregister_code ( KC_NO ) ; break ;
case DOUBLE_HOLD : unregister_code ( KC_NO ) ;
case DOUBLE_SINGLE_TAP : unregister_code ( KC_LCTL ) ;
case DOUBLE_SINGLE_TAP : unregister_code ( KC_LCTL ) ; break ;
}
RSTtap_state . state = 0 ;
}
}
/ / instantiate ' tap ' for the ' LYR ' tap dance .
static tap LYRtap_state = {
@ -199,23 +144,106 @@ void LYR_finished (qk_tap_dance_state_t *state, void *user_data) {
LYRtap_state . state = cur_dance ( state ) ;
switch ( LYRtap_state . state ) {
case SINGLE_TAP : register_code ( KC_PSLS ) ; break ;
case SINGLE_HOLD : register_code ( KC_NO ) ; break ;
case DOUBLE_TAP : set_single_persistent_default_layer ( _GK ) ; break ;
case DOUBLE_HOLD : register_code ( KC_NO ) ; break ;
case DOUBLE_SINGLE_TAP : register_code ( KC_PSLS ) ; unregister_code ( KC_PSLS ) ; register_code ( KC_PSLS ) ;
}
}
}
void LYR_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( LYRtap_state . state ) {
case SINGLE_TAP : unregister_code ( KC_PSLS ) ; break ;
case SINGLE_HOLD : unregister_code ( KC_NO ) ; break ;
case DOUBLE_TAP : set_single_persistent_default_layer ( _GK ) ; break ;
case DOUBLE_HOLD : unregister_code ( KC_NO ) ;
case DOUBLE_SINGLE_TAP : unregister_code ( KC_PSLS ) ;
}
LYRtap_state . state = 0 ;
}
}
/ / instantiate ' tap ' for the ' LYR75 ' tap dance .
static tap LYR75tap_state = {
. is_press_action = true ,
. state = 0
} ;
void LYR75_finished ( qk_tap_dance_state_t * state , void * user_data ) {
LYR75tap_state . state = cur_dance ( state ) ;
switch ( LYR75tap_state . state ) {
case SINGLE_TAP : register_code ( KC_PSLS ) ; break ;
case DOUBLE_TAP : set_single_persistent_default_layer ( GK75 ) ; break ;
case DOUBLE_SINGLE_TAP : register_code ( KC_PSLS ) ; unregister_code ( KC_PSLS ) ; register_code ( KC_PSLS ) ;
}
}
void LYR75_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( LYR75tap_state . state ) {
case SINGLE_TAP : unregister_code ( KC_PSLS ) ; break ;
case DOUBLE_TAP : set_single_persistent_default_layer ( GK75 ) ; break ;
case DOUBLE_SINGLE_TAP : unregister_code ( KC_PSLS ) ;
}
LYR75tap_state . state = 0 ;
}
/ / instantiate ' tap ' for the ' LYR50 ' tap dance .
static tap LYR50tap_state = {
. is_press_action = true ,
. state = 0
} ;
void LYR50_finished ( qk_tap_dance_state_t * state , void * user_data ) {
LYR50tap_state . state = cur_dance ( state ) ;
switch ( LYR75tap_state . state ) {
case SINGLE_TAP : register_code ( KC_PSLS ) ; break ;
case DOUBLE_TAP : set_single_persistent_default_layer ( GK50 ) ; break ;
case DOUBLE_SINGLE_TAP : register_code ( KC_PSLS ) ; unregister_code ( KC_PSLS ) ; register_code ( KC_PSLS ) ;
}
}
void LYR50_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( LYR50tap_state . state ) {
case SINGLE_TAP : unregister_code ( KC_PSLS ) ; break ;
case DOUBLE_TAP : set_single_persistent_default_layer ( GK50 ) ; break ;
case DOUBLE_SINGLE_TAP : unregister_code ( KC_PSLS ) ;
}
LYR50tap_state . state = 0 ;
}
/ / instantiate ' tap ' for the ' BSW ' tap dance .
static tap BSWtap_state = {
. is_press_action = true ,
. state = 0
} ;
void BSW_finished ( qk_tap_dance_state_t * state , void * user_data ) {
BSWtap_state . state = cur_dance ( state ) ;
switch ( BSWtap_state . state ) {
case SINGLE_TAP : register_code ( KC_ENTER ) ; break ;
case SINGLE_HOLD :
set_single_persistent_default_layer ( 0 ) ;
# ifdef AUDIO_ENABLE
stop_all_notes ( ) ;
PLAY_SONG ( lyrdown_song ) ;
# endif
break ;
case DOUBLE_TAP :
register_code ( KC_LCTRL ) ;
register_code ( KC_C ) ;
break ;
case DOUBLE_HOLD :
reset_keyboard ( ) ;
break ; / / register this keycode when button is tapped and then held
}
}
void BSW_reset ( qk_tap_dance_state_t * state , void * user_data ) {
switch ( BSWtap_state . state ) {
case SINGLE_TAP : unregister_code ( KC_ENTER ) ; break ;
case DOUBLE_TAP :
unregister_code ( KC_LCTRL ) ;
unregister_code ( KC_C ) ;
break ;
}
BSWtap_state . state = 0 ;
}
/ / / / / QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION END / / / / /
/ / Tap Dance Definitions
@ -224,12 +252,12 @@ qk_tap_dance_action_t tap_dance_actions[] = {
[ TD_SFT_CAPS ] = ACTION_TAP_DANCE_DOUBLE ( KC_LSFT , KC_CAPS )
/ / Other declarations would go here , separated by commas , if you have them
, [ TD_Q_ESC ] = ACTION_TAP_DANCE_DOUBLE ( KC_Q , KC_ESC )
, [ ENT_TAP_DANCE ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , ENT_finished , ENT_reset )
, [ DEL_TAP_DANCE ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , DEL_finished , DEL_reset )
, [ RST_TAP_DANCE ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , RST_finished , RST_reset )
, [ CAD_TD ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , CAD_finished , CAD_reset )
, [ LYR_TAP_DANCE ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , LYR_finished , LYR_reset )
, [ LYR75_TAP_DANCE ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , LYR75_finished , LYR75_reset )
, [ LYR50_TAP_DANCE ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , LYR50_finished , LYR50_reset )
, [ BSW_TAP_DANCE ] = ACTION_TAP_DANCE_FN_ADVANCED ( NULL , BSW_finished , BSW_reset )
} ;
/ / In Layer declaration , add tap dance item in place of a key code