Skip to content

Shift+1–9 goes straight to that floor - #312

Open
vyas-meet wants to merge 1 commit into
AgentSystemLabs:mainfrom
vyas-meet:floor-hotkeys
Open

vyas-meet wants to merge 1 commit into
AgentSystemLabs:mainfrom
vyas-meet:floor-hotkeys

Conversation

@vyas-meet

@vyas-meet vyas-meet commented Oct 8, 2026 •

Copy link
Copy Markdown

Hop between floors from the keyboard: Shift + 1 to Shift + 9 take you straight to that floor, numbered from the bottom up as the elevator's panel numbers them. It does exactly what picking the floor from the list in the top-left does (switchFloor): a blink and you're on the same spot there, or from outside (balcony, street, garage, roof) the elevator takes you in.

Why Shift

  • The bare digits 1–6 are the emotes.
  • Ctrl + digit switches browser tabs on Windows and Linux (⌘ on a Mac), and Alt + digit does too in Chrome and Firefox on Linux.
  • Shift + digit is bound by no browser on any OS. It's matched by KeyboardEvent.code, so it's the same physical keys on any layout (AZERTY included).

Trade-off: emoting with 1–6 while holding Shift to run now changes floor instead; let go of Shift to emote.

Why floors win the overlap with emotes

The only overlap is Shift + 1–6, which used to play an emote too (the emote keys ignored modifiers). That combination now goes to floors, because getting between projects matters much more:

  • Every floor is a project. Hopping between them is the main loop of working in the office: a worker on another floor needs input, N says which floor has someone waiting, a PR merges in another repo, a task spans several projects. That happens many times a session.
  • Today it's slow. You either walk to the elevator and press E, or click the project name in the top-left, which takes you out of mouse-look. A keypress keeps you looking around and in a blink you're on the same spot on the other floor.
  • Emotes lose almost nothing. They're a social flourish, not part of the work. Bare 1–6 and the G wheel still play them exactly as before. Only emoting while holding Shift to run changes, and letting go of Shift fixes that.

Changes

  • src/client/features/floorkeys/: new feature, a ctx.keys.bind on Digit1–Digit9 that acts only with Shift. A floor that doesn't exist, or one still cloning, gets a toast.
  • features/emotes: the digit emotes leave Shift+digit alone, so the binding gets it.
  • main.ts: one install line, after the other key features.
  • Help row (HELP_ROWS), docs/controls.md, docs/features.md and the README controls table.
  • tests/floorkeys.test.ts: Shift+2/3 go to floors 2/3; a plain digit and Shift+0 don't.

Verification

  • npm run typecheck ✅
  • npm test: 607 pass, including size, client-structure and client-help ✅
  • npm run build ✅
  • No headless screenshot: the only visible change is one new row in the controls help.

🤖 Generated with Claude Code

Shift and a floor's number (as the elevator's panel numbers them, from the
bottom up) does what picking it from the floor list does, from anywhere. Shift
because the bare digits are the emotes, Ctrl+digit switches tabs on Windows
and Linux, and Alt+digit does on Linux; Shift+digit is nobody's, on any OS, and
matching by KeyboardEvent.code keeps it the same keys on any layout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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