summaryrefslogtreecommitdiffstats
path: root/keybinds
AgeCommit message (Collapse)AuthorFilesLines
2026-09-25feat(keybinds): live keybind reminder overlayDanilo M.4-0/+229
Modelled on window-switcher: a Scope with a 1x1 keepalive PanelWindow plus a LazyLoader'd overlay, opened via IpcHandler (SUPER+k is bound in a different repo). hyprctl binds -j is asked fresh on every opening so the list matches whatever Hyprland has loaded, with Binds.group() from task 1 turning it into the grid's {name, rows} groups. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25fix(keybinds): survive group names shadowing Object.prototypeDanilo M.2-1/+9
A description like "toString: X" made byName["toString"] resolve to the inherited Object.prototype.toString instead of undefined, so the group was never created and .rows.push threw. Object.create(null) gives byName no prototype to shadow. Also note in a comment that CAPS/MOD2/MOD3/MOD5 modmask bits are not decoded and silently drop from the combo string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(keybinds): group hyprctl binds by descriptionDanilo M.2-0/+95
Binds.js parses hyprctl binds -j output into display groups for the upcoming keybind reminder overlay. Group name and row label come from the "Group: Label" convention in each bind's description; a bind without one still surfaces under "Undescribed" rather than vanishing, so a gap in the Hyprland config stays visible. Pure functions with no QML dependency, so test_binds.js checks them directly with node, stripping the .pragma library line the QML runtime requires but node does not understand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>