--- a/hgext/color.py Tue Feb 03 19:10:03 2015 -0600
+++ b/hgext/color.py Tue Feb 03 16:24:32 2015 -0800
@@ -215,9 +215,23 @@
mode = ui.config('color', 'mode', 'auto')
realmode = mode
if mode == 'auto':
- if os.name == 'nt' and 'TERM' not in os.environ:
- # looks line a cmd.exe console, use win32 API or nothing
- realmode = 'win32'
+ if os.name == 'nt':
+ term = os.environ.get('TERM')
+ # TERM won't be defined in a vanilla cmd.exe environment.
+ if not term:
+ realmode = 'win32'
+
+ # UNIX-like environments on Windows such as Cygwin and MSYS will
+ # set TERM. They appear to make a best effort attempt at setting it
+ # to something appropriate. However, not all environments with TERM
+ # defined support ANSI. Since "ansi" could result in terminal
+ # gibberish, we error on the side of selecting "win32". However, if
+ # w32effects is not defined, we almost certainly don't support
+ # "win32", so don't even try.
+ if 'xterm' in term or not w32effects:
+ realmode = 'ansi'
+ else:
+ realmode = 'win32'
else:
realmode = 'ansi'