mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-23 09:01:43 +00:00
[utils] windows_enable_vt_mode: Proper implementation
Authored by: Grub4K
This commit is contained in:
parent
71df9b7fd5
commit
c53a18f016
@ -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
|
|
||||||
|
|
||||||
|
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
|
WINDOWS_VT_MODE = True
|
||||||
supports_terminal_sequences.cache_clear()
|
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')
|
||||||
|
Loading…
Reference in New Issue
Block a user