<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qmk_firmware/docs/tap_hold.md, branch master</title>
<subtitle>QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)</subtitle>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/'/>
<entry>
<title>docs/tap_hold.md fixes: Note that Chordal Hold supports multiple same-side mods and fix heading for Speculative Hold. (#25924)</title>
<updated>2026-01-03T23:00:50+00:00</updated>
<author>
<name>Pascal Getreuer</name>
<email>50221757+getreuer@users.noreply.github.com</email>
</author>
<published>2026-01-03T23:00:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=31948625020db943f2a5272a43876983c404d814'/>
<id>31948625020db943f2a5272a43876983c404d814</id>
<content type='text'>
* Note Chordal Hold supports multiple same-side mods.

* Fix "Speculative Hold" heading from H3 -&gt; H2.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Note Chordal Hold supports multiple same-side mods.

* Fix "Speculative Hold" heading from H3 -&gt; H2.</pre>
</div>
</content>
</entry>
<entry>
<title>[Core] Speculative Hold option for mod-taps: hold mods instantly while unsettled. (#25572)</title>
<updated>2025-11-11T11:27:12+00:00</updated>
<author>
<name>Pascal Getreuer</name>
<email>50221757+getreuer@users.noreply.github.com</email>
</author>
<published>2025-11-11T11:27:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=efc5d63383b64291f25c8377bcfae8178dd63302'/>
<id>efc5d63383b64291f25c8377bcfae8178dd63302</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[Docs] Tap-Hold examples (#24391)</title>
<updated>2025-10-18T10:17:57+00:00</updated>
<author>
<name>Rin Jun Kit Liu</name>
<email>30439030+DesyncTheThird@users.noreply.github.com</email>
</author>
<published>2025-10-18T10:17:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=969f324de4b029574e48bfb85c3b030a41bd4d06'/>
<id>969f324de4b029574e48bfb85c3b030a41bd4d06</id>
<content type='text'>
* Update tap_hold.md

Minor grammar/punctuation changes;
Added some more tap-hold examples;
Added a link about home row mods to the reference near the end;
Replaced directional quotation marks with symmetric variant, as this seem to be the only page using them;
Standardised formatting of "tap-hold" (hyphenated is slightly more frequent in existing documentation, so I went with that), as well as "Mod-Tap"/"Layer-Tap".

* Update docs/tap_hold.md

Co-authored-by: Ryan &lt;fauxpark@gmail.com&gt;

* Update docs/tap_hold.md

Co-authored-by: Ryan &lt;fauxpark@gmail.com&gt;

---------

Co-authored-by: Ryan &lt;fauxpark@gmail.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Update tap_hold.md

Minor grammar/punctuation changes;
Added some more tap-hold examples;
Added a link about home row mods to the reference near the end;
Replaced directional quotation marks with symmetric variant, as this seem to be the only page using them;
Standardised formatting of "tap-hold" (hyphenated is slightly more frequent in existing documentation, so I went with that), as well as "Mod-Tap"/"Layer-Tap".

* Update docs/tap_hold.md

Co-authored-by: Ryan &lt;fauxpark@gmail.com&gt;

* Update docs/tap_hold.md

Co-authored-by: Ryan &lt;fauxpark@gmail.com&gt;

---------

Co-authored-by: Ryan &lt;fauxpark@gmail.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[Docs] Fix typo in Chordal Hold example JSON, comma to colon. (#25424)</title>
<updated>2025-06-28T03:21:12+00:00</updated>
<author>
<name>Pascal Getreuer</name>
<email>50221757+getreuer@users.noreply.github.com</email>
</author>
<published>2025-06-28T03:21:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=b42191a2dda9b52470c1fd8cca341fe5f7ca0576'/>
<id>b42191a2dda9b52470c1fd8cca341fe5f7ca0576</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[Docs] Fix tap_hold code blocks (#25298)</title>
<updated>2025-05-24T18:00:22+00:00</updated>
<author>
<name>Joel Challis</name>
<email>git@zvecr.com</email>
</author>
<published>2025-05-24T18:00:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=8b7c351e562f13bae5f25efb0120e13cfa491e9b'/>
<id>8b7c351e562f13bae5f25efb0120e13cfa491e9b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[Core] Flow Tap tap-hold option to disable HRMs during fast typing (#25125)</title>
<updated>2025-04-14T16:46:24+00:00</updated>
<author>
<name>Pascal Getreuer</name>
<email>50221757+getreuer@users.noreply.github.com</email>
</author>
<published>2025-04-14T16:46:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=8d8dcb089ed36e7e1a61d77e5a4b6b08c8668869'/>
<id>8d8dcb089ed36e7e1a61d77e5a4b6b08c8668869</id>
<content type='text'>
aka Global Quick Tap, Require Prior Idle</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
aka Global Quick Tap, Require Prior Idle</pre>
</div>
</content>
</entry>
<entry>
<title>[Core] Add Chordal Hold, an "opposite hands rule" tap-hold option similar to Achordion, Bilateral Combinations. (#24560)</title>
<updated>2025-01-27T11:32:23+00:00</updated>
<author>
<name>Pascal Getreuer</name>
<email>50221757+getreuer@users.noreply.github.com</email>
</author>
<published>2025-01-27T11:32:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=544ddde113657a932275399f577a422a809d2880'/>
<id>544ddde113657a932275399f577a422a809d2880</id>
<content type='text'>
* Chordal Hold: restrict what chords settle as hold

* Chordal Hold: docs and further improvements

* Fix formatting.

* Doc rewording and minor edit.

* Support Chordal Hold of multiple tap-hold keys.

* Fix formatting.

* Simplification and additional test.

* Fix formatting.

* Tighten tests.

* Add test two_mod_taps_same_hand_hold_til_timeout.

* Revise handing of pairs of tap-hold keys.

* Generate a default chordal_hold_layout.

* Document chordal_hold_handedness().

* Add license notice to new and branched files in PR.

* Add `tapping.chordal_hold` property for info.json.

* Update docs/reference_info_json.md

* Revise "hand" jsonschema.

* Chordal Hold: Improved layout handedness heuristic.

This commit improves the heuristic used in generate-keyboard-c for
inferring key handedness from keyboard.json geometry data.

Heuristic summary:

1. If the layout is symmetric (e.g. most split keyboards), guess the
   handedness based on the sign of (x - layout_x_midpoint).

2. Otherwise, if the layout has a key of &gt;=6u width, it is probably the
   spacebar. Form a dividing line through the spacebar, nearly vertical
   but with a slight angle to follow typical row stagger.

3. Otherwise, assume handedness based on the widest horizontal
   separation.

I have tested this strategy on a couple dozen keyboards and found it to
work reliably.

* Use Optional instead of `| None`.

* Refactor to avoid lambdas.

* Remove trailing comma in chordal_hold_layout.

* Minor docs edits.

* Revise to allow combining multiple same-hand mods.

This commit revises Chordal Hold as described in discussion in
https://github.com/qmk/qmk_firmware/pull/24560#discussion_r1894655238

1. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RCTL_T(KC_A)↑" before the tapping
   term, RCTL_T(KC_A) is settled as tapped.
2. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RSFT_T(KC_C)↑", both RCTL_T(KC_A)
   and RSFT_T(KC_C) are settled as tapped.
3. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, KC_U↓" (all keys on the same side),
   both RCTL_T(KC_A) and RSFT_T(KC_C) are settled as tapped.
4. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, LSFT_T(KC_T)↓", with the third key
   on the other side, we allow Permissive Hold or Hold On Other Keypress
   to decide how/when to settle the keys.
5. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓" held until the tapping term, the
   keys are settled as held.

1–3 provide same-hand roll protection. 4–5 are for combining multiple
same-hand modifiers.

I've updated the unit tests and have been running it on my keyboard, for
a few hours so far, and all seems good. I really like this scheme. It
allows combining same-side mods, yet it also has roll protection on
streaks. For me, this feels like Achordion, but clearly better streak
handling and improved responsiveness.

* Fix formatting.

* Add a couple tests with LT keys.

* Remove stale use of CHORDAL_HOLD_LAYOUT.

* Fix misspelling lastest -&gt; latest

* Handling tweak for LTs and tests.

* Fix formatting.

* More tests with LT keys.

* Fix formatting.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Chordal Hold: restrict what chords settle as hold

* Chordal Hold: docs and further improvements

* Fix formatting.

* Doc rewording and minor edit.

* Support Chordal Hold of multiple tap-hold keys.

* Fix formatting.

* Simplification and additional test.

* Fix formatting.

* Tighten tests.

* Add test two_mod_taps_same_hand_hold_til_timeout.

* Revise handing of pairs of tap-hold keys.

* Generate a default chordal_hold_layout.

* Document chordal_hold_handedness().

* Add license notice to new and branched files in PR.

* Add `tapping.chordal_hold` property for info.json.

* Update docs/reference_info_json.md

* Revise "hand" jsonschema.

* Chordal Hold: Improved layout handedness heuristic.

This commit improves the heuristic used in generate-keyboard-c for
inferring key handedness from keyboard.json geometry data.

Heuristic summary:

1. If the layout is symmetric (e.g. most split keyboards), guess the
   handedness based on the sign of (x - layout_x_midpoint).

2. Otherwise, if the layout has a key of &gt;=6u width, it is probably the
   spacebar. Form a dividing line through the spacebar, nearly vertical
   but with a slight angle to follow typical row stagger.

3. Otherwise, assume handedness based on the widest horizontal
   separation.

I have tested this strategy on a couple dozen keyboards and found it to
work reliably.

* Use Optional instead of `| None`.

* Refactor to avoid lambdas.

* Remove trailing comma in chordal_hold_layout.

* Minor docs edits.

* Revise to allow combining multiple same-hand mods.

This commit revises Chordal Hold as described in discussion in
https://github.com/qmk/qmk_firmware/pull/24560#discussion_r1894655238

1. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RCTL_T(KC_A)↑" before the tapping
   term, RCTL_T(KC_A) is settled as tapped.
2. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RSFT_T(KC_C)↑", both RCTL_T(KC_A)
   and RSFT_T(KC_C) are settled as tapped.
3. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, KC_U↓" (all keys on the same side),
   both RCTL_T(KC_A) and RSFT_T(KC_C) are settled as tapped.
4. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, LSFT_T(KC_T)↓", with the third key
   on the other side, we allow Permissive Hold or Hold On Other Keypress
   to decide how/when to settle the keys.
5. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓" held until the tapping term, the
   keys are settled as held.

1–3 provide same-hand roll protection. 4–5 are for combining multiple
same-hand modifiers.

I've updated the unit tests and have been running it on my keyboard, for
a few hours so far, and all seems good. I really like this scheme. It
allows combining same-side mods, yet it also has roll protection on
streaks. For me, this feels like Achordion, but clearly better streak
handling and improved responsiveness.

* Fix formatting.

* Add a couple tests with LT keys.

* Remove stale use of CHORDAL_HOLD_LAYOUT.

* Fix misspelling lastest -&gt; latest

* Handling tweak for LTs and tests.

* Fix formatting.

* More tests with LT keys.

* Fix formatting.</pre>
</div>
</content>
</entry>
<entry>
<title>[docs] Organize driver &amp; feature docs into subfolders (#23848)</title>
<updated>2024-06-02T02:42:24+00:00</updated>
<author>
<name>Ryan</name>
<email>fauxpark@gmail.com</email>
</author>
<published>2024-06-02T02:42:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=78a0adfbb4d2c4e12f93f2a62ded0020d406243e'/>
<id>78a0adfbb4d2c4e12f93f2a62ded0020d406243e</id>
<content type='text'>
Co-authored-by: Nick Brassel &lt;nick@tzarc.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-authored-by: Nick Brassel &lt;nick@tzarc.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Vitepress conversion of docs. (#23795)</title>
<updated>2024-05-30T02:00:41+00:00</updated>
<author>
<name>Nick Brassel</name>
<email>nick@tzarc.org</email>
</author>
<published>2024-05-30T02:00:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=6ef97172889ccd5db376b2a9f8825489e24fdac4'/>
<id>6ef97172889ccd5db376b2a9f8825489e24fdac4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed non-executable codes in the documentation (#22600)</title>
<updated>2023-12-05T19:06:06+00:00</updated>
<author>
<name>atti</name>
<email>18576384+at6ue@users.noreply.github.com</email>
</author>
<published>2023-12-05T19:06:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/qmk_firmware/commit/?id=87eaab600c47441651d864a45818b5fcc7e46a26'/>
<id>87eaab600c47441651d864a45818b5fcc7e46a26</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
