2016-05-12 16:14:27 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#!/usr/bin/env python3
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								#pylint: disable=C0111
							 | 
						
					
						
							
								
									
										
										
										
											2016-05-12 16:14:27 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								import os
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								import re
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								import sys
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								import yaml
							 | 
						
					
						
							
								
									
										
										
										
											2016-05-12 16:14:27 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								CONFNAME = '.termcolors.yaml'
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								ESCAPES = {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    'colorspec': '{};rgb:{}/{}/{}',
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 15:00:22 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    # 'fgspec':  '10;rgb:{}/{}/{}',
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    # 'bdspec':  '706;rgb:{}/{}/{}',
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    # 'bgspec':  '11;rgb:{}/{}/{}',
							 | 
						
					
						
							
								
									
										
										
										
											2017-06-28 20:00:07 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    'default':   '\033]4;{}\033\\',
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    'screen':    '\033P\033]4;{}\007\033\\',
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    'tmux':      '\033Ptmux;\033\033]4;{}\007\033\\'
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								}
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								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'
							 | 
						
					
						
							
								
									
										
										
										
											2016-05-12 16:14:27 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								}
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								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)
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    try:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        colorscheme = sys.argv[1]
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        assert colorscheme in colors
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    except (AssertionError, IndexError):
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        err = 'Usage: {} {{{}}}\n'.format(sys.argv[0], '|'.join(colors.keys()))
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        sys.stderr.write(err)
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        sys.exit(1)
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    return colors[colorscheme]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								def main():
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    colorscheme = get_colors()
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    if 'tmux' in os.environ['TERM']:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        terminal = 'tmux'
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    elif 'screen' in os.environ['TERM']:
							 | 
						
					
						
							
								
									
										
										
										
											2016-05-12 16:14:27 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        terminal = 'screen'
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    else:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        terminal = 'default'
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 14:25:58 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    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()))
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    sys.stdout.write(colorstring)
							 | 
						
					
						
							
								
									
										
										
										
											2016-05-12 16:14:27 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 04:19:14 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								if __name__ == '__main__':
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    main()
							 |