diff --git a/docs/config_options.md b/docs/config_options.md index 8cdcc97e495..42b6060d69d 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -123,21 +123,23 @@ If you define these options you will enable the associated feature, which may in ## Behaviors That Can Be Configured * `#define TAPPING_TERM 200` - * how long before a tap becomes a hold + * how long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too * `#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` * makes tap and hold keys work better for fast typers who don't want tapping term set above 500 +* `#define IGNORE_MOD_TAP_INTERRUPT` + * makes it possible to do rolling combos (zx) with keys that convert to other keys on hold +* `#define TAPPING_FORCE_HOLD` + * makes it possible to use a dual role key as modifier shortly after having been tapped * `#define LEADER_TIMEOUT 300` * how long before the leader key times out * `#define ONESHOT_TIMEOUT 300` * how long before oneshot times out * `#define ONESHOT_TAP_TOGGLE 2` * how many taps before oneshot toggle is triggered -* `#define IGNORE_MOD_TAP_INTERRUPT` - * makes it possible to do rolling combos (zx) with keys that convert to other keys on hold * `#define QMK_KEYS_PER_SCAN 4` * Allows sending more than one key per scan. By default, only one key event gets sent via `process_record()` per scan. This has little impact on most typing, but diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index aeb7ce1bf48..a4b681ec142 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -175,3 +175,31 @@ Example: (Tapping Term = 200ms) - SHFT_T(KC_A) Up With defaults, if above is typed within tapping term, this will emit `ax`. With permissive hold, if above is typed within tapping term, this will emit `X` (so, Shift+X). + +# Mod tap interrupt + +When a dual role key used for a modifier is quickly followed by another keys, it is interpreted as held even before the tapping term elapsed. This is a problem if a key is used for example inside a rolling combo because the second key will be pressed before the first key is released. + +For example, when trying to type the rolling combo "zx" and z being configured to send Ctrl when hold, z rapidly followed by x actually sends Ctrl-x. That's bad. + +You can disable this behavior by defining `IGNORE_MOD_TAP_INTERRUPT` in `config.h`. + +Note that this only concerns modifiers and not layer switching keys. + +# Hold after tap + +When the user holds a key after tap, this repeats the tapped key rather to hold a modifier key. This allows to use auto repeat for the tapped key. If you prefer to hold a modifier instead, define `TAPPING_FORCE_HOLD` in `config.h`. + +Example: + +- SHFT_T(KC_A) Down +- SHFT_T(KC_A) Up +- SHFT_T(KC_A) Down +- wait more than tapping term... +- SHFT_T(KC_A) Up + +With default settings, `a` will be sent on the first release, then `a` will be sent on the second press allowing the computer to trigger its auto repeat function. + +With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allowing to use it as a modifier shortly after having used it as a tap. + +!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).