Windows: Polish (and other AltGr-dependent) characters not typed in CLI input on native Windows / Conpty
Environment
- Claude Code: 2.1.119
- Node.js: 22.22.2
- OS: Windows 11 Enterprise 24H2 (build 26200.x)
- Terminal: Windows Terminal 1.24.10921.0 (default PowerShell profile)
- Shell: PowerShell 7.6.1 (Core)
- Active keyboard layout: Polish (Programmers) — KLID
00000415, verified via[System.Windows.Forms.InputLanguage]::CurrentInputLanguage - System locale: pl-PL
- Beta UTF-8 worldwide language support: ON (ACP=OEMCP=MACCP=65001)
- Console encoding inside process:
[Console]::InputEncoding = [Console]::OutputEncoding = utf-8 (CP 65001)
Repro
- On a Windows machine with Polish (Programmers) layout active in Windows Terminal.
- Run
claudeso the TUI prompt has focus. - Press
AltGr+a(the standard binding forąon Polish Programmers). - Expected:
ąis inserted in the prompt. - Actual: nothing happens. The character is swallowed before reaching the input.
Same behaviour for the full AltGr-mapped Polish set: ą ę ć ł ń ó ś ź ż (and capitalised variants with Shift+AltGr+letter).
Confirmed NOT the cause
Verified on the affected machine:
- System encoding is UTF-8 end-to-end (Beta UTF-8 worldwide ON).
- Active keyboard layout is Polish (Programmers); the same key combos produce
ącorrectly in every other Windows process tested in the same Windows Terminal tab: pure pwsh prompt,node -iREPL, Codex CLI, GUI apps. - Pasting
ąfrom the clipboard into theclaudeprompt works — it is only direct keyboard input that is dropped. - Not a Windows Terminal config issue: confirmed by Codex CLI working with Polish input in the same WT tab/profile.
Workaround tested and ALSO failing
PowerToys Quick Accent (Microsoft Win32 utility that injects the chosen accented character via SendInput) also fails to deliver characters into claude. It works in every other Windows app on the machine. This is a strong signal that the issue is not specifically AltGr scancode handling — it is unicode characters delivered through the normal Windows input pipeline being dropped at the TUI layer.
Probable root cause (hypothesis)
On Windows, Conpty delivers KEY_EVENT_RECORDs with both a virtual-key code + modifier flags and a UnicodeChar field. AltGr on Polish Programmers maps AltGr+a to:
wVirtualKeyCode = VK_AdwControlKeyState = RIGHT_ALT_PRESSED | RIGHT_CTRL_PRESSEDUnicodeChar = U+0105 (ą)
If the input handler dispatches on (modifier flags + VK) to detect shortcuts (e.g. Ctrl+Alt+A) before falling through to UnicodeChar, then on AltGr layouts the unicode character is silently dropped. The same logic explains why injected unicode (PowerToys SendInput) is also lost — it arrives as a synthesised key event with UnicodeChar set but the dispatcher has already classified it as a non-character event.
This is consistent with Node readline raw-mode behaviour on Windows when Conpty key events are not pre-decomposed into character vs control streams.
Related issues (cross-platform variants of the same family)
- #22174 — macOS Polish via Option key (open,
platform:macos) - #42523 — WSL2 AltGr
@for Nordic (open,platform:wsl) - #14440 — macOS Polish in Terminal.app (closed as duplicate)
Impact
Hard blocker for CLI use by speakers of any AltGr-dependent layout — Polish, Czech, Hungarian, German Extended, Slovak, Spanish-International, Croatian, Slovenian, etc. Forces:
- using Claude Code Desktop app instead of CLI, or
- Codex CLI instead of Claude Code, or
- continuous ASCII transliteration during a session.
Suggested fix direction (for triage)
At the input layer: if the incoming key event has a non-zero UnicodeChar and the modifier combination is RIGHT_ALT_PRESSED | RIGHT_CTRL_PRESSED (the canonical AltGr signature on Win32), prefer the UnicodeChar payload over treating the event as a Ctrl+Alt shortcut. Equivalently: short-circuit shortcut dispatch when UnicodeChar is set and the only active modifiers are AltGr's pair.
Showing cached comments. Read the full discussion on GitHub ↗
6 Comments
This is a strong bug report because it isolates the failure to interactive input handling inside Claude Code, not general Windows Unicode support.
Two details make the likely root cause pretty convincing:
That makes this look less like a keyboard-layout edge case and more like the TUI input layer classifying Win32/Conpty key events too early as control chords instead of honoring the character payload when
UnicodeCharis present.The AltGr point matters beyond Polish specifically: on Windows,
AltGris effectivelyRightAlt + RightCtrl, so any shortcut-dispatch path that prioritizes modifiers over emitted character data will break whole language families while seeming fine on US layouts.So I agree with the suggested fix direction. If the event carries a non-zero Unicode character and the modifier state is just the AltGr pair, the character should win over shortcut interpretation. Otherwise the CLI is functionally excluding users who rely on non-ASCII daily input.
+1 from Italian keyboard layout. Same mechanism, different chars dropped:
Closing for now — inactive for too long. Please open a new issue if this is still relevant.
IT IS STILL AN ISSUE!!!!
Why is this closed??? that makes no sense to me
Requesting reopen. This was auto-closed as
not_plannedby github-actions on 2026-06-13, but the underlying bug was never fixed: AltGr-mapped characters (Polishą ę ć ł ń ó ś ź żand analogous layouts) were still swallowed by the CLI TUI on native Windows/Conpty at our last check, and none of the recent release notes mention a fix in this area (reviewed v2.1.206-v2.1.212). Happy to re-verify on the current release and attach fresh diagnostics on request.The repro signature is unchanged: direct keyboard input is dropped while the same keystrokes work in every other app in the same Windows Terminal tab (pure pwsh, node REPL, Codex CLI), and clipboard paste works - which still matches the UnicodeChar-dispatch hypothesis from the report: when a Conpty
KEY_EVENT_RECORDcarries a non-zeroUnicodeCharwith the canonical AltGr modifier signature (RIGHT_ALT_PRESSED | RIGHT_CTRL_PRESSED), prefer theUnicodeCharpayload over classifying the event as a Ctrl+Alt shortcut. That one dispatch-order change would cover Polish, Czech, Hungarian, German-Extended, Slovak, Spanish-International, and every other AltGr layout.The cross-platform siblings of this family remain open (#22174 macOS Option-key, #42523 WSL2 AltGr), so a
not_plannedclose on the Windows variant alone reads as stale-bot noise rather than a triage decision. This remains a hard blocker for CLI use on any AltGr-dependent keyboard layout.