Skip to content

New REPL on Windows swallows characters entered via AltGr #132439

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
chris-eibl opened this issue Apr 12, 2025 · 10 comments
Open

New REPL on Windows swallows characters entered via AltGr #132439

chris-eibl opened this issue Apr 12, 2025 · 10 comments
Labels
3.13 bugs and security fixes 3.14 new features, bugs and security fixes release-blocker stdlib Python modules in the Lib dir topic-repl Related to the interactive shell type-bug An unexpected behavior, bug, or error

Comments

@chris-eibl
Copy link
Member

chris-eibl commented Apr 12, 2025

Bug report

Bug description:

E.g. on my keyboard with German layout, { is usually entered via pressing the AltGr key and 7, i.e. AltGr+7.

Likewise, }, [, ], \ and some more can only be entered via AltGr.

But since #128388 / #128389 these are swallowed by the REPL on Windows and can no longer be entered.

On 3.13.3, this happens independent from the terminal mode.

On main, this only happens in legacy Windows terminals, where the virtual terminal mode is turned off (e.g. cmd.exe).

In virtual terminal mode there are other issues, see #131878.

Many other keyboard layouts like French, Czech, etc, use the AltGr key, too, and suffer the same bug (tested changing my keyboard layout).

CPython versions tested on:

3.14, 3.13

Operating systems tested on:

Windows

Linked PRs

@chris-eibl chris-eibl added type-bug An unexpected behavior, bug, or error 3.13 bugs and security fixes 3.14 new features, bugs and security fixes topic-repl Related to the interactive shell labels Apr 12, 2025
@chris-eibl chris-eibl added the needs backport to 3.13 bugs and security fixes label Apr 12, 2025
@picnixz picnixz removed the needs backport to 3.13 bugs and security fixes label Apr 12, 2025
@picnixz
Copy link
Member

picnixz commented Apr 12, 2025

@chris-eibl Small tip (and welcome to you as a triager!): we keep the "needs backport" labels for PRs and reserve version labels to issues so to indicate which Python versions are affected (and I personally leave out version labels if every Python version is affected, unless it's a security issue).

@picnixz picnixz added the stdlib Python modules in the Lib dir label Apr 12, 2025
@chris-eibl
Copy link
Member Author

chris-eibl commented Apr 12, 2025

Yeah, I was unsure about the "needs backport" for issues myself.

Regarding the "versions affected": this only applies to 3.13 and 3.14, because only those two feature the new REPL - hence we maybe should keep them in this case on the issue?

@picnixz
Copy link
Member

picnixz commented Apr 12, 2025

Yes, we can keep them as it's really 3.13 and 3.14 specific. In general, once a version becomes EOL or security-only, we also remove or update the labels (technically, we could even remove them as 3.12 is now security-only so those issues won't necessarily be fixed)

@noisefloor
Copy link

I can confirm this bug, tested on two different Windows 11 machines. Characters accessible via ALT GR on a German keyboard, most notably for programming Python { [ ] } , work randomly (square brackets) or not at all (curly brackets). Tested with Python 3.13.3 installed from the Microsoft Store. For Python 3.12.10 installed from the Microsoft Store, all keys / characters work just fine.

@mettvterritory
Copy link

I've encountered this as well.
Bad Workaround: If you first press AltGR + 8, you can then enter exactly one AltGr grapheme.
So,
AltGR + 8, AltGr + 7 produces '{' on a German keyboard.
AltGR + 8, AltGr + Q produces '@' on a German keyboard.

@picnixz picnixz changed the title REPL on Windows swallows characters entered via AltGr New REPL on Windows swallows characters entered via AltGr Apr 14, 2025
@chris-eibl
Copy link
Member Author

For me, the issue only occurs in an "old terminal", e.g. using cmd.exe. In a Windows terminal (e.g. powershell), the new REPL runs in virtual terminal mode

def _supports_vt():
try:
import nt
return nt._supports_virtual_terminal()

where I can use AltGr as usual.

But the "virtual terminal mode" has other problems (#131878): I can no longer enter äÄöÖüÜ, etc., which work in the "old terminal", though.

@john-hen
Copy link

For me, the issue only occurs in an "old terminal", e.g. using cmd.exe. In a Windows terminal (e.g. powershell), the new REPL runs in virtual terminal mode

I think that's only true for the 3.14 developer preview. In the Python 3.13.3 release, there is no _supports_vt() function in windows_console.py. I have this issue no matter the terminal (the old Command Prompt and the new Windows Terminal) nor the shell (cmd.exe and PowerShell).

I went so far as to hot-patching windows_console.py locally. The REPL as of 3.13.3 is unusable for me otherwise., You don't get very far in Python without curly braces or square brackets. This is not supposed to happen in a bug-fix release.

@chris-eibl
Copy link
Member Author

Ups, yeah, was imprecise on this one: can confirm that 3.13 is broken in the old and the new console.

@NSK-Guru
Copy link

This also occurs on danish keyboards (on win10). Can't input chars: @£${[]}|€~
Fallback to 3.13.2 worked for me.

@chris-eibl
Copy link
Member Author

You can also turn off the new REPL if you do not want to fallback on an earlier version:
https://docs.python.org/3/using/cmdline.html#envvar-PYTHON_BASIC_REPL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.13 bugs and security fixes 3.14 new features, bugs and security fixes release-blocker stdlib Python modules in the Lib dir topic-repl Related to the interactive shell type-bug An unexpected behavior, bug, or error
Projects
Development

No branches or pull requests

6 participants