mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[utils] windows_enable_vt_mode: Proper implementation
Authored by: Grub4K
This commit is contained in:
		| @@ -5579,17 +5579,39 @@ def supports_terminal_sequences(stream): | ||||
|         return False | ||||
| 
 | ||||
| 
 | ||||
| def windows_enable_vt_mode():  # TODO: Do this the proper way https://bugs.python.org/issue30075 | ||||
| def windows_enable_vt_mode(): | ||||
|     """Ref: https://bugs.python.org/issue30075 """ | ||||
|     if get_windows_version() < (10, 0, 10586): | ||||
|         return | ||||
|     global WINDOWS_VT_MODE | ||||
|     try: | ||||
|         Popen.run('', shell=True) | ||||
|     except Exception: | ||||
|         return | ||||
| 
 | ||||
|     import ctypes | ||||
|     import ctypes.wintypes | ||||
|     import msvcrt | ||||
| 
 | ||||
|     ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 | ||||
| 
 | ||||
|     dll = ctypes.WinDLL('kernel32', use_last_error=False) | ||||
|     handle = os.open('CONOUT$', os.O_RDWR) | ||||
| 
 | ||||
|     try: | ||||
|         h_out = ctypes.wintypes.HANDLE(msvcrt.get_osfhandle(handle)) | ||||
|         dw_original_mode = ctypes.wintypes.DWORD() | ||||
|         success = dll.GetConsoleMode(h_out, ctypes.byref(dw_original_mode)) | ||||
|         if not success: | ||||
|             raise Exception('GetConsoleMode failed') | ||||
| 
 | ||||
|         success = dll.SetConsoleMode(h_out, ctypes.wintypes.DWORD( | ||||
|             dw_original_mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) | ||||
|         if not success: | ||||
|             raise Exception('SetConsoleMode failed') | ||||
|     except Exception as e: | ||||
|         write_string(f'WARNING: Cannot enable VT mode - {e}') | ||||
|     else: | ||||
|         global WINDOWS_VT_MODE | ||||
|         WINDOWS_VT_MODE = True | ||||
|         supports_terminal_sequences.cache_clear() | ||||
|     finally: | ||||
|         os.close(handle) | ||||
| 
 | ||||
| 
 | ||||
| _terminal_sequences_re = re.compile('\033\\[[^m]+m') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan