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
..
audio
always return audio pin to 0 on ARM ( #24503 )
2025-01-01 23:10:07 -08:00
backlight
Update GPIO macro usages in core ( #23093 )
2024-02-18 17:08:27 +11:00
bootmagic
Removal of bootmagic lite terminology ( #22979 )
2024-02-17 12:27:34 +00:00
debounce
Consolidate timer_elapsed implementations ( #24830 )
2025-01-19 17:07:11 +00:00
encoder /tests
Rename encoder pins defines ( #24003 )
2024-07-03 17:18:27 +10:00
keymap_extras
[CI] Regenerate Files ( #24772 )
2025-01-01 02:22:28 +00:00
led_matrix
Refactor LED Breathing effect with runner ( #24540 )
2024-10-28 10:56:54 -07:00
logging
Remove arm_atsam platform ( #24337 )
2024-09-02 03:48:17 +01:00
midi
Unify MIDI note calculation with the audio feature's algorithm ( #21588 )
2023-07-27 16:14:34 -07:00
os_detection /tests
Consolidate timer_elapsed implementations ( #24830 )
2025-01-19 17:07:11 +00:00
painter
Fix Quantum Painter compiliation issues with heavy optimization ( #24667 )
2024-12-02 16:58:18 +11:00
pointing_device
[Feature] Add keycode PDF(layer) to set the default layer in EEPROM ( #24630 )
2024-11-23 10:09:34 +00:00
process_keycode
[Bug] Fix Underglow keycode processing ( #24798 )
2025-01-08 08:50:54 -08:00
rgb_matrix
Refactor Hue Breathing matrix effect with runner ( #24525 )
2025-01-02 02:23:41 -08:00
rgblight
[CI] Regenerate Files ( #24770 )
2025-01-01 13:02:16 +11:00
send_string
Consolidate send_string implementations. ( #24817 )
2025-01-21 08:24:39 +11:00
sequencer
Consolidate timer_elapsed implementations ( #24830 )
2025-01-19 17:07:11 +00:00
split_common
Move pointing device driver code ( #24445 )
2024-10-25 18:11:51 +01:00
unicode
Unicode, Unicodemap and UCIS refactor ( #21659 )
2023-08-27 13:30:19 +10:00
wear_leveling
RP2040 emulated EEPROM. ( #17519 )
2022-07-02 15:18:50 +10:00
action.c
Normalise mouse keycodes ( #23975 )
2024-07-03 18:35:54 +10:00
action.h
[Core] Add Repeat Key ("repeat last key") as a core feature. ( #19700 )
2023-05-20 22:35:06 +10:00
action_code.h
Relocate various modifier defines ( #18638 )
2023-03-10 18:27:29 -08:00
action_layer.c
Remove use of keymap.h ( #20004 )
2023-03-27 20:08:17 +01:00
action_layer.h
process_keycode: remove direct quantum.h includes ( #21486 )
2023-07-11 17:07:24 +10:00
action_tapping.c
[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
action_tapping.h
[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
action_util.c
[Core] usb_device_state: consolidate usb state handling across implementations ( #24258 )
2024-10-18 09:57:08 +02:00
action_util.h
Separate 6KRO and NKRO report structs ( #22267 )
2023-10-23 15:43:46 +11:00
basic_profiling.h
Remove arm_atsam platform ( #24337 )
2024-09-02 03:48:17 +01:00
bits.h
[Core] quantum: util: add bit and bitmask helpers ( #24229 )
2024-10-12 18:48:00 +02:00
bitwise.c
bitwise.h
caps_word.c
Reduce includes for caps_word header ( #18948 )
2022-11-03 23:42:58 +00:00
caps_word.h
Reduce includes for caps_word header ( #18948 )
2022-11-03 23:42:58 +00:00
color.c
Rename RGB and HSV structs ( #24471 )
2024-10-12 00:10:02 +01:00
color.h
Rename RGB and HSV structs ( #24471 )
2024-10-12 00:10:02 +01:00
command.c
[Core] usb_device_state: consolidate usb state handling across implementations ( #24258 )
2024-10-18 09:57:08 +02:00
command.h
Remove legacy keycode use from command ( #18002 )
2022-08-12 03:03:36 +01:00
crc.c
Reduce includes for crc header ( #18947 )
2022-11-03 21:36:58 +00:00
crc.h
Reduce includes for crc header ( #18947 )
2022-11-03 21:36:58 +00:00
debounce.h
debounce: remove direct quantum.h includes ( #21480 )
2023-07-09 02:05:20 +01:00
deferred_exec.c
[Bugfix] Manipulate deferred executor slot only if tokens match ( #22722 )
2023-12-21 09:32:19 +11:00
deferred_exec.h
digitizer.c
Digitizer feature improvements ( #19034 )
2022-11-12 23:28:11 +00:00
digitizer.h
Update Doxygen comments for some headers ( #20194 )
2023-03-22 14:32:49 +11:00
dip_switch.c
Fix missing wait.h include in Dip Switch Map ( #24863 )
2025-01-25 03:11:38 +00:00
dip_switch.h
Keymap introspection for Dip Switches ( #22543 )
2023-12-11 23:06:18 +00:00
dynamic_keymap.c
Consolidate send_string implementations. ( #24817 )
2025-01-21 08:24:39 +11:00
dynamic_keymap.h
VIA V3 - The Custom UI Update ( #18222 )
2022-11-10 07:46:44 +11:00
eeconfig.c
Provide method to save a single default layer in the full range of 0-31 ( #24639 )
2024-11-25 07:35:21 +11:00
eeconfig.h
Provide method to save a single default layer in the full range of 0-31 ( #24639 )
2024-11-25 07:35:21 +11:00
encoder.c
Normalise mouse keycodes ( #23975 )
2024-07-03 18:35:54 +10:00
encoder.h
Rename encoder pins defines ( #24003 )
2024-07-03 17:18:27 +10:00
haptic.c
[Core] usb_device_state: consolidate usb state handling across implementations ( #24258 )
2024-10-18 09:57:08 +02:00
haptic.h
Update GPIO macro usages in core ( #23093 )
2024-02-18 17:08:27 +11:00
joystick.c
Joystick: add support for 8-way hat switch ( #24515 )
2024-11-09 14:10:10 -08:00
joystick.h
Joystick: add support for 8-way hat switch ( #24515 )
2024-11-09 14:10:10 -08:00
keyboard.c
Review fixes for layer lock feature ( #24627 )
2024-11-21 13:02:49 +00:00
keyboard.h
Keymap introspection for Dip Switches ( #22543 )
2023-12-11 23:06:18 +00:00
keycode.h
Normalise mouse keycodes ( #23975 )
2024-07-03 18:35:54 +10:00
keycode_config.c
Begin removal of bootmagic lite terminology ( #22970 )
2024-01-28 22:51:58 +00:00
keycode_config.h
[Bug] Realign and size check EECONFIG structures ( #20541 )
2023-05-08 10:56:03 -07:00
keycodes.h
[CI] Regenerate Files ( #24770 )
2025-01-01 13:02:16 +11:00
keymap_common.c
Keymap introspection for Dip Switches ( #22543 )
2023-12-11 23:06:18 +00:00
keymap_common.h
Remove use of keymap.h ( #20004 )
2023-03-27 20:08:17 +01:00
keymap_introspection.c
Expand count checks in keymap introspection ( #24464 )
2024-10-11 06:54:53 +11:00
keymap_introspection.h
Add support for key override introspection. ( #24120 )
2024-07-16 09:22:17 +10:00
layer_lock.c
Review fixes for layer lock feature ( #24627 )
2024-11-21 13:02:49 +00:00
layer_lock.h
Review fixes for layer lock feature ( #24627 )
2024-11-21 13:02:49 +00:00
leader.c
Add leader_add_user callback ( #24266 )
2025-01-01 23:12:58 -08:00
leader.h
Add leader_add_user callback ( #24266 )
2025-01-01 23:12:58 -08:00
led.c
Remove deprecated led_set_user ( #23979 )
2024-06-22 09:10:58 +01:00
led.h
Remove deprecated led_set_user ( #23979 )
2024-06-22 09:10:58 +01:00
led_tables.c
led_tables.h
main.c
Refactor vusb to protocol use pre/post task ( #14944 )
2024-03-14 21:45:12 +11:00
matrix.c
Update atomic GPIO macros in keyboard custom matrix ( #23796 )
2024-07-13 18:41:05 +10:00
matrix.h
core: allow locking the matrix state ( #18852 )
2023-02-13 03:38:36 +11:00
matrix_common.c
quantum: remove direct quantum.h includes ( #21507 )
2023-07-16 23:42:56 +10:00
modifiers.h
Relocate various modifier defines ( #18638 )
2023-03-10 18:27:29 -08:00
mousekey.c
Enhance overlapping mouse keys control ( #23341 )
2024-08-19 03:18:28 +01:00
mousekey.h
Enhance overlapping mouse keys control ( #23341 )
2024-08-19 03:18:28 +01:00
os_detection.c
[Bug] Fix compiliation issues with OS Detection ( #24502 )
2024-10-19 12:24:42 +02:00
os_detection.h
[Core] usb_device_state: consolidate usb state handling across implementations ( #24258 )
2024-10-18 09:57:08 +02:00
pointing_device_internal.h
[Core] Introduce pointing device specific debug messages ( #17663 )
2022-08-29 19:16:49 +02:00
programmable_button.c
Programmable Button API refactor and improve docs ( #18641 )
2022-10-15 14:33:24 +11:00
programmable_button.h
Update Doxygen comments for some headers ( #20194 )
2023-03-22 14:32:49 +11:00
quantum.c
[Feature] Add keycode PDF(layer) to set the default layer in EEPROM ( #24630 )
2024-11-23 10:09:34 +00:00
quantum.h
Review fixes for layer lock feature ( #24627 )
2024-11-21 13:02:49 +00:00
quantum_keycodes.h
[Feature] Add keycode PDF(layer) to set the default layer in EEPROM ( #24630 )
2024-11-23 10:09:34 +00:00
quantum_keycodes_legacy.h
Add new connection keycodes for Bluetooth, 2.4GHz. ( #24251 )
2024-08-27 10:52:23 +10:00
raw_hid.h
Raw HID: documentation improvements ( #21596 )
2023-07-25 09:20:41 +10:00
repeat_key.c
Normalise mouse keycodes ( #23975 )
2024-07-03 18:35:54 +10:00
repeat_key.h
quantum: remove direct quantum.h includes ( #21507 )
2023-07-16 23:42:56 +10:00
ring_buffer.h
Fix quantum ring_buffer for ChibiOS ( #19683 )
2023-01-28 21:07:51 +00:00
secure.c
Use a macro to compute the size of arrays at compile time ( #18044 )
2022-08-30 10:20:04 +02:00
secure.h
Update Doxygen comments for some headers ( #20194 )
2023-03-22 14:32:49 +11:00
steno_keycodes.h
Remove requirement for keymap_steno.h include in keymaps ( #22423 )
2023-11-12 18:25:46 +11:00
sync_timer.c
sync_timer.h
tri_layer.c
[Core] Tri Layer Keys ( #19795 )
2023-02-12 10:23:07 +11:00
tri_layer.h
[Core] Tri Layer Keys ( #19795 )
2023-02-12 10:23:07 +11:00
util.h
[Core] quantum: util: add bit and bitmask helpers ( #24229 )
2024-10-12 18:48:00 +02:00
variable_trace.c
variable_trace.h
via.c
refactor: move default RGB/LED matrix #defines ( #21938 )
2023-09-28 11:51:18 +01:00
via.h
quantum: remove direct quantum.h includes ( #21507 )
2023-07-16 23:42:56 +10:00
virtser.h
wpm.c
[Bug] Fix compilation issue with WPM ( #18965 )
2022-11-05 19:05:01 +00:00
wpm.h
Reduce includes for wpm header ( #18949 )
2022-11-04 00:50:59 +00:00