summaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
authorAlbert Y <76888457+filterpaper@users.noreply.github.com>2022-12-12 23:52:22 +0800
committerGitHub <noreply@github.com>2022-12-12 16:52:22 +0100
commitcbabc8dbe6a8476d3082e8bc649d330f87e7b904 (patch)
tree55e73275367047981295d046867d9f70352814c7 /quantum
parent8698d109d7c2f4554e0f3c01b017738a0a47f162 (diff)
[Core] Replace Tapping Force Hold feature with Quick Tap Term (#17007)
* Replace Tapping Force Hold feature with Quick Tap Term * Replace keyboard level TAPPING_FORCE_HOLD with QUICK_TAP_TERM 0 * Deprecate force hold in info_config.json * Before and after quick tap term unit tests * Quick tap unit tests iteration * Keymap config.h correction * Remove TAPPING_FORCE_HOLD_PER_KEY macros that were missed * Add two more test cases for quick tap * Replace TAPPING_FORCE_HOLD with QUICK_TAP_TERM in configs #2 * Replace TAPPING_FORCE_HOLD_PER_KEY with QUICK_TAP_TERM_PER_KEY in configs #2 * Add function declaration for get_quick_tap_term Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
Diffstat (limited to 'quantum')
-rw-r--r--quantum/action_tapping.c19
-rw-r--r--quantum/action_tapping.h13
2 files changed, 18 insertions, 14 deletions
diff --git a/quantum/action_tapping.c b/quantum/action_tapping.c
index b5386a5e17..0350495ae5 100644
--- a/quantum/action_tapping.c
+++ b/quantum/action_tapping.c
@@ -25,6 +25,7 @@
25# define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key)) && tapping_key.keycode == r->keycode) 25# define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key)) && tapping_key.keycode == r->keycode)
26# endif 26# endif
27# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < GET_TAPPING_TERM(get_record_keycode(&tapping_key, false), &tapping_key)) 27# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < GET_TAPPING_TERM(get_record_keycode(&tapping_key, false), &tapping_key))
28# define WITHIN_QUICK_TAP_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < GET_QUICK_TAP_TERM(get_record_keycode(&tapping_key, false), &tapping_key))
28 29
29# ifdef DYNAMIC_TAPPING_TERM_ENABLE 30# ifdef DYNAMIC_TAPPING_TERM_ENABLE
30uint16_t g_tapping_term = TAPPING_TERM; 31uint16_t g_tapping_term = TAPPING_TERM;
@@ -40,9 +41,9 @@ __attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *r
40} 41}
41# endif 42# endif
42 43
43# ifdef TAPPING_FORCE_HOLD_PER_KEY 44# ifdef QUICK_TAP_TERM_PER_KEY
44__attribute__((weak)) bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) { 45__attribute__((weak)) uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record) {
45 return false; 46 return QUICK_TAP_TERM;
46} 47}
47# endif 48# endif
48 49
@@ -121,7 +122,7 @@ void action_tapping_process(keyrecord_t record) {
121 * readable. The conditional definition of tapping_keycode and all the 122 * readable. The conditional definition of tapping_keycode and all the
122 * conditional uses of it are hidden inside macros named TAP_... 123 * conditional uses of it are hidden inside macros named TAP_...
123 */ 124 */
124# if (defined(AUTO_SHIFT_ENABLE) && defined(RETRO_SHIFT)) || defined(PERMISSIVE_HOLD_PER_KEY) || defined(TAPPING_FORCE_HOLD_PER_KEY) || defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY) 125# if (defined(AUTO_SHIFT_ENABLE) && defined(RETRO_SHIFT)) || defined(PERMISSIVE_HOLD_PER_KEY) || defined(QUICK_TAP_TERM_PER_KEY) || defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
125# define TAP_DEFINE_KEYCODE uint16_t tapping_keycode = get_record_keycode(&tapping_key, false) 126# define TAP_DEFINE_KEYCODE uint16_t tapping_keycode = get_record_keycode(&tapping_key, false)
126# else 127# else
127# define TAP_DEFINE_KEYCODE 128# define TAP_DEFINE_KEYCODE
@@ -169,14 +170,6 @@ void action_tapping_process(keyrecord_t record) {
169# define TAP_GET_IGNORE_MOD_TAP_INTERRUPT false 170# define TAP_GET_IGNORE_MOD_TAP_INTERRUPT false
170# endif 171# endif
171 172
172# ifdef TAPPING_FORCE_HOLD_PER_KEY
173# define TAP_GET_TAPPING_FORCE_HOLD get_tapping_force_hold(tapping_keycode, &tapping_key)
174# elif defined(TAPPING_FORCE_HOLD)
175# define TAP_GET_TAPPING_FORCE_HOLD true
176# else
177# define TAP_GET_TAPPING_FORCE_HOLD false
178# endif
179
180/** \brief Tapping 173/** \brief Tapping
181 * 174 *
182 * Rule: Tap key is typed(pressed and released) within TAPPING_TERM. 175 * Rule: Tap key is typed(pressed and released) within TAPPING_TERM.
@@ -385,7 +378,7 @@ bool process_tapping(keyrecord_t *keyp) {
385 if (WITHIN_TAPPING_TERM(event) || MAYBE_RETRO_SHIFTING(event)) { 378 if (WITHIN_TAPPING_TERM(event) || MAYBE_RETRO_SHIFTING(event)) {
386 if (event.pressed) { 379 if (event.pressed) {
387 if (IS_TAPPING_RECORD(keyp)) { 380 if (IS_TAPPING_RECORD(keyp)) {
388 if (!TAP_GET_TAPPING_FORCE_HOLD && !tapping_key.tap.interrupted && tapping_key.tap.count > 0) { 381 if (WITHIN_QUICK_TAP_TERM(event) && !tapping_key.tap.interrupted && tapping_key.tap.count > 0) {
389 // sequential tap. 382 // sequential tap.
390 keyp->tap = tapping_key.tap; 383 keyp->tap = tapping_key.tap;
391 if (keyp->tap.count < 15) keyp->tap.count += 1; 384 if (keyp->tap.count < 15) keyp->tap.count += 1;
diff --git a/quantum/action_tapping.h b/quantum/action_tapping.h
index bcccc7ac45..c078488c04 100644
--- a/quantum/action_tapping.h
+++ b/quantum/action_tapping.h
@@ -22,6 +22,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
22# define TAPPING_TERM 200 22# define TAPPING_TERM 200
23#endif 23#endif
24 24
25/* period of quick tap(ms) */
26#if !defined(QUICK_TAP_TERM) || QUICK_TAP_TERM > TAPPING_TERM
27# define QUICK_TAP_TERM TAPPING_TERM
28#endif
29
25/* tap count needed for toggling a feature */ 30/* tap count needed for toggling a feature */
26#ifndef TAPPING_TOGGLE 31#ifndef TAPPING_TOGGLE
27# define TAPPING_TOGGLE 5 32# define TAPPING_TOGGLE 5
@@ -36,9 +41,9 @@ void action_tapping_process(keyrecord_t record);
36#endif 41#endif
37 42
38uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record); 43uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record);
44uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record);
39bool get_permissive_hold(uint16_t keycode, keyrecord_t *record); 45bool get_permissive_hold(uint16_t keycode, keyrecord_t *record);
40bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record); 46bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record);
41bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record);
42bool get_retro_tapping(uint16_t keycode, keyrecord_t *record); 47bool get_retro_tapping(uint16_t keycode, keyrecord_t *record);
43bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record); 48bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record);
44 49
@@ -53,3 +58,9 @@ extern uint16_t g_tapping_term;
53#else 58#else
54# define GET_TAPPING_TERM(keycode, record) (TAPPING_TERM) 59# define GET_TAPPING_TERM(keycode, record) (TAPPING_TERM)
55#endif 60#endif
61
62#ifdef QUICK_TAP_TERM_PER_KEY
63# define GET_QUICK_TAP_TERM(keycode, record) get_quick_tap_term(keycode, record)
64#else
65# define GET_QUICK_TAP_TERM(keycode, record) (QUICK_TAP_TERM)
66#endif