mirror of
https://github.com/python/cpython.git
synced 2025-11-11 02:52:04 +00:00
[3.13] gh-124096: Enable REPL virtual terminal support on Windows (GH-124119) (GH-133457)
To support virtual terminal mode in Windows PYREPL, we need a scanner
to read over the supported escaped VT sequences.
Windows REPL input was using virtual key mode, which does not support
terminal escape sequences. This patch calls `SetConsoleMode` properly
when initializing and send sequences to enable bracketed-paste modes
to support verbatim copy-and-paste.
(cherry picked from commit a65366ed87)
Co-authored-by: Y5 <124019959+y5c4l3@users.noreply.github.com>
Signed-off-by: y5c4l3 <y5c4l3@proton.me>
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
Co-authored-by: Dustin L. Howett <dustin@howett.net>
Co-authored-by: wheeheee <104880306+wheeheee@users.noreply.github.com>
This commit is contained in:
parent
1105ed316b
commit
a2bf7a0a47
7 changed files with 264 additions and 113 deletions
42
Lib/_pyrepl/windows_eventqueue.py
Normal file
42
Lib/_pyrepl/windows_eventqueue.py
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
"""
|
||||
Windows event and VT sequence scanner
|
||||
"""
|
||||
|
||||
from .base_eventqueue import BaseEventQueue
|
||||
|
||||
|
||||
# Reference: https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#input-sequences
|
||||
VT_MAP: dict[bytes, str] = {
|
||||
b'\x1b[A': 'up',
|
||||
b'\x1b[B': 'down',
|
||||
b'\x1b[C': 'right',
|
||||
b'\x1b[D': 'left',
|
||||
b'\x1b[1;5D': 'ctrl left',
|
||||
b'\x1b[1;5C': 'ctrl right',
|
||||
|
||||
b'\x1b[H': 'home',
|
||||
b'\x1b[F': 'end',
|
||||
|
||||
b'\x7f': 'backspace',
|
||||
b'\x1b[2~': 'insert',
|
||||
b'\x1b[3~': 'delete',
|
||||
b'\x1b[5~': 'page up',
|
||||
b'\x1b[6~': 'page down',
|
||||
|
||||
b'\x1bOP': 'f1',
|
||||
b'\x1bOQ': 'f2',
|
||||
b'\x1bOR': 'f3',
|
||||
b'\x1bOS': 'f4',
|
||||
b'\x1b[15~': 'f5',
|
||||
b'\x1b[17~': 'f6',
|
||||
b'\x1b[18~': 'f7',
|
||||
b'\x1b[19~': 'f8',
|
||||
b'\x1b[20~': 'f9',
|
||||
b'\x1b[21~': 'f10',
|
||||
b'\x1b[23~': 'f11',
|
||||
b'\x1b[24~': 'f12',
|
||||
}
|
||||
|
||||
class EventQueue(BaseEventQueue):
|
||||
def __init__(self, encoding: str) -> None:
|
||||
BaseEventQueue.__init__(self, encoding, VT_MAP)
|
||||
Loading…
Add table
Add a link
Reference in a new issue