fix(app): reveal workspace-jump numbers only for the active modifier (#1580)

Holding the workspace-jump modifier reveals numbered badges in the sidebar for jumping to a workspace (Cmd+1..9). On the desktop app the badges also appeared while holding Option or Control, neither of which performs the jump — only Cmd does on macOS desktop (Ctrl on non-Mac, Alt on web).

The keydown/keyup handler flagged badge visibility for Alt on every runtime and for both Meta and Control on desktop — broader than the active workspace.navigate.index binding. Gate the badges to the single modifier that performs the jump on the current runtime, via a new getWorkspaceIndexJumpModifierKey helper. Adds unit tests for the three runtime cases.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Christoph Leiter
2026-06-18 16:55:38 +00:00
committed by GitHub
co-authored by Claude Opus 4.8
parent f876b80f7a
commit 931ea97942
3 changed files with 50 additions and 10 deletions
@@ -3,6 +3,7 @@ import {
buildKeyboardShortcutHelpSections,
buildEffectiveBindings,
getBindingIdForAction,
getWorkspaceIndexJumpModifierKey,
resolveKeyboardShortcut,
type ChordState,
type KeyboardShortcutContext,
@@ -638,3 +639,18 @@ describe("keyboard-shortcut help sections", () => {
).toBeNull();
});
});
describe("getWorkspaceIndexJumpModifierKey", () => {
it("uses Alt on web, regardless of OS", () => {
expect(getWorkspaceIndexJumpModifierKey({ isMac: true, isDesktop: false })).toBe("Alt");
expect(getWorkspaceIndexJumpModifierKey({ isMac: false, isDesktop: false })).toBe("Alt");
});
it("uses Cmd (Meta) on desktop Mac, not Control or Alt", () => {
expect(getWorkspaceIndexJumpModifierKey({ isMac: true, isDesktop: true })).toBe("Meta");
});
it("uses Ctrl on desktop non-Mac, not Meta or Alt", () => {
expect(getWorkspaceIndexJumpModifierKey({ isMac: false, isDesktop: true })).toBe("Control");
});
});
@@ -1344,6 +1344,21 @@ export function getDefaultKeysForAction(
return null;
}
/**
* The `KeyboardEvent.key` whose hold reveals the sidebar workspace-jump number
* badges. It must match the modifier of the active `workspace.navigate.index`
* binding for this runtime, otherwise the badges appear for a modifier that
* does not actually jump: Alt on web, Cmd (Meta) on desktop Mac, Ctrl on
* desktop non-Mac.
*/
export function getWorkspaceIndexJumpModifierKey(platform: {
isMac: boolean;
isDesktop: boolean;
}): "Alt" | "Meta" | "Control" {
if (!platform.isDesktop) return "Alt";
return platform.isMac ? "Meta" : "Control";
}
export function buildKeyboardShortcutHelpSections(
input: KeyboardShortcutPlatformContext,
bindings: readonly ParsedShortcutBinding[] = DEFAULT_BINDINGS,