Skip to content

Windows-only scope, working hotkeys, and unspooling that pastes - #16

Merged
willkotheimer merged 3 commits into
mainfrom
msix-store
Sep 6, 2026
Merged

willkotheimer merged 3 commits into
mainfrom
msix-store

Conversation

@willkotheimer

Copy link
Copy Markdown
Owner

Three things, found by using the app rather than by reading it: two of the four hotkeys never worked, Clear spools did nothing in the common case, and serving a clip made you press Ctrl+V yourself.

Two of the four hotkeys were dead on most machines

Probing all twenty-six Win+Alt+<letter> combinations on Windows 11 found thirteen already owned by other applications:

TAKEN: A B D F G K M N R S T W Y
free:  E H I J L O P Q U X Z

N is OneNote's Quick Note. M, R, G, B, T and W belong to the Xbox Game Bar, which ships with Windows — so Win+Alt+M was not unlucky, it was dead for nearly every Windows 11 user. Registration had been failing honestly the whole time and the tray had been reporting it, but nobody opens the tray to find out why a key they just pressed did nothing. That is precisely the outcome PLAN.md §8 was written to prevent.

The keys now say what they do:

Win+Alt+C summon / dismiss — C for clipboard
Win+Alt+U unspool the next clip
Win+Alt+V paste the whole spool, the way Ctrl+V pastes one thing
mode pill toggle FIFO / LIFO — no hotkey at all

Unspooling owns the repeat gesture: press U again and again and clips come off in the mode's order. That is why pasting everything is not a double-press of anything — a repeated press means "give me the next one", and spending it on "give me everything at once" would hand the unspool gesture to the one action that makes the ordering moot. Toggling the mode loses its global key entirely; it is something you do while looking at the spool, not while typing somewhere else.

But no default can be right on every machine, because which combinations are free depends on what else is installed. So the real fix is the rebinding UI §8 asked for and never got: the ? button opens it, carries a count badge when the OS refuses a key, and the footer strikes through any dead binding. Rebinding is two dropdowns and an attempt rather than "press what you want", because the Windows shell eats Win-key presses before a renderer ever sees them. Ctrl+Alt is offered but is not the default — it measured completely free here and is AltGr abroad, where Ctrl+Alt+C types ć.

Clear spools counted a spool it then refused to touch

clearSpoolsLabel counted every unstarred spool including the active one; clearSpools filtered the active one out. With a single unstarred spool that happened to be active, the button said "Clear 1 spool" and did nothing. It now clears the active spool and falls back to the default, because the button states what it spares and must not spare something it does not name.

Serving now pastes

PLAN.md §8 had rejected serve-and-paste, but the reason was entirely a macOS one: synthesizing input there needs Accessibility permission — permission to read every keystroke — and an app whose claim is that it cannot spy on you must not ask for it. Windows SendInput is output, not input: no permission, no elevation, no keyboard hook. The objection does not reach this platform.

Its three secondary arguments survived the change rather than opposing it. No hook is needed. The clip stays on the clipboard, so serve-once-paste-into-four-places still works — this adds the first paste rather than removing the others. And the cursor still advances because the user pressed a key.

The addon gains sendPaste, which refuses when Spool's own window is in front, since pasting into ourselves is never what anyone meant. It is a setting rather than a law, because a synthesized Ctrl+V does nothing in terminals that paste with Ctrl+Shift+V. No new dependency — extending the addon we already own keeps the surface the zero-network gate checks exactly as narrow as it was.

Scope: this is a Windows application

macOS is dropped. It costs an Apple Developer membership, a Mac to notarize from, and a second native clipboard implementation, to reach a platform this was never being built for — and the Microsoft Store asks nothing about it. Being Windows-only is what makes the paste above defensible, so the two decisions are recorded together. M14 is marked dropped.

Store tiles

electron-builder substitutes placeholder tiles when build/appx is empty, and those placeholders are the Electron logo — the package built cleanly and would have reached the Store carrying someone else's mark. The six assets are drawn from the same geometry and palette as build/icon.ico. STORE.md records what Partner Center must supply, why the Store build keeps the zero-network guarantee where an auto-updater would not, and that arm64 needs the ARM64 MSVC toolset.

Verification

393 tests, typecheck, lint, and the zero-network gate pass. Beyond that, in the running app: both artifacts rebuilt, the installer installed, all three hotkeys confirmed live, and Win+Alt+U pressed three times returned alpha clip, beta clip, gamma clip in FIFO order, with Win+Alt+V then joining the whole spool. Paste-into-another-window was confirmed by spool text appearing in a window it was never typed into.

Still open: the MSIX has not been installed and run, which needs Developer Mode or a trusted certificate — both require administrator rights.

🤖 Generated with Claude Code

willkotheimer and others added 3 commits September 3, 2026 22:23
electron-builder substitutes stock placeholder tiles when build/appx is empty,
and those placeholders are the Electron logo. The package built cleanly and
would have reached the Store carrying someone else's mark, which is the kind of
defect that only shows up if you open the artifact and look at it.

The six assets are drawn from the same geometry and palette as build/icon.ico —
cream flanges and core, three orange thread bands, on the #171614 ground — so
the tiles, the installer icon and the tray icon are one design. Two sizes the
defaults omitted, 71x71 and 310x310, are included.

STORE.md records what Partner Center has to supply, why the Store build keeps
the zero-network guarantee where an auto-updater would not, that arm64 needs the
ARM64 MSVC toolset which is not installed here, and the two runtime questions
that cannot be answered without an elevated machine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two of the four default hotkeys never worked. Probing all twenty-six
Win+Alt+<letter> combinations on Windows 11 found thirteen already owned: N is
OneNote's Quick Note, and M, R, G, B, T and W belong to the Xbox Game Bar, which
ships with Windows. Win+Alt+M was not unlucky, it was dead for nearly every
Windows 11 user. Registration had been failing honestly all along and the tray
had been saying so, but nobody opens the tray to find out why a key they just
pressed did nothing — which is the exact outcome PLAN.md 8 warned about.

The keys are reallocated to say what they do: C for clipboard summons, U unspools
the next clip, V pastes the whole spool the way Ctrl+V pastes one thing.
Unspooling owns the repeat gesture, so pasting everything is not a double-press
of anything — a repeated press means "give me the next one", and spending it on
"give me everything" would hand that gesture to the action that makes FIFO and
LIFO moot. Toggling the mode loses its hotkey entirely and becomes the mode pill:
it is something you do while looking at the spool, not while typing elsewhere.

But no default can be right on every machine, so the real fix is the rebinding UI
PLAN.md 8 asked for and never got. The ? button opens it, carries a count of dead
keys, and the footer strikes through any binding the OS refused. Rebinding is two
dropdowns and an attempt rather than "press what you want", because the Windows
shell eats Win-key presses before a renderer sees them. Ctrl+Alt is offered but
is not the default: it measured completely free here and is AltGr abroad, where
Ctrl+Alt+C types ć.

Also fixes Clear spools, which counted the active spool and then skipped it, so
"Clear 1 spool" did nothing when the only unstarred spool was the active one. It
now clears the active spool and falls back to the default, because the button
states what it spares and must not spare something it does not name.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Serving put the clip on the clipboard and stopped, leaving the user to press
Ctrl+V themselves. That is two keystrokes for one intention, and unspooling into
a form is the thing this app exists to do.

PLAN.md 8 had rejected serve-and-paste, but the reason was entirely a macOS one:
synthesizing input there needs Accessibility permission, which is permission to
read every keystroke, and an app claiming it cannot spy on you must not ask for
it. Windows SendInput is output rather than input and needs no permission, no
elevation and no keyboard hook, so the objection does not reach this platform.
The three secondary arguments survived the change instead of opposing it: no
hook is needed, the clip stays on the clipboard so serve-once-paste-many still
works, and the cursor still advances because the user pressed a key.

The addon gains sendPaste, which refuses when Spool's own window is in front —
pasting into ourselves is never what anyone meant. It is a setting rather than a
law, because a synthesized Ctrl+V does nothing in terminals that paste with
Ctrl+Shift+V. No new dependency: extending the addon we already own keeps the
surface the zero-network gate has to check exactly as narrow as it was.

Also records the scope this rests on. macOS is dropped: it costs an Apple
membership, a Mac, and a second native clipboard implementation to reach a
platform this was never built for, and the Microsoft Store asks nothing about it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@willkotheimer
willkotheimer merged commit 82038b5 into main Sep 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant