<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qmk_sweep_skeletyl/quantum/action_tapping.h, branch master</title>
<subtitle>my qmk configs</subtitle>
<id>http://archive.git.mgrote.net/qmk_sweep_skeletyl/atom?h=master</id>
<link rel='self' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/'/>
<updated>2025-11-11T11:27:12+00:00</updated>
<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>
</author>
<published>2025-11-11T11:27:12+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=efc5d63383b64291f25c8377bcfae8178dd63302'/>
<id>urn:sha1:efc5d63383b64291f25c8377bcfae8178dd63302</id>
<content type='text'>
</content>
</entry>
<entry>
<title>making flowtap timer public so it can be used easily with combos (#25731)</title>
<updated>2025-11-01T23:17:50+00:00</updated>
<author>
<name>Nimish Gåtam</name>
</author>
<published>2025-11-01T23:17:50+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=8c93a33cd3c77ad3296c84a642d5f889fd13fac7'/>
<id>urn:sha1:8c93a33cd3c77ad3296c84a642d5f889fd13fac7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>[Bug][Core] Fix for Flow Tap: fix handling of distinct taps and timer updates. (#25175)</title>
<updated>2025-04-22T07:59:49+00:00</updated>
<author>
<name>Pascal Getreuer</name>
</author>
<published>2025-04-22T07:59:49+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=73e2ef486ab7acf3763695cb3a3cf691451cdff3'/>
<id>urn:sha1:73e2ef486ab7acf3763695cb3a3cf691451cdff3</id>
<content type='text'>
* Flow Tap bug fix.

As reported by @amarz45 and @mwpardue, there is a bug where if two
tap-hold keys are pressed in distinct taps back to back, then Flow Tap
is not applied on the second tap-hold key, but it should be.

In a related bug reported by @NikGovorov, if a tap-hold key is held
followed by a tap of a tap-hold key, then Flow Tap updates its timer on
the release of the held tap-hold key, but it should be ignored.

The problem common to both these bugs is that I incorrectly assumed
`tapping_key` is cleared to noevent once it is released, when actually
`tapping_key` is still maintained for `TAPPING_TERM` ms after release
(for Quick Tap). This commit fixes that. Thanks to @amarz45, @mwpardue,
and @NikGovorov for reporting!

Details:

* Logic for converting the current tap-hold event to a tap is extracted
  to `flow_tap_key_if_within_term()`, which is now invoked also in the
  post-release "interfered with other tap key" case. This fixes the
  distinct taps bug.

* The Flow Tap timer is now updated at the beginning of each call to
  `process_record()`, provided that there is no unsettled tap-hold key
  at that time and that the record is not for a mod or layer switch key.
  By moving this update logic to `process_record()`, it is conceptually
  simpler and more robust.

* Unit tests extended to cover the reported scenarios.

* Fix formatting.

* Revision to fix @NikGovorov's scenario.

The issue is that when another key is pressed while a layer-tap hasn't
been settled yet, the `prev_keycode` remembers the keycode from before
the layer switched. This can then enable Flow Tap for the following key
when it shouldn't, or vice versa.

Thanks to @NikGovorov for reporting!

This commit revises Flow Tap in the following ways:

* The previous key and timer are both updated from `process_record()`.
  This is slightly later in the sequence of processing than before, and
  by this point, a just-settled layer-tap should have taken effect so
  that the keycode from the correct layer is remembered.

* The Flow Tap previous key and timer are updated now also on key
  release events, except for releases of modifiers and held layer
  switches.

* The Flow Tap previous key and timer are now updated together, for
  simplicity. This makes the logic easier to think about.

* A few additional unit tests, including @NikGovorov's scenario as
  "layer_tap_ignored_with_disabled_key_complex."</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>
</author>
<published>2025-04-14T16:46:24+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=8d8dcb089ed36e7e1a61d77e5a4b6b08c8668869'/>
<id>urn:sha1:8d8dcb089ed36e7e1a61d77e5a4b6b08c8668869</id>
<content type='text'>
aka Global Quick Tap, Require Prior Idle</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>
</author>
<published>2025-01-27T11:32:23+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=544ddde113657a932275399f577a422a809d2880'/>
<id>urn:sha1: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>
</entry>
<entry>
<title>[Chore] Remove stray mod tap interrupt defines and per key functions (#20347)</title>
<updated>2023-04-05T23:04:23+00:00</updated>
<author>
<name>Stefan Kerkmann</name>
</author>
<published>2023-04-05T23:04:23+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=73b376a88151d03d43e0eca8242faa4bad199ac0'/>
<id>urn:sha1:73b376a88151d03d43e0eca8242faa4bad199ac0</id>
<content type='text'>
* Remove stray defines and per key functions

* Remove defunct get_ignore_mod_tap_interrupt declaration</content>
</entry>
<entry>
<title>Fix functions when `NO_ACTION_TAPPING` is defined (#11528)</title>
<updated>2023-02-19T01:08:03+00:00</updated>
<author>
<name>Drashna Jaelre</name>
</author>
<published>2023-02-19T01:08:03+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=48a79b08ccbcd0af5269e2e9334042c8347d18f8'/>
<id>urn:sha1:48a79b08ccbcd0af5269e2e9334042c8347d18f8</id>
<content type='text'>

</content>
</entry>
<entry>
<title>[Core] Replace Tapping Force Hold feature with Quick Tap Term (#17007)</title>
<updated>2022-12-12T15:52:22+00:00</updated>
<author>
<name>Albert Y</name>
</author>
<published>2022-12-12T15:52:22+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=cbabc8dbe6a8476d3082e8bc649d330f87e7b904'/>
<id>urn:sha1:cbabc8dbe6a8476d3082e8bc649d330f87e7b904</id>
<content type='text'>
* Replace Tapping Force Hold feature with Quick Tap Term

* Replace keyboard level TAPPING_FORCE_HOLD with QUICK_TAP_TERM 0

* Deprecate force hold in info_config.json

* Before and after quick tap term unit tests

* Quick tap unit tests iteration

* Keymap config.h correction

* Remove TAPPING_FORCE_HOLD_PER_KEY macros that were missed

* Add two more test cases for quick tap

* Replace TAPPING_FORCE_HOLD with QUICK_TAP_TERM in configs #2

* Replace TAPPING_FORCE_HOLD_PER_KEY with QUICK_TAP_TERM_PER_KEY in configs #2

* Add function declaration for get_quick_tap_term

Co-authored-by: Stefan Kerkmann &lt;karlk90@pm.me&gt;</content>
</entry>
<entry>
<title>Add missing prototype for get_hold_on_other_key_press to resolve #18855 (#19056)</title>
<updated>2022-11-13T16:34:59+00:00</updated>
<author>
<name>nicknimchuk</name>
</author>
<published>2022-11-13T16:34:59+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=c1ef943ce0dccacd222b66cffaac43417c840373'/>
<id>urn:sha1:c1ef943ce0dccacd222b66cffaac43417c840373</id>
<content type='text'>
Closes undefined</content>
</entry>
<entry>
<title>Add GET_TAPPING_TERM macro to reduce duplicate code (#16681)</title>
<updated>2022-04-16T18:24:09+00:00</updated>
<author>
<name>Jouke Witteveen</name>
</author>
<published>2022-04-16T18:24:09+00:00</published>
<link rel='alternate' type='text/html' href='http://archive.git.mgrote.net/qmk_sweep_skeletyl/commit/?id=8f585153c470b07bb0c529ff49b39ef45f68d37e'/>
<id>urn:sha1:8f585153c470b07bb0c529ff49b39ef45f68d37e</id>
<content type='text'>
* Add GET_TAPPING_TERM macro to reduce duplicate code

The macro gives the right tapping term depending on whether per-key
tapping terms and/or dynamic tapping terms are enabled. Unnecessary
function calls and variable resolution are avoided.

Fixes #16472.

* Use GET_TAPPING_TERM for Cirque trackpads

Co-authored-by: Stefan Kerkmann &lt;karlk90@pm.me&gt;</content>
</entry>
</feed>
