[PATCH 1 of 1 RESEND] color: add support for Windows consoles
Steve Borho
steve at borho.org
Tue Apr 6 10:59:10 CDT 2010
On Tue, Apr 6, 2010 at 10:52 AM, Brodie Rao <dackze at gmail.com> wrote:
> On Apr 6, 2010, at 10:47 AM, steve at borho.org wrote:
>
>> # HG changeset patch
>> # User Steve Borho <steve at borho.org>
>> # Date 1270561759 18000
>> # Node ID 89c4c895bddc709c3f680dc0e07a73449608e2c8
>> # Parent 06ede55eb9b0f0df9775b15291fd64d7b3255f76
>> color: add support for Windows consoles
>>
>> Introduces ui.color configurable with values 'auto', 'ansi', or 'win32'. Any
>> other value disables coloring. When 'auto' is selected, the win32 console
>> method will be used if the win32console Python module is detected (requires
>> pywin32 to be installed).
>
> Why ui.color? Why not color.mode or color.format?
>
> It also seems a little confusing considering there's also --color which takes auto, always, and never, but doesn't have anything to do with the output format.
I was just looking at this, and agree it's confusing. color.mode is fine.
>>
>> diff --git a/hgext/color.py b/hgext/color.py
>> --- a/hgext/color.py
>> +++ b/hgext/color.py
>> @@ -150,19 +150,35 @@
>> return ''.join(style(a, label) for a, label in _buffers.pop())
>> return ''.join(a for a, label in _buffers.pop())
>>
>> +mode = 'ansi'
>> def write(orig, *args, **opts):
>> label = opts.get('label', '')
>> global _buffers
>> if _buffers:
>> _buffers[-1].extend([(str(a), label) for a in args])
>> + elif mode == 'win32':
>> + for a in args:
>> + win32print(a, orig, **opts)
>> else:
>> return orig(*[style(str(a), label) for a in args], **opts)
>>
>> def write_err(orig, *args, **opts):
>> label = opts.get('label', '')
>> - return orig(*[style(str(a), label) for a in args], **opts)
>> + if mode == 'win32':
>> + for a in args:
>> + win32print(a, orig, **opts)
>> + else:
>> + return orig(*[style(str(a), label) for a in args], **opts)
>>
>> def uisetup(ui):
>> + global mode
>> + mode = ui.config('ui', 'color', 'auto')
>> + if mode == 'auto':
>> + mode = _w32effects and 'win32' or 'ansi'
>
> What if someone's on win32 but is using an ANSI terminal?
Currently. they have to override auto-detection if they want ANSI on
Windows. Is there a bullet-proof way to detect an ANSI capable term
on Windows?
I'll post a new patch with color.mode and docs for it.
--
Steve Borho
More information about the Mercurial-devel
mailing list