| Age | Commit message (Collapse) | Author | Files | Lines |
|
A label is the only place the reminder says what a bind does, so
cutting it short loses the part that matters, as with the column moves'
scrolling-layout note. A long one now takes a second line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Each key showed its plain action as text. It now carries the real
cap's legends, Nerd Font glyphs checked by name in Inconsolata, with
the shifted or Alt legend below and the cap in the palette colour
nearest the real one. Hovering still lists every action.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The pad glyph on each row was too small to read. The left fifth of the
overlay now draws the pad at size, each key labelled with its plain
action; hovering a key or an encoder lists everything it does, held
keys and turn direction spelled out. padActions() in Binds.js inverts
the grouped rows into that per-key list, and PAD's turn values became
words for it. The panel is pinned at a fixed height: centred, it moved
whenever the hovered key's list changed length.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The macropad's firmware sends ordinary combos, so the overlay listed
them as keyboard shortcuts nobody presses. A PAD table in Binds.js maps
each combo to its key (1-12) or encoder (top or bottom, turned or
pressed) and what is held with it, and the row draws the pad small with
that key lit. The workspace row is built in a loop, as it is in
keybindings.lua. Every entry was checked against hyprctl binds -j.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Hyprland's key names are its own (mouse:272, XF86Calculator), not what
is printed on the keyboard or how the key is pressed, which defeats a
reminder. A fixed map in Binds.js renames them for display only; an
unlisted key shows as before. SUPER reads as Win for the same reason.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Groups flowed left to right in rows, so each row was as tall as its
longest group: short groups sat above empty space and the block ran
past the top and bottom of the screen. Columns filled to the screen's
height pack the groups and keep everything visible.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
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>
|
|
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>
|
|
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>
|