import curses inited = False #default_color = False default_color = True def init(): global colors, _colors, _pairs, attributes, inited, index if not inited: index = 1 colors = { 'cyan': curses.COLOR_CYAN, 'green': curses.COLOR_GREEN, 'red': curses.COLOR_RED, 'yellow': curses.COLOR_YELLOW, 'blue': curses.COLOR_BLUE, 'magenta': curses.COLOR_MAGENTA, 'black': curses.COLOR_BLACK, 'white': curses.COLOR_WHITE } if default_color: colors["default"] = -1 _colors = [] _pairs = {} for key in _pairs: fg, bg = key curses.init_pair(index, colors[fg], colors[bg]) _pairs[key] = curses.color_pair(index) _colors.append(key) index = len(_colors) + 1 attributes = { 'bold': curses.A_BOLD, 'reverse': curses.A_REVERSE, 'normal': curses.A_NORMAL, 'underline': curses.A_UNDERLINE, 'dim': curses.A_DIM, 'standout': curses.A_STANDOUT } inited = True def pairs(fg, bg): if not curses.has_colors(): return curses.color_pair(0) global colors, _colors, _pairs, index key = (fg, bg) if key not in _pairs: assert index < curses.COLOR_PAIRS if not default_color: if fg == "default": fg = "white" if bg == "default": bg = "black" curses.init_pair(index, colors[fg], colors[bg]) _pairs[key] = curses.color_pair(index) _colors.append(key) index = len(_colors) + 1 return _pairs[key] def get_pairs(index): if index == 0: return ('white', 'black') else: return _colors[index-1] def reverse_colors(attr): return attr ^ curses.A_REVERSE def build(fg, bg, *attr): cattr = pairs(fg, bg) return build_attr(cattr, *attr) def build_attr(*attr): v = curses.A_NORMAL for x in attr: if type(x) == type(''): x = attributes[x] v = v | x return v