mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	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. 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>
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			991 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			991 B
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
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)
 |