From 04b9b62bdc5ed394a06c5c73acdce0b261220e85 Mon Sep 17 00:00:00 2001 From: tsankuanglee Date: Tue, 31 Oct 2017 11:15:22 -0400 Subject: [PATCH] RETRO_TAPPING (#1922) * add RETRO_TAP: tap anyway, even after TAP_TERM, if no interruption * consistent variable name * add option doc * change name for consistency * make RETRO_TAPPING default to off --- docs/config_options.md | 2 ++ tmk_core/common/action.c | 39 +++++++++++++++++++++++++++++--- tmk_core/common/action_tapping.h | 2 ++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/docs/config_options.md b/docs/config_options.md index de67630adc..faa9c64814 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -109,6 +109,8 @@ If you define these options you will enable the associated feature, which may in * `#define TAPPING_TERM 200` * how long before a tap becomes a hold +* `#define RETRO_TAPPING` + * tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release * `#define TAPPING_TOGGLE 2` * how many taps before triggering the toggle * `#define PERMISSIVE_HOLD` diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 41de014853..b39aa4cbc4 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -36,6 +36,10 @@ along with this program. If not, see . int tp_buttons; +#ifdef RETRO_TAPPING +int retro_tapping_counter = 0; +#endif + #ifdef FAUXCLICKY_ENABLE #include #endif @@ -45,6 +49,9 @@ void action_exec(keyevent_t event) if (!IS_NOEVENT(event)) { dprint("\n---- action_exec: start -----\n"); dprint("EVENT: "); debug_event(event); dprintln(); +#ifdef RETRO_TAPPING + retro_tapping_counter++; +#endif } #ifdef FAUXCLICKY_ENABLE @@ -586,6 +593,32 @@ void process_action(keyrecord_t *record, action_t action) } #endif +#ifndef NO_ACTION_TAPPING + #ifdef RETRO_TAPPING + if (!is_tap_key(record->event.key)) { + retro_tapping_counter = 0; + } else { + if (event.pressed) { + if (tap_count > 0) { + retro_tapping_counter = 0; + } else { + + } + } else { + if (tap_count > 0) { + retro_tapping_counter = 0; + } else { + if (retro_tapping_counter == 2) { + register_code(action.layer_tap.code); + unregister_code(action.layer_tap.code); + } + retro_tapping_counter = 0; + } + } + } + #endif +#endif + #ifndef NO_ACTION_ONESHOT /* Because we switch layers after a oneshot event, we need to release the * key before we leave the layer or no key up event will be generated. @@ -619,7 +652,7 @@ void register_code(uint8_t code) #endif add_key(KC_CAPSLOCK); send_keyboard_report(); - wait_ms(100); + wait_ms(100); del_key(KC_CAPSLOCK); send_keyboard_report(); } @@ -630,7 +663,7 @@ void register_code(uint8_t code) #endif add_key(KC_NUMLOCK); send_keyboard_report(); - wait_ms(100); + wait_ms(100); del_key(KC_NUMLOCK); send_keyboard_report(); } @@ -641,7 +674,7 @@ void register_code(uint8_t code) #endif add_key(KC_SCROLLLOCK); send_keyboard_report(); - wait_ms(100); + wait_ms(100); del_key(KC_SCROLLLOCK); send_keyboard_report(); } diff --git a/tmk_core/common/action_tapping.h b/tmk_core/common/action_tapping.h index 9b42d50dc3..2f143ae8b8 100644 --- a/tmk_core/common/action_tapping.h +++ b/tmk_core/common/action_tapping.h @@ -24,6 +24,8 @@ along with this program. If not, see . #define TAPPING_TERM 200 #endif +//#define RETRO_TAPPING // Tap anyway, even after TAPPING_TERM, as long as there was no interruption + /* tap count needed for toggling a feature */ #ifndef TAPPING_TOGGLE #define TAPPING_TOGGLE 5