Browse Source

termcolors: refactor, separate config, yaml dependency

master
Von Random 2 months ago
parent
commit
c11c250a5e
2 changed files with 155 additions and 124 deletions
  1. 86
    124
      termcolors
  2. 69
    0
      termcolors.yaml

+ 86
- 124
termcolors View File

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

+ 69
- 0
termcolors.yaml View File

@@ -0,0 +1,69 @@
1
+gotham256:
2
+  17:  '#091f2e'
3
+  18:  '#0a3749'
4
+  24:  '#245361'
5
+  44:  '#33859E'
6
+  60:  '#4e5166'
7
+  67:  '#888ca6'
8
+  78:  '#2aa889'
9
+  81:  '#599cab'
10
+  122: '#99d1ce'
11
+  124: '#c23127'
12
+  194: '#d3ebe9'
13
+  214: '#edb443'
14
+  232: '#0c1014'
15
+  233: '#11151c'
16
+gruvbox:
17
+  24:  '#076678'
18
+  66:  '#427b58'
19
+  72:  '#689d6a'
20
+  88:  '#9d0006'
21
+  96:  '#8f3f71'
22
+  100: '#79740e'
23
+  106: '#98971a'
24
+  108: '#8ec07c'
25
+  109: '#83a598'
26
+  124: '#cc241d'
27
+  130: '#af3a03'
28
+  132: '#b16286'
29
+  136: '#b57614'
30
+  142: '#b8bb26'
31
+  166: '#d65d0e'
32
+  167: '#fb4934'
33
+  172: '#d79921'
34
+  175: '#d3869b'
35
+  208: '#fe8019'
36
+  214: '#fabd2f'
37
+  223: '#ebdbb2'
38
+  228: '#f2e5bc'
39
+  229: '#fdf4c1'
40
+  230: '#f9f5d7'
41
+  234: '#1d2021'
42
+  235: '#282828'
43
+  236: '#32302f'
44
+  237: '#3c3836'
45
+  239: '#504945'
46
+  241: '#665c54'
47
+  243: '#7c6f64'
48
+  244: '#928374'
49
+  245: '#928374'
50
+  246: '#a89984'
51
+  248: '#bdae93'
52
+  250: '#d5c4a1'
53
+solarized:
54
+  00: '#073642'
55
+  01: '#dc322f'
56
+  02: '#859900'
57
+  03: '#b58900'
58
+  04: '#268bd2'
59
+  05: '#d33682'
60
+  06: '#2aa198'
61
+  07: '#eee8d5'
62
+  08: '#002b36'
63
+  09: '#cb4b16'
64
+  10: '#586e75'
65
+  11: '#657b83'
66
+  12: '#839496'
67
+  13: '#6c71c4'
68
+  14: '#93a1a1'
69
+  15: '#fdf6e3'

Loading…
Cancel
Save