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 |         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): |     if get_windows_version() < (10, 0, 10586): | ||||||
|         return |         return | ||||||
|     global WINDOWS_VT_MODE |  | ||||||
|     try: |  | ||||||
|         Popen.run('', shell=True) |  | ||||||
|     except Exception: |  | ||||||
|         return |  | ||||||
| 
 | 
 | ||||||
|     WINDOWS_VT_MODE = True |     import ctypes | ||||||
|     supports_terminal_sequences.cache_clear() |     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') | _terminal_sequences_re = re.compile('\033\\[[^m]+m') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan