qmk/modules/getreuer/tap_flow/README.md

2.5 KiB
Raw Blame History

Tap Flow

Modulegetreuer/tap_flow
Version2025-03-15
MaintainerPascal Getreuer (@getreuer)
LicenseApache 2.0
Documentation https://getreuer.info/posts/keyboards/tap-flow

This module is an implementation of "global quick tap" (GQT), aka "require priori idle," for tap-hold keys. It is particularly useful for home row mods to avoid accidental mod triggers in fast typing.

To use this module, add the following to your keymap.json:

{
    "modules": ["getreuer/tap_flow"]
}

Tap Flow's term can be tuned on the fly with the following keycodes:

Keycode Alias Description
TAP_FLOW_PRINT TFLOW_P Type the current value.
TAP_FLOW_UP TFLOW_U Increase by 5 ms.
TAP_FLOW_DOWN TFLOW_D Decrease by 5 ms.

Tap Flow's default behavior is:

  • Filtering is done only when a tap-hold press is within TAP_FLOW_TERM of the previous key event, which defaults to 150 ms. Use TFLOW_U / TFLOW_D to tune, then define TAP_FLOW_TERM in your config.h to set the value printed by TFLOW_P.

  • Filtering is done only when both the tap-hold key and the previous key are among Space, letters AZ, and punctuations , . ; /. Define the get_tap_flow() callback to customize this logic.

Tap Flow modifies the tap-hold decision such that when a tap-hold key is pressed within a short timeout of the preceding key, the tapping function is used. The assumption is that during fast typing, only the tap function of tap-hold keys is desired (though perhaps with an exception for Shift or AltGr, noted below), whereas the hold functions (mods and layers) are used in isolation, or at least with a brief pause preceding the tap-hold key press.

Optionally, the feature can be customized with the get_tap_flow() callback. In this way, exceptions may be made for Shift and AltGr (or whatever you wish) to use a shorter time or to disable filtering for those keys entirely.

For full documentation, see https://getreuer.info/posts/keyboards/tap-flow