@ -93,6 +93,7 @@ void action_exec(keyevent_t event)
# ifdef SWAP_HANDS_ENABLE
# ifdef SWAP_HANDS_ENABLE
bool swap_hands = false ;
bool swap_hands = false ;
bool swap_held = false ;
void process_hand_swap ( keyevent_t * event ) {
void process_hand_swap ( keyevent_t * event ) {
static swap_state_row_t swap_state [ MATRIX_ROWS ] ;
static swap_state_row_t swap_state [ MATRIX_ROWS ] ;
@ -132,6 +133,27 @@ bool process_record_quantum(keyrecord_t *record) {
return true ;
return true ;
}
}
# ifndef NO_ACTION_TAPPING
// Allows for handling tap-hold actions immediately instead of waiting for TAPPING_TERM or another keypress.
void process_record_tap_hint ( keyrecord_t * record )
{
action_t action = layer_switch_get_action ( record - > event . key ) ;
switch ( action . kind . id ) {
# ifdef SWAP_HANDS_ENABLE
case ACT_SWAP_HANDS :
switch ( action . swap . code ) {
case OP_SH_TAP_TOGGLE :
default :
swap_hands = ! swap_hands ;
swap_held = true ;
}
break ;
# endif
}
}
# endif
void process_record ( keyrecord_t * record )
void process_record ( keyrecord_t * record )
{
{
if ( IS_NOEVENT ( record - > event ) ) { return ; }
if ( IS_NOEVENT ( record - > event ) ) { return ; }
@ -551,23 +573,37 @@ void process_action(keyrecord_t *record, action_t action)
# ifndef NO_ACTION_TAPPING
# ifndef NO_ACTION_TAPPING
case OP_SH_TAP_TOGGLE :
case OP_SH_TAP_TOGGLE :
/* tap toggle */
/* tap toggle */
if ( tap_count > 0 ) {
if ( ! event . pressed ) {
if ( event . pressed ) {
if ( swap_held ) {
swap_held = false ;
} else {
swap_hands = ! swap_hands ;
swap_hands = ! swap_hands ;
}
}
} else {
} else {
swap_hands = event . pressed ;
if ( tap_count < TAPPING_TOGGLE ) {
swap_hands = ! swap_hands ;
}
}
}
break ;
break ;
default :
default :
/* tap key */
if ( tap_count > 0 ) {
if ( tap_count > 0 ) {
if ( swap_held ) {
swap_hands = ! swap_hands ; // undo hold set up in _tap_hint
swap_held = false ;
}
if ( event . pressed ) {
if ( event . pressed ) {
register_code ( action . swap . code ) ;
register_code ( action . swap . code ) ;
} else {
} else {
unregister_code ( action . swap . code ) ;
unregister_code ( action . swap . code ) ;
* record = ( keyrecord_t ) { } ; // hack: reset tap mode
}
}
} else {
} else {
swap_hands = event . pressed ;
if ( swap_held & & ! event . pressed ) {
swap_hands = ! swap_hands ; // undo hold set up in _tap_hint
swap_held = false ;
}
}
}
# endif
# endif
}
}