fix: batch of five open-issue fixes (#57 #58 #59 #60 #61) - #62
Merged
Conversation
- #57 Ctrl+letter shortcuts under non-Latin keyboard layouts Introduces `matchesKeyCode(e, 'V')` (src/lib/keymap.ts) which compares `KeyboardEvent.code` (physical key position, layout-invariant) instead of `KeyboardEvent.key` (localized character). Migrates every letter and digit accelerator in useKeyboardShortcuts.ts and TerminalView.tsx's xterm handler; non-letter keys (Tab, F1-F8, `,`, `=`, `-`, `\`) keep reading `e.key`. Restores Ctrl+V, Ctrl+C, Ctrl+W, Ctrl+B, Ctrl+G, Ctrl+Shift+D and every other Ctrl+letter shortcut for users on Hebrew, Cyrillic, Arabic, Greek etc. layouts. +7 unit tests. - #58 Enter re-opens New Terminal modal after creating a terminal Sidebar 'New Session' button now blurs itself before opening the modal, and NewTerminalModal explicitly focuses the newly-created xterm inside a double-rAF so focus wins the race against the visibility flip. - #59 Add close-session button to terminal header Right cluster in TerminalTabs.tsx now hosts an X icon gated on `activeConfig && !activeFilePath`, mirroring SessionCards' closeWithReport error handling (toast.error + reportInvokeFailure). - #60 Rounded window corners lack a visible border in dark theme Frameless transparent window composited outside its rounded shape against the desktop, so the outer `0 0 0 1px` hairline vanished on 3 of 4 corners. Switched to `inset 0 0 0 1px` so the edge renders inside the opaque --canvas fill; every corner now shows the same subtle hairline in both themes. - #61 Branch popover still uses old glass/material treatment Replaced `material-popover` (backdrop-blur + edge-light rim) on the branch switcher with the flat New UI treatment: `bg-elevation-4 ring-1 ring-inset ring-seam-strong shadow-elevation-3`. Global .material-popover migration deferred to a design-system pass. Verification: tsc clean, 466/466 vitest tests pass, vite build clean, cargo check clean, tauri dev launched end-to-end. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Contributor
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
This was referenced Sep 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Five orthogonal fixes bundled into one commit — each maps to a distinct open issue and touches disjoint files.
matchesKeyCode(e, 'V')helper comparesKeyboardEvent.code(physical key, layout-invariant) instead ofKeyboardEvent.key(localized character), so Ctrl+V/C/W/B/G/Shift+D/... work under Hebrew, Cyrillic, Arabic, Greek etc. layouts. Migrated every letter/digit accelerator inuseKeyboardShortcuts.tsandTerminalView.tsx; non-letter keys (Tab,F1-F8,,,=,-,\) intentionally keep readinge.key.NewTerminalModalexplicitly focuses the newly-created xterm inside a double-requestAnimationFrameso focus wins the race against the visibility flip.TerminalTabs.tsxnow hosts anXicon gated onactiveConfig && !activeFilePath, mirroringSessionCards'closeWithReporterror handling (toast.error+reportInvokeFailure('close_terminal', err)) per CLAUDE.md's frontend rules.0 0 0 1pxhairline vanished on 3 of 4 corners against dark backgrounds. Switched toinset 0 0 0 1px— edge renders inside the opaque--canvasfill, every corner gets the same subtle hairline in both themes..material-popover(backdrop-blur + edge-light rim) on the branch switcher withbg-elevation-4 ring-1 ring-inset ring-seam-strong shadow-elevation-3. Scoped to the branch popover only; global.material-popovermigration is left for a separate design-system pass per the issue's own note.Test plan
tsc --noEmit— cleanvitest run— 466/466 tests pass, 50 test files (includes +7 new tests formatchesKeyCodecovering Hebrew/Cyrillic/Arabic/Greeke.keyvariants, CapsLock invariance, digit codes, and defensive rejection of non-letter/non-digit arguments)vite build— clean production buildcargo check(src-tauri) — cleannpm run tauri dev— 523/523 crates compiled,claude-terminal.exelaunched with no panics🤖 Generated with Claude Code