You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.5 KiB
103 lines
2.5 KiB
4 years ago
|
# 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()
|