123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import sys
- from dataclasses import dataclass
- @dataclass
- class WindowsConsoleFeatures:
- """Windows features available."""
- vt: bool = False
- """The console supports VT codes."""
- truecolor: bool = False
- """The console supports truecolor."""
- try:
- import ctypes
- from ctypes import LibraryLoader
- if sys.platform == "win32":
- windll = LibraryLoader(ctypes.WinDLL)
- else:
- windll = None
- raise ImportError("Not windows")
- from pip._vendor.rich._win32_console import (
- ENABLE_VIRTUAL_TERMINAL_PROCESSING,
- GetConsoleMode,
- GetStdHandle,
- LegacyWindowsError,
- )
- except (AttributeError, ImportError, ValueError):
- # Fallback if we can't load the Windows DLL
- def get_windows_console_features() -> WindowsConsoleFeatures:
- features = WindowsConsoleFeatures()
- return features
- else:
- def get_windows_console_features() -> WindowsConsoleFeatures:
- """Get windows console features.
- Returns:
- WindowsConsoleFeatures: An instance of WindowsConsoleFeatures.
- """
- handle = GetStdHandle()
- try:
- console_mode = GetConsoleMode(handle)
- success = True
- except LegacyWindowsError:
- console_mode = 0
- success = False
- vt = bool(success and console_mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING)
- truecolor = False
- if vt:
- win_version = sys.getwindowsversion()
- truecolor = win_version.major > 10 or (
- win_version.major == 10 and win_version.build >= 15063
- )
- features = WindowsConsoleFeatures(vt=vt, truecolor=truecolor)
- return features
- if __name__ == "__main__":
- import platform
- features = get_windows_console_features()
- from pip._vendor.rich import print
- print(f'platform="{platform.system()}"')
- print(repr(features))
|