termcolors: refactor, separate config, yaml dependency
This commit is contained in:
parent
8d27b64fdb
commit
c11c250a5e
2 changed files with 155 additions and 124 deletions
210
termcolors
210
termcolors
|
@ -4,7 +4,9 @@
|
|||
import os
|
||||
import re
|
||||
import sys
|
||||
import yaml
|
||||
|
||||
CONFNAME = '.termcolors.yaml'
|
||||
ESCAPES = {
|
||||
'colorspec': '{};rgb:{}/{}/{}',
|
||||
|
||||
|
@ -12,133 +14,92 @@ ESCAPES = {
|
|||
'screen': '\033P\033]4;{}\007\033\\',
|
||||
'tmux': '\033Ptmux;\033\033]4;{}\007\033\\'
|
||||
}
|
||||
COLORS = {
|
||||
'default': {
|
||||
'16': '#000000', '96': '#875f87', '176': '#d787d7',
|
||||
'17': '#00005f', '97': '#875faf', '177': '#d787ff',
|
||||
'18': '#000087', '98': '#875fd7', '178': '#d7af00',
|
||||
'19': '#0000af', '99': '#875fff', '179': '#d7af5f',
|
||||
'20': '#0000d7', '100': '#878700', '180': '#d7af87',
|
||||
'21': '#0000ff', '101': '#87875f', '181': '#d7afaf',
|
||||
'22': '#005f00', '102': '#878787', '182': '#d7afd7',
|
||||
'23': '#005f5f', '103': '#8787af', '183': '#d7afff',
|
||||
'24': '#005f87', '104': '#8787d7', '184': '#d7d700',
|
||||
'25': '#005faf', '105': '#8787ff', '185': '#d7d75f',
|
||||
'26': '#005fd7', '106': '#87af00', '186': '#d7d787',
|
||||
'27': '#005fff', '107': '#87af5f', '187': '#d7d7af',
|
||||
'28': '#008700', '108': '#87af87', '188': '#d7d7d7',
|
||||
'29': '#00875f', '109': '#87afaf', '189': '#d7d7ff',
|
||||
'30': '#008787', '110': '#87afd7', '190': '#d7ff00',
|
||||
'31': '#0087af', '111': '#87afff', '191': '#d7ff5f',
|
||||
'32': '#0087d7', '112': '#87d700', '192': '#d7ff87',
|
||||
'33': '#0087ff', '113': '#87d75f', '193': '#d7ffaf',
|
||||
'34': '#00af00', '114': '#87d787', '194': '#d7ffd7',
|
||||
'35': '#00af5f', '115': '#87d7af', '195': '#d7ffff',
|
||||
'36': '#00af87', '116': '#87d7d7', '196': '#ff0000',
|
||||
'37': '#00afaf', '117': '#87d7ff', '197': '#ff005f',
|
||||
'38': '#00afd7', '118': '#87ff00', '198': '#ff0087',
|
||||
'39': '#00afff', '119': '#87ff5f', '199': '#ff00af',
|
||||
'40': '#00d700', '120': '#87ff87', '200': '#ff00d7',
|
||||
'41': '#00d75f', '121': '#87ffaf', '201': '#ff00ff',
|
||||
'42': '#00d787', '122': '#87ffd7', '202': '#ff5f00',
|
||||
'43': '#00d7af', '123': '#87ffff', '203': '#ff5f5f',
|
||||
'44': '#00d7d7', '124': '#af0000', '204': '#ff5f87',
|
||||
'45': '#00d7ff', '125': '#af005f', '205': '#ff5faf',
|
||||
'46': '#00ff00', '126': '#af0087', '206': '#ff5fd7',
|
||||
'47': '#00ff5f', '127': '#af00af', '207': '#ff5fff',
|
||||
'48': '#00ff87', '128': '#af00d7', '208': '#ff8700',
|
||||
'49': '#00ffaf', '129': '#af00ff', '209': '#ff875f',
|
||||
'50': '#00ffd7', '130': '#af5f00', '210': '#ff8787',
|
||||
'51': '#00ffff', '131': '#af5f5f', '211': '#ff87af',
|
||||
'52': '#5f0000', '132': '#af5f87', '212': '#ff87d7',
|
||||
'53': '#5f005f', '133': '#af5faf', '213': '#ff87ff',
|
||||
'54': '#5f0087', '134': '#af5fd7', '214': '#ffaf00',
|
||||
'55': '#5f00af', '135': '#af5fff', '215': '#ffaf5f',
|
||||
'56': '#5f00d7', '136': '#af8700', '216': '#ffaf87',
|
||||
'57': '#5f00ff', '137': '#af875f', '217': '#ffafaf',
|
||||
'58': '#5f5f00', '138': '#af8787', '218': '#ffafd7',
|
||||
'59': '#5f5f5f', '139': '#af87af', '219': '#ffafff',
|
||||
'60': '#5f5f87', '140': '#af87d7', '220': '#ffd700',
|
||||
'61': '#5f5faf', '141': '#af87ff', '221': '#ffd75f',
|
||||
'62': '#5f5fd7', '142': '#afaf00', '222': '#ffd787',
|
||||
'63': '#5f5fff', '143': '#afaf5f', '223': '#ffd7af',
|
||||
'64': '#5f8700', '144': '#afaf87', '224': '#ffd7d7',
|
||||
'65': '#5f875f', '145': '#afafaf', '225': '#ffd7ff',
|
||||
'66': '#5f8787', '146': '#afafd7', '226': '#ffff00',
|
||||
'67': '#5f87af', '147': '#afafff', '227': '#ffff5f',
|
||||
'68': '#5f87d7', '148': '#afd700', '228': '#ffff87',
|
||||
'69': '#5f87ff', '149': '#afd75f', '229': '#ffffaf',
|
||||
'70': '#5faf00', '150': '#afd787', '230': '#ffffd7',
|
||||
'71': '#5faf5f', '151': '#afd7af', '231': '#ffffff',
|
||||
'72': '#5faf87', '152': '#afd7d7', '232': '#080808',
|
||||
'73': '#5fafaf', '153': '#afd7ff', '233': '#121212',
|
||||
'74': '#5fafd7', '154': '#afff00', '234': '#1c1c1c',
|
||||
'75': '#5fafff', '155': '#afff5f', '235': '#262626',
|
||||
'76': '#5fd700', '156': '#afff87', '236': '#303030',
|
||||
'77': '#5fd75f', '157': '#afffaf', '237': '#3a3a3a',
|
||||
'78': '#5fd787', '158': '#afffd7', '238': '#444444',
|
||||
'79': '#5fd7af', '159': '#afffff', '239': '#4e4e4e',
|
||||
'80': '#5fd7d7', '160': '#d70000', '240': '#585858',
|
||||
'81': '#5fd7ff', '161': '#d7005f', '241': '#606060',
|
||||
'82': '#5fff00', '162': '#d70087', '242': '#666666',
|
||||
'83': '#5fff5f', '163': '#d700af', '243': '#767676',
|
||||
'84': '#5fff87', '164': '#d700d7', '244': '#808080',
|
||||
'85': '#5fffaf', '165': '#d700ff', '245': '#8a8a8a',
|
||||
'86': '#5fffd7', '166': '#d75f00', '246': '#949494',
|
||||
'87': '#5fffff', '167': '#d75f5f', '247': '#9e9e9e',
|
||||
'88': '#870000', '168': '#d75f87', '248': '#a8a8a8',
|
||||
'89': '#87005f', '169': '#d75faf', '249': '#b2b2b2',
|
||||
'90': '#870087', '170': '#d75fd7', '250': '#bcbcbc',
|
||||
'91': '#8700af', '171': '#d75fff', '251': '#c6c6c6',
|
||||
'92': '#8700d7', '172': '#d78700', '252': '#d0d0d0',
|
||||
'93': '#8700ff', '173': '#d7875f', '253': '#dadada',
|
||||
'94': '#875f00', '174': '#d78787', '254': '#e4e4e4',
|
||||
'95': '#875f5f', '175': '#d787af', '255': '#eeeeee'
|
||||
},
|
||||
'gruvbox': {
|
||||
'24': '#076678', '136': '#b57614', '234': '#1d2021',
|
||||
'66': '#427b58', '142': '#b8bb26', '235': '#282828',
|
||||
'72': '#689d6a', '166': '#d65d0e', '236': '#32302f',
|
||||
'88': '#9d0006', '167': '#fb4934', '237': '#3c3836',
|
||||
'96': '#8f3f71', '172': '#d79921', '239': '#504945',
|
||||
'100': '#79740e', '175': '#d3869b', '241': '#665c54',
|
||||
'106': '#98971a', '208': '#fe8019', '243': '#7c6f64',
|
||||
'108': '#8ec07c', '214': '#fabd2f', '244': '#928374',
|
||||
'109': '#83a598', '223': '#ebdbb2', '245': '#928374',
|
||||
'124': '#cc241d', '228': '#f2e5bc', '246': '#a89984',
|
||||
'130': '#af3a03', '229': '#fdf4c1', '248': '#bdae93',
|
||||
'132': '#b16286', '230': '#f9f5d7', '250': '#d5c4a1'
|
||||
},
|
||||
'gotham256': {
|
||||
'17': '#091f2e', '67': '#888ca6', '194': '#d3ebe9',
|
||||
'18': '#0a3749', '78': '#2aa889', '214': '#edb443',
|
||||
'24': '#245361', '81': '#599cab', '232': '#0c1014',
|
||||
'44': '#33859E', '122': '#99d1ce', '233': '#11151c',
|
||||
'60': '#4e5166', '124': '#c23127'
|
||||
},
|
||||
# an experiment to support changing colours on the fly for terminals
|
||||
'solarized': {
|
||||
'00': '#073642', '06': '#2aa198', '11': '#657b83',
|
||||
'01': '#dc322f', '07': '#eee8d5', '12': '#839496',
|
||||
'02': '#859900', '08': '#002b36', '13': '#6c71c4',
|
||||
'03': '#b58900', '09': '#cb4b16', '14': '#93a1a1',
|
||||
'04': '#268bd2', '10': '#586e75', '15': '#fdf6e3',
|
||||
'05': '#d33682'
|
||||
}
|
||||
DEFAULT = {
|
||||
16: '#000000', 76: '#5fd700', 136: '#af8700', 196: '#ff0000',
|
||||
17: '#00005f', 77: '#5fd75f', 137: '#af875f', 197: '#ff005f',
|
||||
18: '#000087', 78: '#5fd787', 138: '#af8787', 198: '#ff0087',
|
||||
19: '#0000af', 79: '#5fd7af', 139: '#af87af', 199: '#ff00af',
|
||||
20: '#0000d7', 80: '#5fd7d7', 140: '#af87d7', 200: '#ff00d7',
|
||||
21: '#0000ff', 81: '#5fd7ff', 141: '#af87ff', 201: '#ff00ff',
|
||||
22: '#005f00', 82: '#5fff00', 142: '#afaf00', 202: '#ff5f00',
|
||||
23: '#005f5f', 83: '#5fff5f', 143: '#afaf5f', 203: '#ff5f5f',
|
||||
24: '#005f87', 84: '#5fff87', 144: '#afaf87', 204: '#ff5f87',
|
||||
25: '#005faf', 85: '#5fffaf', 145: '#afafaf', 205: '#ff5faf',
|
||||
26: '#005fd7', 86: '#5fffd7', 146: '#afafd7', 206: '#ff5fd7',
|
||||
27: '#005fff', 87: '#5fffff', 147: '#afafff', 207: '#ff5fff',
|
||||
28: '#008700', 88: '#870000', 148: '#afd700', 208: '#ff8700',
|
||||
29: '#00875f', 89: '#87005f', 149: '#afd75f', 209: '#ff875f',
|
||||
30: '#008787', 90: '#870087', 150: '#afd787', 210: '#ff8787',
|
||||
31: '#0087af', 91: '#8700af', 151: '#afd7af', 211: '#ff87af',
|
||||
32: '#0087d7', 92: '#8700d7', 152: '#afd7d7', 212: '#ff87d7',
|
||||
33: '#0087ff', 93: '#8700ff', 153: '#afd7ff', 213: '#ff87ff',
|
||||
34: '#00af00', 94: '#875f00', 154: '#afff00', 214: '#ffaf00',
|
||||
35: '#00af5f', 95: '#875f5f', 155: '#afff5f', 215: '#ffaf5f',
|
||||
36: '#00af87', 96: '#875f87', 156: '#afff87', 216: '#ffaf87',
|
||||
37: '#00afaf', 97: '#875faf', 157: '#afffaf', 217: '#ffafaf',
|
||||
38: '#00afd7', 98: '#875fd7', 158: '#afffd7', 218: '#ffafd7',
|
||||
39: '#00afff', 99: '#875fff', 159: '#afffff', 219: '#ffafff',
|
||||
40: '#00d700', 100: '#878700', 160: '#d70000', 220: '#ffd700',
|
||||
41: '#00d75f', 101: '#87875f', 161: '#d7005f', 221: '#ffd75f',
|
||||
42: '#00d787', 102: '#878787', 162: '#d70087', 222: '#ffd787',
|
||||
43: '#00d7af', 103: '#8787af', 163: '#d700af', 223: '#ffd7af',
|
||||
44: '#00d7d7', 104: '#8787d7', 164: '#d700d7', 224: '#ffd7d7',
|
||||
45: '#00d7ff', 105: '#8787ff', 165: '#d700ff', 225: '#ffd7ff',
|
||||
46: '#00ff00', 106: '#87af00', 166: '#d75f00', 226: '#ffff00',
|
||||
47: '#00ff5f', 107: '#87af5f', 167: '#d75f5f', 227: '#ffff5f',
|
||||
48: '#00ff87', 108: '#87af87', 168: '#d75f87', 228: '#ffff87',
|
||||
49: '#00ffaf', 109: '#87afaf', 169: '#d75faf', 229: '#ffffaf',
|
||||
50: '#00ffd7', 110: '#87afd7', 170: '#d75fd7', 230: '#ffffd7',
|
||||
51: '#00ffff', 111: '#87afff', 171: '#d75fff', 231: '#ffffff',
|
||||
52: '#5f0000', 112: '#87d700', 172: '#d78700', 232: '#080808',
|
||||
53: '#5f005f', 113: '#87d75f', 173: '#d7875f', 233: '#121212',
|
||||
54: '#5f0087', 114: '#87d787', 174: '#d78787', 234: '#1c1c1c',
|
||||
55: '#5f00af', 115: '#87d7af', 175: '#d787af', 235: '#262626',
|
||||
56: '#5f00d7', 116: '#87d7d7', 176: '#d787d7', 236: '#303030',
|
||||
57: '#5f00ff', 117: '#87d7ff', 177: '#d787ff', 237: '#3a3a3a',
|
||||
58: '#5f5f00', 118: '#87ff00', 178: '#d7af00', 238: '#444444',
|
||||
59: '#5f5f5f', 119: '#87ff5f', 179: '#d7af5f', 239: '#4e4e4e',
|
||||
60: '#5f5f87', 120: '#87ff87', 180: '#d7af87', 240: '#585858',
|
||||
61: '#5f5faf', 121: '#87ffaf', 181: '#d7afaf', 241: '#606060',
|
||||
62: '#5f5fd7', 122: '#87ffd7', 182: '#d7afd7', 242: '#666666',
|
||||
63: '#5f5fff', 123: '#87ffff', 183: '#d7afff', 243: '#767676',
|
||||
64: '#5f8700', 124: '#af0000', 184: '#d7d700', 244: '#808080',
|
||||
65: '#5f875f', 125: '#af005f', 185: '#d7d75f', 245: '#8a8a8a',
|
||||
66: '#5f8787', 126: '#af0087', 186: '#d7d787', 246: '#949494',
|
||||
67: '#5f87af', 127: '#af00af', 187: '#d7d7af', 247: '#9e9e9e',
|
||||
68: '#5f87d7', 128: '#af00d7', 188: '#d7d7d7', 248: '#a8a8a8',
|
||||
69: '#5f87ff', 129: '#af00ff', 189: '#d7d7ff', 249: '#b2b2b2',
|
||||
70: '#5faf00', 130: '#af5f00', 190: '#d7ff00', 250: '#bcbcbc',
|
||||
71: '#5faf5f', 131: '#af5f5f', 191: '#d7ff5f', 251: '#c6c6c6',
|
||||
72: '#5faf87', 132: '#af5f87', 192: '#d7ff87', 252: '#d0d0d0',
|
||||
73: '#5fafaf', 133: '#af5faf', 193: '#d7ffaf', 253: '#dadada',
|
||||
74: '#5fafd7', 134: '#af5fd7', 194: '#d7ffd7', 254: '#e4e4e4',
|
||||
75: '#5fafff', 135: '#af5fff', 195: '#d7ffff', 255: '#eeeeee'
|
||||
}
|
||||
|
||||
def get_arg():
|
||||
def get_colors():
|
||||
colors = {'default': DEFAULT}
|
||||
confpath = os.path.join(os.environ['HOME'], CONFNAME)
|
||||
|
||||
try:
|
||||
with open(confpath) as conf:
|
||||
colors.update(yaml.load(conf.read()))
|
||||
except FileNotFoundError:
|
||||
err = 'Config file {} is missing.\n'.format(confpath)
|
||||
sys.stderr.write(err)
|
||||
|
||||
try:
|
||||
colorscheme = sys.argv[1]
|
||||
assert colorscheme in COLORS
|
||||
return colorscheme
|
||||
assert colorscheme in colors
|
||||
except (AssertionError, IndexError):
|
||||
err = 'Usage: {} {{{}}}\n'
|
||||
sys.stderr.write(err.format(sys.argv[0], '|'.join(COLORS.keys())))
|
||||
err = 'Usage: {} {{{}}}\n'.format(sys.argv[0], '|'.join(colors.keys()))
|
||||
sys.stderr.write(err)
|
||||
sys.exit(1)
|
||||
|
||||
return colors[colorscheme]
|
||||
|
||||
def main():
|
||||
colorscheme = get_arg()
|
||||
colorscheme = get_colors()
|
||||
if 'tmux' in os.environ['TERM']:
|
||||
terminal = 'tmux'
|
||||
elif 'screen' in os.environ['TERM']:
|
||||
|
@ -146,11 +107,12 @@ def main():
|
|||
else:
|
||||
terminal = 'default'
|
||||
|
||||
colors = list()
|
||||
for color in COLORS[colorscheme]:
|
||||
rgb = re.findall('[0-9a-fA-F]{2}', COLORS[colorscheme][color])
|
||||
colors.append(ESCAPES['colorspec'].format(color, *rgb))
|
||||
colorstring = ESCAPES[terminal].format(';'.join(colors))
|
||||
def colorlist():
|
||||
for color in colorscheme:
|
||||
rgb = re.findall('[0-9a-fA-F]{2}', colorscheme[color])
|
||||
yield ESCAPES['colorspec'].format(color, *rgb)
|
||||
|
||||
colorstring = ESCAPES[terminal].format(';'.join(colorlist()))
|
||||
sys.stdout.write(colorstring)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
69
termcolors.yaml
Normal file
69
termcolors.yaml
Normal file
|
@ -0,0 +1,69 @@
|
|||
gotham256:
|
||||
17: '#091f2e'
|
||||
18: '#0a3749'
|
||||
24: '#245361'
|
||||
44: '#33859E'
|
||||
60: '#4e5166'
|
||||
67: '#888ca6'
|
||||
78: '#2aa889'
|
||||
81: '#599cab'
|
||||
122: '#99d1ce'
|
||||
124: '#c23127'
|
||||
194: '#d3ebe9'
|
||||
214: '#edb443'
|
||||
232: '#0c1014'
|
||||
233: '#11151c'
|
||||
gruvbox:
|
||||
24: '#076678'
|
||||
66: '#427b58'
|
||||
72: '#689d6a'
|
||||
88: '#9d0006'
|
||||
96: '#8f3f71'
|
||||
100: '#79740e'
|
||||
106: '#98971a'
|
||||
108: '#8ec07c'
|
||||
109: '#83a598'
|
||||
124: '#cc241d'
|
||||
130: '#af3a03'
|
||||
132: '#b16286'
|
||||
136: '#b57614'
|
||||
142: '#b8bb26'
|
||||
166: '#d65d0e'
|
||||
167: '#fb4934'
|
||||
172: '#d79921'
|
||||
175: '#d3869b'
|
||||
208: '#fe8019'
|
||||
214: '#fabd2f'
|
||||
223: '#ebdbb2'
|
||||
228: '#f2e5bc'
|
||||
229: '#fdf4c1'
|
||||
230: '#f9f5d7'
|
||||
234: '#1d2021'
|
||||
235: '#282828'
|
||||
236: '#32302f'
|
||||
237: '#3c3836'
|
||||
239: '#504945'
|
||||
241: '#665c54'
|
||||
243: '#7c6f64'
|
||||
244: '#928374'
|
||||
245: '#928374'
|
||||
246: '#a89984'
|
||||
248: '#bdae93'
|
||||
250: '#d5c4a1'
|
||||
solarized:
|
||||
00: '#073642'
|
||||
01: '#dc322f'
|
||||
02: '#859900'
|
||||
03: '#b58900'
|
||||
04: '#268bd2'
|
||||
05: '#d33682'
|
||||
06: '#2aa198'
|
||||
07: '#eee8d5'
|
||||
08: '#002b36'
|
||||
09: '#cb4b16'
|
||||
10: '#586e75'
|
||||
11: '#657b83'
|
||||
12: '#839496'
|
||||
13: '#6c71c4'
|
||||
14: '#93a1a1'
|
||||
15: '#fdf6e3'
|
Loading…
Reference in a new issue