Skip to content

Commit

Permalink
Merge pull request pre-commit#1382 from pre-commit/better_windows_color
Browse files Browse the repository at this point in the history
support colors on windows during git better
  • Loading branch information
asottile authored Apr 2, 2020
2 parents 34e9d11 + 9fc5a93 commit 30a36a8
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
10 changes: 5 additions & 5 deletions pre_commit/color.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def _enable() -> None:
from ctypes.wintypes import DWORD
from ctypes.wintypes import HANDLE

STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4

def bool_errcheck(result, func, args):
Expand Down Expand Up @@ -40,9 +40,9 @@ def bool_errcheck(result, func, args):
#
# More info on the escape sequences supported:
# https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx
stdout = GetStdHandle(STD_OUTPUT_HANDLE)
flags = GetConsoleMode(stdout)
SetConsoleMode(stdout, flags | ENABLE_VIRTUAL_TERMINAL_PROCESSING)
stderr = GetStdHandle(STD_ERROR_HANDLE)
flags = GetConsoleMode(stderr)
SetConsoleMode(stderr, flags | ENABLE_VIRTUAL_TERMINAL_PROCESSING)

try:
_enable()
Expand Down Expand Up @@ -90,7 +90,7 @@ def use_color(setting: str) -> bool:
return (
setting == 'always' or (
setting == 'auto' and
sys.stdout.isatty() and
sys.stderr.isatty() and
terminal_supports_color and
os.getenv('TERM') != 'dumb'
)
Expand Down
8 changes: 4 additions & 4 deletions tests/color_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,26 +29,26 @@ def test_use_color_always():


def test_use_color_no_tty():
with mock.patch.object(sys.stdout, 'isatty', return_value=False):
with mock.patch.object(sys.stderr, 'isatty', return_value=False):
assert use_color('auto') is False


def test_use_color_tty_with_color_support():
with mock.patch.object(sys.stdout, 'isatty', return_value=True):
with mock.patch.object(sys.stderr, 'isatty', return_value=True):
with mock.patch('pre_commit.color.terminal_supports_color', True):
with envcontext.envcontext((('TERM', envcontext.UNSET),)):
assert use_color('auto') is True


def test_use_color_tty_without_color_support():
with mock.patch.object(sys.stdout, 'isatty', return_value=True):
with mock.patch.object(sys.stderr, 'isatty', return_value=True):
with mock.patch('pre_commit.color.terminal_supports_color', False):
with envcontext.envcontext((('TERM', envcontext.UNSET),)):
assert use_color('auto') is False


def test_use_color_dumb_term():
with mock.patch.object(sys.stdout, 'isatty', return_value=True):
with mock.patch.object(sys.stderr, 'isatty', return_value=True):
with mock.patch('pre_commit.color.terminal_supports_color', True):
with envcontext.envcontext((('TERM', 'dumb'),)):
assert use_color('auto') is False
Expand Down

0 comments on commit 30a36a8

Please sign in to comment.