[Core] Flow Tap tap-hold option to disable HRMs during fast typing (#25125)
aka Global Quick Tap, Require Prior Idle
This commit is contained in:
parent
a7bf8e64a5
commit
8d8dcb089e
11 changed files with 648 additions and 36 deletions
|
@ -111,6 +111,63 @@ char chordal_hold_handedness(keypos_t key);
|
|||
extern const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM;
|
||||
#endif
|
||||
|
||||
#ifdef FLOW_TAP_TERM
|
||||
/**
|
||||
* Callback to specify the keys where Flow Tap is enabled.
|
||||
*
|
||||
* Flow Tap is constrained to certain keys by the following rule: this callback
|
||||
* is called for both the tap-hold key *and* the key press immediately preceding
|
||||
* it. If the callback returns true for both keycodes, Flow Tap is enabled.
|
||||
*
|
||||
* The default implementation of this callback corresponds to
|
||||
*
|
||||
* bool is_flow_tap_key(uint16_t keycode) {
|
||||
* switch (get_tap_keycode(keycode)) {
|
||||
* case KC_SPC:
|
||||
* case KC_A ... KC_Z:
|
||||
* case KC_DOT:
|
||||
* case KC_COMM:
|
||||
* case KC_SCLN:
|
||||
* case KC_SLSH:
|
||||
* return true;
|
||||
* }
|
||||
* return false;
|
||||
* }
|
||||
*
|
||||
* @param keycode Keycode of the key.
|
||||
* @return Whether to enable Flow Tap for this key.
|
||||
*/
|
||||
bool is_flow_tap_key(uint16_t keycode);
|
||||
|
||||
/**
|
||||
* Callback to customize Flow Tap filtering.
|
||||
*
|
||||
* Flow Tap acts only when key events are closer together than this time.
|
||||
*
|
||||
* Return a time of 0 to disable filtering. In this way, Flow Tap may be
|
||||
* disabled for certain tap-hold keys, or when following certain previous keys.
|
||||
*
|
||||
* The default implementation of this callback is
|
||||
*
|
||||
* uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t* record,
|
||||
* uint16_t prev_keycode) {
|
||||
* if (is_flow_tap_key(keycode) && is_flow_tap_key(prev_keycode)) {
|
||||
* return g_flow_tap_term;
|
||||
* }
|
||||
* return 0;
|
||||
* }
|
||||
*
|
||||
* NOTE: If both `is_flow_tap_key()` and `get_flow_tap_term()` are defined, then
|
||||
* `get_flow_tap_term()` takes precedence.
|
||||
*
|
||||
* @param keycode Keycode of the tap-hold key.
|
||||
* @param record keyrecord_t of the tap-hold event.
|
||||
* @param prev_keycode Keycode of the previously pressed key.
|
||||
* @return Time in milliseconds.
|
||||
*/
|
||||
uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t *record, uint16_t prev_keycode);
|
||||
#endif // FLOW_TAP_TERM
|
||||
|
||||
#ifdef DYNAMIC_TAPPING_TERM_ENABLE
|
||||
extern uint16_t g_tapping_term;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue