ambuild2/util.py
changeset 223 0cf7fb24b5fa
parent 209 582b84e577a8
child 224 11f656dae71a
     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):