#!/usr/bin/env python3 from os import environ from re import findall, match from sys import argv ESCAPES = { 'default': '\033]4;{};rgb:{}/{}/{}\033\\', 'screen': '\033P\033]4;{};rgb:{}/{}/{}\007\033\\', 'tmux': '\033Ptmux;\033\033]4;{};rgb:{}/{}/{}\007\033\\' } COLOURS = { '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') ) } try: environ['TMUX'] terminal = 'tmux' except KeyError: if match('screen', environ['TERM']): terminal = 'screen' else: terminal = 'default' if len(argv) == 1: colorscheme = 'default' else: colorscheme = argv[1] for colour in COLOURS[colorscheme]: rgb = findall('[0-9a-fA-F]{2}', colour[1]) print(ESCAPES[terminal].format(colour[0], *rgb), end='')