129 lines
3.7 KiB
Python
Executable file
129 lines
3.7 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
from collections import OrderedDict
|
|
|
|
import sys
|
|
from glob import glob
|
|
|
|
from os.path import join, splitext, basename
|
|
|
|
PREFIXES = ('XTerm', 'Rxvt', 'Urxvt')
|
|
|
|
|
|
XRDB2XRES = [
|
|
("# Head", "\n" "! Generated with :"
|
|
"\n" "! XRDB2Xreources.py"
|
|
"\n" "! "),
|
|
("foreground_color", "*.foreground: "),
|
|
("background_color", "*.background: "),
|
|
("cursor_color", "*.cursorColor: "),
|
|
|
|
("# Black", "\n" "! Black"),
|
|
("ansi_0_color", "*.color0: "),
|
|
("ansi_8_color", "*.color8: "),
|
|
|
|
("# Red", "\n" "! Red"),
|
|
("ansi_1_color", "*.color1: "),
|
|
("ansi_9_color", "*.color9: "),
|
|
|
|
("# Green", "\n" "! Green"),
|
|
("ansi_2_color", "*.color2: "),
|
|
("ansi_10_color", "*.color10: "),
|
|
|
|
("# Yellow", "\n" "! Yellow"),
|
|
("ansi_3_color", "*.color3: "),
|
|
("ansi_11_color", "*.color11: "),
|
|
|
|
("# Blue", "\n" "! Blue"),
|
|
("ansi_4_color", "*.color4: "),
|
|
("ansi_12_color", "*.color12: "),
|
|
|
|
("# Magenta", "\n" "! Magenta"),
|
|
("ansi_5_color", "*.color5: "),
|
|
("ansi_13_color", "*.color13: "),
|
|
|
|
("# Cyan", "\n" "! Cyan"),
|
|
("ansi_6_color", "*.color6: "),
|
|
("ansi_14_color", "*.color14: "),
|
|
|
|
("# White", "\n" "! White"),
|
|
("ansi_7_color", "*.color7: "),
|
|
("ansi_15_color", "*.color15: "),
|
|
|
|
("# Bold", "\n" "! Bold, Italic, Underline"),
|
|
("bold_color", "*.colorBD: "),
|
|
("italic_color", "*.colorIT: "),
|
|
("underline_color", "*.colorUL: "),
|
|
]
|
|
|
|
|
|
class XrdbEntry(object):
|
|
def __init__(self, define: str, key: str, value: str, *args: str):
|
|
super().__init__()
|
|
self.define = define
|
|
self.key = key.lower()
|
|
self.value = value
|
|
|
|
def commented(self):
|
|
return self.define.strip().startswith("!")
|
|
|
|
|
|
def convert(xrdb_colors, x_resources_out=sys.stdout):
|
|
x_resources = OrderedDict(XRDB2XRES)
|
|
|
|
for xrdb_key in x_resources.keys():
|
|
if xrdb_key in xrdb_colors:
|
|
x_resources[xrdb_key] = x_resources[xrdb_key] + xrdb_colors[xrdb_key]
|
|
else:
|
|
x_resources[xrdb_key] = "!" + x_resources[xrdb_key]
|
|
|
|
try:
|
|
f = x_resources_out
|
|
if not hasattr(f, 'close'):
|
|
f = open(x_resources_out, 'w')
|
|
|
|
for value in x_resources.values():
|
|
print(value.strip(), file=f)
|
|
finally:
|
|
if f != sys.stdout:
|
|
f.close()
|
|
|
|
|
|
def read_xrdb(itermcolors_input=sys.stdin):
|
|
xrdb_colors = dict()
|
|
|
|
try:
|
|
f = itermcolors_input
|
|
if not hasattr(f, 'close'):
|
|
f = open(itermcolors_input, 'r')
|
|
|
|
for line in f:
|
|
xrdb_entry = XrdbEntry(*line.split())
|
|
if not xrdb_entry.commented():
|
|
xrdb_colors.setdefault(xrdb_entry.key, xrdb_entry.value)
|
|
finally:
|
|
f.close()
|
|
|
|
return xrdb_colors
|
|
|
|
|
|
def main(xrdb_path, output_path=None):
|
|
for f in glob(join(xrdb_path, '*.xrdb')):
|
|
xrdb_in = read_xrdb(f)
|
|
base_name = splitext(basename(f))[0]
|
|
x_resources_out = output_path and join(output_path, base_name) or sys.stdout
|
|
convert(xrdb_in, x_resources_out)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description='Translate X color schemes to .Xresources format')
|
|
parser.add_argument('xrdb_path', type=str, help='path to xrdb files')
|
|
parser.add_argument('-d', '--out-directory', type=str, dest='output_path',
|
|
help='path where Xresources config files will be' +
|
|
' created, if not provided then will be printed')
|
|
|
|
args = parser.parse_args()
|
|
main(args.xrdb_path, args.output_path)
|