1.1 --- a/ambuild2/util.py Wed Jan 08 21:58:16 2014 -0800
1.2 +++ b/ambuild2/util.py Fri Jan 31 23:58:52 2014 -0800
1.3 @@ -263,11 +263,31 @@
1.4 return p.returncode, out, err
1.5
1.6 if IsUnixy():
1.7 - ConsoleGreen = '\033[92m'
1.8 - ConsoleRed = '\033[91m'
1.9 - ConsoleNormal = '\033[0m'
1.10 - ConsoleBlue = '\033[94m'
1.11 - ConsoleHeader = '\033[95m'
1.12 + ConsoleGreen = lambda fp: fp.write('\033[92m')
1.13 + ConsoleRed = lambda fp: fp.write('\033[91m')
1.14 + ConsoleNormal = lambda fp: fp.write('\033[0m')
1.15 + ConsoleBlue = lambda fp: fp.write('\033[94m')
1.16 + ConsoleHeader = lambda fp: fp.write('\033[95m')
1.17 +elif IsWindows():
1.18 + def SwitchColor(fp, color):
1.19 + from ambuild2.ipc import winapi
1.20 +
1.21 + std = None
1.22 + if fp == sys.stdout:
1.23 + std = winapi.STD_OUTPUT_HANDLE
1.24 + elif fp == sys.stdin:
1.25 + std = winapi.STD_ERROR_HANDLE
1.26 + if std is None:
1.27 + return
1.28 +
1.29 + handle = winapi.GetStdHandle(std)
1.30 + winapi.SetConsoleTextAttribute(handle, color)
1.31 +
1.32 + ConsoleGreen = lambda fp: SwitchColor(fp, 0xA)
1.33 + ConsoleRed = lambda fp: SwitchColor(fp, 0xC)
1.34 + ConsoleNormal = lambda fp: SwitchColor(fp, 0x7)
1.35 + ConsoleBlue = lambda fp: SwitchColor(fp, 0x9)
1.36 + ConsoleHeader = lambda fp: SwitchColor(fp, 0xD)
1.37 else:
1.38 ConsoleGreen = ''
1.39 ConsoleRed = ''
1.40 @@ -276,7 +296,7 @@
1.41 ConsoleHeader = ''
1.42
1.43 def IsColor(text):
1.44 - return text.startswith('\033[')
1.45 + return IsLambda(text)
1.46
1.47 sConsoleColorsEnabled = True
1.48 def DisableConsoleColors():
1.49 @@ -285,9 +305,12 @@
1.50
1.51 def con_print(fp, args):
1.52 for arg in args:
1.53 - if not sConsoleColorsEnabled and IsColor(arg):
1.54 - continue
1.55 - fp.write(arg)
1.56 + if IsColor(arg):
1.57 + if not sConsoleColorsEnabled:
1.58 + continue
1.59 + arg(fp)
1.60 + else:
1.61 + fp.write(arg)
1.62 fp.write('\n')
1.63
1.64 def con_out(*args):