Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32k
GH-132439: Fix REPL swallowing characters entered with AltGr on cmd.exe#132440
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Uh oh!
There was an error while loading.Please reload this page.
Lib/_pyrepl/windows_console.py Outdated
if block: | ||
continue | ||
return None | ||
elif self.__vt_support: | ||
# If virtual terminal is enabled, scanning VT sequences | ||
self.event_queue.push(rec.Event.KeyEvent.uChar.UnicodeChar) | ||
self.event_queue.push(raw_key) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
A missed opportunity whenmain was merged during development of#124119.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Which@sergey-miryanov takes care ofhere as part of#131901.
So maybe I should remove this one, but I'd really like to keep the other tworaw_key
changes (not only because I'd have to adapt almost all tests :)
sergey-miryanovApr 20, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
IMHO you should merge my branch here :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I can undo the change - then you won't have conflicts. I don't think we should (partially) merge between our two PRs?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Yeah, I think you are right - we shouldn't merge our PRs. You can keep your changes - I'm OK if here will be conflict.
Lib/_pyrepl/windows_console.py Outdated
return Event(evt="key", data="\033") # keymap.py uses this for meta | ||
return Event(evt="key", data=key, raw=key) | ||
return Event(evt="key", data=key, raw=raw_key) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Looking at thediff, previously
returnEvent(evt="key",data=code,raw=rec.Event.KeyEvent.uChar.UnicodeChar)
was used, which in the new code should have beenraw_key
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Actually, I was wondering why this change did not break anything, but AFAICT theraw
member is not used in the whole code base except
cpython/Lib/_pyrepl/unix_console.py
Line 513 in5d8e432
defgetpending(self): |
where the two
getpending
implementations dutifully respecte.raw += e.raw
:)
chris-eiblApr 20, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
When searching in the code base forgetpending
I found
cpython/Lib/_pyrepl/windows_console.py
Lines 518 to 521 in5d8e432
defgetpending(self)->Event: | |
"""Return the characters that have been typed but not yet | |
processed.""" | |
returnEvent("key","",b"") |
which clearly seems to be a bug to me? Because even thoughWindowsConsole._read_input()
only reads one WindowsINPUT_RECORD
per call,get_event
could have put something intoself.event_queue
.
I've addressed this inhttps://github.com/python/cpython/pull/132889/files#r2059235071.
Uh oh!
There was an error while loading.Please reload this page.
Adding@vstinner,@eendebakpt and@paulie4 , since they were involved in#128389 and already talked about AltGr. |
PS: switching to an english keyboard layout, I can use the AltGr key like right-Alt, since it is not used in this keyboard layout :) |
The failing of Ubuntu (free-threading) is definitely unrelated, since this is a Windows specific change. |
Do you think it'd be possible to add some tests for this change to ensure we don't accidentally regress again? |
Yeah, I've already thought about it, but am still unsure how to best do it. ATM, I am thinking of mocking cpython/Lib/_pyrepl/windows_console.py Line 411 inb87189d
to be able to test cpython/Lib/_pyrepl/windows_console.py Lines 426 to 432 inb87189d
AFAICT, all the existing tests just mock WDYT? |
Agreed that we shouldn't be mocking |
Uh oh!
There was an error while loading.Please reload this page.
Misc/NEWS.d/next/Library/2025-04-12-16-29-42.gh-issue-132439.3twrU6.rst OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
because it will be part of 131901, anywayy
because it is unused
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Excellent work again! Very well thought through.
07f416a
intopython:mainUh oh!
There was an error while loading.Please reload this page.
Thanks@chris-eibl for the PR, and@ambv for merging it 🌮🎉.. I'm working now to backport this PR to: 3.13. |
Sorry,@chris-eibl and@ambv, I could not cleanly backport this to
|
Will repeat here too - problem with backport because VT support was not backported#130805 (comment) (for completeness) |
Yeah, I am backporting the VT support too because it's the only way we can have a sensibly similar codebase for bug fixes. |
…ltGr on cmd.exe (pythonGH-132440)(cherry picked from commit07f416a)Co-authored-by: Chris Eibl <138194463+chris-eibl@users.noreply.github.com>Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
GH-133460 is a backport of this pull request to the3.13 branch. |
Uh oh!
There was an error while loading.Please reload this page.
E.g. on my keyboard with German layout,
{
is usually entered via pressing theAltGr key and7
, i.e.AltGr+7
.Likewise,
}
,[
,]
,\
and some more can only be entered viaAltGr
.But since#128388 /#128389 these are swallowed by the REPL on Windows and can no longer be entered.
This 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.