Feature: Hold-to-modifier
- Dominant language
- Rust
- Stars
- 21k
- Forks
- 675
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 172
Description
**Summary**
New action type: press a bound button → modifier key-down (Super/Mod held); release the button → modifier key-up. Currently impossible — KeyCombo requires a non-modifier key, and press_key fires down+up instantly.
**Use case**
Hold the MX Master 4 haptic panel → Super is held → scroll wheel switches workspaces (GNOME/KDE). Release → Super released. No timer — modifier follows the physical button.
**Blockers**
1. KeyCombo parser rejects modifier-only chords (MissingKey).
2. Inject backends emit down+up back-to-back — no split hold/release path.
**Proposed**
Action::HoldModifier(u8) — modifier bitmask reusing existing MOD_* flags. Capture layer already sees press/release; dispatch calls hold_modifier_down(bits) on press, hold_modifier_up(bits) on release. All three backends have the primitives.
Contributor guide
No contributing guide indexed for this repository
Research direction
Trace the KeyCombo parser, press_key path, capture layer, dispatch logic, and the three inject backends mentioned in the issue. Confirm how modifier bits and button press/release events flow before implementing the action. Done means modifier-only bindings parse successfully, key-down occurs on button press, key-up on release, and all three backends preserve the hold rather than emitting an immediate pair.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100