#!/usr/bin/env python3 #pylint: disable=C0111 import os import re import sys ESCAPES = { 'colorspec': '{};rgb:{}/{}/{}', 'default': '\033]4;{}\033\\', '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' } } def get_arg(): try: colorscheme = sys.argv[1] assert colorscheme in COLORS return colorscheme except (AssertionError, IndexError): err = 'Usage: {} {{{}}}\n' sys.stderr.write(err.format(sys.argv[0], '|'.join(COLORS.keys()))) sys.exit(1) def main(): colorscheme = get_arg() if 'tmux' in os.environ['TERM']: terminal = 'tmux' elif 'screen' in os.environ['TERM']: terminal = 'screen' 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)) sys.stdout.write(colorstring) if __name__ == '__main__': main()