Skip to content

[Feature Request] Chordal Hold/Opposite Hand Activation for Combo Modifiers #25779

@ohshitgorillas

Description

@ohshitgorillas

Feature Request Type

  • Core functionality
  • Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
  • Alteration (enhancement/optimization) of existing feature(s)
  • New behavior

Description

Currently, QMK combos activate purely on timing - if the specified keys are pressed within COMBO_TERM, the combo fires. This creates a fundamental tension: the timing window must be large enough to reliably catch intentional combos, yet small enough to avoid misfires during fast typing. For some typists, no single timing value satisfies both requirements, forcing users to either deal with misfires or abandon the concept.

Example scenario:

  • User has AS (under QWERTY) mapped to Ctrl as a combo
  • User rapidly rolls through "asdf"
  • Despite no intention to use Ctrl, the combo can fire if AS overlap occurs within COMBO_TERM, mistakenly triggering Ctrl+D.

Proposed Solution

Add optional hold timing and opposite-hand activation logic similar to CHORDAL_HOLD for combo modifiers. When enabled, combo mods would only activate when:

  1. An opposite-hand key is pressed while the combo keys are held, OR
  2. A hold timeout is exceeded, indicating deliberate activation rather than typing

This approach mirrors real-world usage patterns: users virtually never chord modifiers on one hand to press keys with the same hand; also, such modifiers are typically held for a distinct duration rather than being "immediately" released as during typing.

Benefits

  • Eliminates same-hand false positives during fast typing sequences
  • Potentially eliminate false positives entirely with tuning of hold timing
  • Provides a tuning parameter that matches human behavior (deliberate pause vs. typing speed, opposite hand activation)
  • Makes combo mods viable for fast typists
  • Consistent with existing QMK features for tap-hold (CHORDAL_HOLD)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions