| # Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. |
| ''' |
| This module generates ANSI character codes to printing colors to terminals. |
| See: http://en.wikipedia.org/wiki/ANSI_escape_code |
| ''' |
| |
| CSI = '\033[' |
| OSC = '\033]' |
| BEL = '\a' |
| |
| |
| def code_to_chars(code): |
| return CSI + str(code) + 'm' |
| |
| def set_title(title): |
| return OSC + '2;' + title + BEL |
| |
| def clear_screen(mode=2): |
| return CSI + str(mode) + 'J' |
| |
| def clear_line(mode=2): |
| return CSI + str(mode) + 'K' |
| |
| |
| class AnsiCodes(object): |
| def __init__(self): |
| # the subclasses declare class attributes which are numbers. |
| # Upon instantiation we define instance attributes, which are the same |
| # as the class attributes but wrapped with the ANSI escape sequence |
| for name in dir(self): |
| if not name.startswith('_'): |
| value = getattr(self, name) |
| setattr(self, name, code_to_chars(value)) |
| |
| |
| class AnsiCursor(object): |
| def UP(self, n=1): |
| return CSI + str(n) + 'A' |
| def DOWN(self, n=1): |
| return CSI + str(n) + 'B' |
| def FORWARD(self, n=1): |
| return CSI + str(n) + 'C' |
| def BACK(self, n=1): |
| return CSI + str(n) + 'D' |
| def POS(self, x=1, y=1): |
| return CSI + str(y) + ';' + str(x) + 'H' |
| |
| |
| class AnsiFore(AnsiCodes): |
| BLACK = 30 |
| RED = 31 |
| GREEN = 32 |
| YELLOW = 33 |
| BLUE = 34 |
| MAGENTA = 35 |
| CYAN = 36 |
| WHITE = 37 |
| RESET = 39 |
| |
| # These are fairly well supported, but not part of the standard. |
| LIGHTBLACK_EX = 90 |
| LIGHTRED_EX = 91 |
| LIGHTGREEN_EX = 92 |
| LIGHTYELLOW_EX = 93 |
| LIGHTBLUE_EX = 94 |
| LIGHTMAGENTA_EX = 95 |
| LIGHTCYAN_EX = 96 |
| LIGHTWHITE_EX = 97 |
| |
| |
| class AnsiBack(AnsiCodes): |
| BLACK = 40 |
| RED = 41 |
| GREEN = 42 |
| YELLOW = 43 |
| BLUE = 44 |
| MAGENTA = 45 |
| CYAN = 46 |
| WHITE = 47 |
| RESET = 49 |
| |
| # These are fairly well supported, but not part of the standard. |
| LIGHTBLACK_EX = 100 |
| LIGHTRED_EX = 101 |
| LIGHTGREEN_EX = 102 |
| LIGHTYELLOW_EX = 103 |
| LIGHTBLUE_EX = 104 |
| LIGHTMAGENTA_EX = 105 |
| LIGHTCYAN_EX = 106 |
| LIGHTWHITE_EX = 107 |
| |
| |
| class AnsiStyle(AnsiCodes): |
| BRIGHT = 1 |
| DIM = 2 |
| NORMAL = 22 |
| RESET_ALL = 0 |
| |
| Fore = AnsiFore() |
| Back = AnsiBack() |
| Style = AnsiStyle() |
| Cursor = AnsiCursor() |