qmk/docs
Pascal Getreuer 544ddde113
[Core] Add Chordal Hold, an "opposite hands rule" tap-hold option similar to Achordion, Bilateral Combinations. (#24560)
* 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 >=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 -> latest

* Handling tweak for LTs and tests.

* Fix formatting.

* More tests with LT keys.

* Fix formatting.
2025-01-27 12:32:23 +01:00
..
ChangeLog
drivers
features
public
__capabilities.md
__capabilities_inc.md
_aliases.json
_sidebar.json
api_development_environment.md
api_development_overview.md
api_docs.md
api_overview.md
arm_debugging.md
breaking_changes.md
breaking_changes_history.md
breaking_changes_instructions.md
chibios_upgrade_instructions.md
cli.md
cli_commands.md
cli_configuration.md
cli_development.md
cli_tab_complete.md
coding_conventions_c.md
coding_conventions_python.md
compatible_microcontrollers.md
config_options.md
configurator_architecture.md
configurator_default_keymaps.md
configurator_diagram.drawio
configurator_diagram.svg
configurator_step_by_step.md
configurator_troubleshooting.md
contributing.md
custom_matrix.md
custom_quantum_functions.md
data_driven_config.md
documentation_best_practices.md
documentation_templates.md
driver_installation_zadig.md
easy_maker.md
faq_build.md
faq_debug.md
faq_general.md
faq_keymap.md
faq_misc.md
feature_advanced_keycodes.md
feature_converters.md
feature_debounce_type.md
feature_eeprom.md
feature_layers.md
feature_layouts.md
feature_macros.md
feature_userspace.md Convert stray legacy warn/info docs panels (#24799) 2025-01-07 19:12:54 -08:00
flashing.md
fuse.txt
getting_started_docker.md
getting_started_github.md
getting_started_introduction.md
getting_started_make_guide.md [docs] Organize driver & feature docs into subfolders (#23848) 2024-06-02 12:42:24 +10:00
hand_wire.md
hardware_drivers.md
hardware_keyboard_guidelines.md
how_a_matrix_works.md
how_keyboards_work.md
index.md
isp_flashing_guide.md Docs theme updates (#23832) 2024-05-31 10:34:30 +10:00
keycodes.md [Feature] Add keycode PDF(layer) to set the default layer in EEPROM (#24630) 2024-11-23 10:09:34 +00:00
keycodes_basic.md
keycodes_magic.md
keycodes_us_ansi_shifted.md
keymap.md
license_violations.md
mod_tap.md
newbs.md
newbs_building_firmware.md
newbs_building_firmware_configurator.md
newbs_building_firmware_workflow.md
newbs_external_userspace.md
newbs_flashing.md
newbs_getting_started.md
newbs_git_best_practices.md
newbs_git_resolving_merge_conflicts.md
newbs_git_resynchronize_a_branch.md
newbs_git_using_your_master_branch.md
newbs_learn_more_resources.md
newbs_testing_debugging.md
one_shot_keys.md
other_eclipse.md
other_vscode.md
platformdev_blackpill_f4x1.md
platformdev_chibios_earlyinit.md
platformdev_proton_c.md
platformdev_rp2040.md
platformdev_selecting_arm_mcu.md
porting_your_keyboard_to_qmk.md
power.txt
pr_checklist.md
quantum_keycodes.md
quantum_painter.md
quantum_painter_lvgl.md
quantum_painter_qff.md
quantum_painter_qgf.md
quantum_painter_rle.md
ref_functions.md
reference_configurator_support.md
reference_glossary.md
reference_info_json.md [Core] Add Chordal Hold, an "opposite hands rule" tap-hold option similar to Achordion, Bilateral Combinations. (#24560) 2025-01-27 12:32:23 +01:00
reference_keymap_extras.md
squeezing_avr.md
support.md
support_deprecation_policy.md
syllabus.md
tap_hold.md [Core] Add Chordal Hold, an "opposite hands rule" tap-hold option similar to Achordion, Bilateral Combinations. (#24560) 2025-01-27 12:32:23 +01:00
understanding_qmk.md
unit_testing.md
usb_nkro.txt