-
-
Save atav32/7c1cfe3e06bd4c87349930995b61c011 to your computer and use it in GitHub Desktop.
Convert .itermcolors file to html hex & rgb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# | |
# Convert .itermcolors files to hex colors for html | |
import sys | |
import xml.etree.ElementTree as ET | |
def rgb_to_hex(rgb): | |
return '#%02x%02x%02x' % rgb | |
# MAIN | |
def main(): | |
if len(sys.argv) < 2: | |
print("usage: ./convert_itermcolors.py file.itermcolors") | |
exit() | |
tree = ET.parse(sys.argv[1]) | |
root = tree.getroot() | |
keys = root.findall("./dict/key") | |
dicts = root.findall("./dict/dict") | |
for i in range(len(keys)): | |
r = int(float(dicts[i][1].text) * 255.0) | |
g = int(float(dicts[i][3].text) * 255.0) | |
b = int(float(dicts[i][5].text) * 255.0) | |
print(rgb_to_hex((r, g, b)) + " rgb({}, {}, {})".format(r, g, b) + " //" + keys[i].text) | |
if __name__ == '__main__': | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$> ./convert_itermcolors.py seoul256.itermcolors | |
#4e4e4e rgb(78, 78, 78) //Ansi 0 Color | |
#d68787 rgb(214, 135, 135) //Ansi 1 Color | |
#5f865f rgb(95, 134, 95) //Ansi 2 Color | |
#d8af5f rgb(216, 175, 95) //Ansi 3 Color | |
#85add4 rgb(133, 173, 212) //Ansi 4 Color | |
#d7afaf rgb(215, 175, 175) //Ansi 5 Color | |
#87afaf rgb(135, 175, 175) //Ansi 6 Color | |
#d0d0d0 rgb(208, 208, 208) //Ansi 7 Color | |
#626262 rgb(98, 98, 98) //Ansi 8 Color | |
#d75f87 rgb(215, 95, 135) //Ansi 9 Color | |
#87af87 rgb(135, 175, 135) //Ansi 10 Color | |
#ffd787 rgb(255, 215, 135) //Ansi 11 Color | |
#add4fb rgb(173, 212, 251) //Ansi 12 Color | |
#ffafaf rgb(255, 175, 175) //Ansi 13 Color | |
#87d7d7 rgb(135, 215, 215) //Ansi 14 Color | |
#e4e4e4 rgb(228, 228, 228) //Ansi 15 Color | |
#d0d0d0 rgb(208, 208, 208) //Foreground Color | |
#3a3a3a rgb(58, 58, 58) //Background Color | |
#e4e4e4 rgb(228, 228, 228) //Bold Color | |
#d0d0d0 rgb(208, 208, 208) //Cursor Color | |
#3a3a3a rgb(58, 58, 58) //Cursor Text Color | |
#d0d0d0 rgb(208, 208, 208) //Selected Text Color | |
#005f5f rgb(0, 95, 95) //Selection Color |
Thanks! However, it seems the order of components in dicts
is non-deterministic so I made the following changes to remove hardcoded indexing and get things more flexible.
for i in range(len(keys)):
components = ["Red Component", "Green Component", "Blue Component"]
colours = {}
for x in range(len(dicts[i])):
component = dicts[i][x].text
if component in components:
value = dicts[i][x + 1].text
colours[component] = value
r = int(float(colours["Red Component"]) * 255.0)
g = int(float(colours["Green Component"]) * 255.0)
b = int(float(colours["Blue Component"]) * 255.0)
The conversion logic is correct.
However, with the number shown in iterm, it is not consistent, for example, Ansi 0
is actually 0x606060
in iTerm preference. Not sure how does iTerm converts 0-1 float to RGB.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Seoul256 iTerm theme: beautiful