Document recent ZMK patches
This commit is contained in:
parent
9953fb9205
commit
e1fc5b9336
2 changed files with 21 additions and 23 deletions
|
@ -7,7 +7,7 @@
|
|||
╰───────╮ LH2 LH1 LH0 │ │ RH0 RH1 RH2 ╭───────╯
|
||||
╰─────────────╯ ╰─────────────╯ */
|
||||
|
||||
// use require-prior-idle-ms for combos (requires PR 1387)
|
||||
// use require-prior-idle-ms for combos
|
||||
#undef COMBO_HOOK
|
||||
#define COMBO_HOOK require-prior-idle-ms = <150>;
|
||||
|
||||
|
|
42
readme.md
42
readme.md
|
@ -57,7 +57,7 @@ ZMK's best configuration options:
|
|||
Because that is exactly what I normally do with HRMs, there is virtually
|
||||
never a need to wait past my long tapping term (see below for two
|
||||
exceptions).
|
||||
* To address the typing delay, I use ZMK's `global-quick-tap` property, which
|
||||
* To address the typing delay, I use ZMK's `require-prior-idle-ms` property, which
|
||||
immediately resolves a HRM as "tap" when it is pressed shortly *after*
|
||||
another key has been tapped. This all but completely eliminates the delay.
|
||||
|
||||
|
@ -92,7 +92,7 @@ This is great but there are still a few rough edges:
|
|||
* Finally, it is worth noting that this setup works best in combination with a
|
||||
dedicated shift for capitalization during normal typing (I like sticky-shift
|
||||
on a home-thumb). This is because shifting alphas is the one scenario where
|
||||
pressing a mod may conflict with `global-quick-tap`, which may result in
|
||||
pressing a mod may conflict with `require-prior-idle-ms`, which may result in
|
||||
false negatives when typing fast.
|
||||
|
||||
Here's my configuration (I use a bunch of [helper
|
||||
|
@ -111,7 +111,7 @@ ZMK_BEHAVIOR(hml, hold_tap,
|
|||
flavor = "balanced";
|
||||
tapping-term-ms = <280>;
|
||||
quick-tap-ms = <175>; // repeat on tap-into-hold
|
||||
global-quick-tap-ms = <150>; // requires PR #1387
|
||||
require-prior-idle-ms = <150>;
|
||||
bindings = <&kp>, <&kp>;
|
||||
hold-trigger-key-positions = <KEYS_R THUMBS>;
|
||||
hold-trigger-on-release; // delay positional check until key-release
|
||||
|
@ -122,42 +122,40 @@ ZMK_BEHAVIOR(hmr, hold_tap,
|
|||
flavor = "balanced";
|
||||
tapping-term-ms = <280>;
|
||||
quick-tap-ms = <175>; // repeat on tap-into-hold
|
||||
global-quick-tap-ms = <150>; // requires PR #1387
|
||||
require-prior-idle-ms = <150>;
|
||||
bindings = <&kp>, <&kp>;
|
||||
hold-trigger-key-positions = <KEYS_L THUMBS>;
|
||||
hold-trigger-on-release; // delay positional check until key-release
|
||||
)
|
||||
```
|
||||
|
||||
Final note: the config above uses syntax introduced in [PR
|
||||
#1387](https://github.com/zmkfirmware/zmk/pull/1387), which decouples the
|
||||
`quick-tap-ms` timeout from the `global-quick-tap-ms` timeout. Without the PR,
|
||||
one can replace `global-quick-tap-ms = <150>` with `global-quick-tap` for a
|
||||
similar effect (`global-quick-tap` will use the regular `quick-tap-ms` timeout
|
||||
in this case).
|
||||
### Required firmware
|
||||
|
||||
My personal [ZMK fork](https://github.com/urob/zmk) includes the
|
||||
global-quick-tap-ms PR along with a few other PRs used in my config. If you
|
||||
prefer to maintain your own fork with a custom selection of PRs, you might find
|
||||
this [ZMK-centric introduction to
|
||||
Git](https://gist.github.com/urob/68a1e206b2356a01b876ed02d3f542c7) helpful.
|
||||
After a recent round of patches, the above configuration now works with
|
||||
upstream ZMK.
|
||||
|
||||
Other parts of my configuration still require a few PRs that aren't yet in
|
||||
upstream ZMK. My personal [ZMK fork](https://github.com/urob/zmk) includes all
|
||||
PRs needed to compile my configuration. If you prefer to maintain your own fork
|
||||
with a custom selection of PRs, you might find this [ZMK-centric introduction
|
||||
to Git](https://gist.github.com/urob/68a1e206b2356a01b876ed02d3f542c7) helpful.
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
Hopefully, the above configuration "just works". If it doesn't, here's a
|
||||
few smaller (and larger) things to try.
|
||||
|
||||
* **Noticeable delay when tapping HRMs:** Increase `global-quick-tap-ms`. As a rule of thumb,
|
||||
* **Noticeable delay when tapping HRMs:** Increase `require-prior-idle-ms`. As a rule of thumb,
|
||||
you want to set it to at least `10500/x` where `x` is your (relaxed) WPM for English prose.[^4]
|
||||
* **False negatives (same-hand):** Reduce `tapping-term-ms` (or disable
|
||||
`hold-trigger-key-positions`)
|
||||
* **False negatives (cross-hand):** Reduce `global-quick-tap-ms` (or set flavor
|
||||
* **False negatives (cross-hand):** Reduce `require-prior-idle-ms` (or set flavor
|
||||
to `hold-preferred` -- to continue using `hold-trigger-on-release`, you must
|
||||
also [patch
|
||||
ZMK](https://github.com/celejewski/zmk/commit/d7a8482712d87963e59b74238667346221199293)
|
||||
or use [an already patched branch](https://github.com/urob/zmk))
|
||||
* **False positives (same-hand):** Increase `tapping-term-ms`
|
||||
* **False positives (cross-hand):** Increase `global-quick-tap-ms` (or set
|
||||
* **False positives (cross-hand):** Increase `require-prior-idle-ms` (or set
|
||||
flavor to `tap-preferred`, which requires holding HRMs past tapping term to
|
||||
activate)
|
||||
|
||||
|
@ -168,7 +166,7 @@ over accessing layers that involve lateral thumb movements to be activated, espe
|
|||
when switching between different layers in rapid succession.
|
||||
|
||||
One common concern about overloading the layout with combos is that they lead to
|
||||
misfires. Fortunately, the above-mentioned PR #1387, also adds a `global-quick-tap` option
|
||||
misfires. Fortunately, the above-mentioned PR #1387, also adds a `require-prior-idle` option
|
||||
for combos, which in my experience all but completely eliminates the problem -- even
|
||||
when rolling keys on the home row!
|
||||
|
||||
|
@ -287,9 +285,9 @@ are a few remaining issues:
|
|||
|
||||
[^2]: I call it "timer-less", because the large tapping-term makes the behavior
|
||||
insensitive to the precise timings. One may say that there is still the
|
||||
`global-quick-tap` timeout. However, with both a large tapping-term and
|
||||
`require-prior-idle` timeout. However, with both a large tapping-term and
|
||||
positional-hold-taps, the behavior is *not* actually sensitive to the
|
||||
`global-quick-tap` timing: All it does is reduce the delay in typing; i.e., variations
|
||||
`require-prior-idle` timing: All it does is reduce the delay in typing; i.e., variations
|
||||
in typing speed won't affect *what* is being typed but merely *how fast* it appears on
|
||||
the screen.
|
||||
|
||||
|
@ -300,6 +298,6 @@ are a few remaining issues:
|
|||
[^4]: E.g, if your WPM is 70 or larger, then the default of 150ms (=10500/70)
|
||||
should work well. The rule of thumb is based on an average character length
|
||||
of 4.7 for English words. Taking into account 1 extra tap for `space`, this
|
||||
yields a minimum `global-quick-tap-ms` of (60 * 1000) / (5.7 * x) ≈ 10500 / x
|
||||
yields a minimum `require-prior-idle-ms` of (60 * 1000) / (5.7 * x) ≈ 10500 / x
|
||||
milliseconds. The approximation errs on the safe side,
|
||||
as in practice home row taps tend to be faster than average.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue