aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2019-10-06 23:05:44 -0400
committerLoic Guegan <manzerbredes@mailbox.org>2019-10-06 23:05:44 -0400
commit71688839f0c3fb8107bbea27eb6cb1b4d8277e4a (patch)
treec4fabc1bfdda72b65d4a62e36cbf891d9fed44ef /src
parent602c70c5174b2c73600aa06fce915eaf8a1d8a26 (diff)
Add theme manager
Diffstat (limited to 'src')
-rwxr-xr-xsrc/i3-theme.py12
-rwxr-xr-xsrc/parser.py16
-rw-r--r--src/theme.py30
3 files changed, 48 insertions, 10 deletions
diff --git a/src/i3-theme.py b/src/i3-theme.py
index 2982726..2fae302 100755
--- a/src/i3-theme.py
+++ b/src/i3-theme.py
@@ -1,11 +1,15 @@
#!/usr/bin/python
-import parser
+import parser, theme, os, argparse
+args_parser = argparse.ArgumentParser(description='Process some integers.')
+args_parser.add_argument('theme_path', metavar='theme', type=str, nargs='?',
+ help='YAML i3 theme path')
+args = args_parser.parse_args()
-print("Starting app...")
-
-parser.apply_theme("/home/loic/.config/i3/config",parser.theme)
+##### Apply Theme #####
+loaded_theme=theme.load(args.theme_path)
+parser.apply_theme(os.environ["HOME"]+"/.config/i3/config",loaded_theme)
diff --git a/src/parser.py b/src/parser.py
index 2ec8da3..9a4f4b0 100755
--- a/src/parser.py
+++ b/src/parser.py
@@ -32,12 +32,17 @@ def extract_config(config_file):
tmp.close()
return(tmp.name)
+def safe_get(theme,key):
+ if key in theme:
+ return(theme[key])
+ return("")
+
def apply_to_config(tmp_config,theme):
f=open(tmp_config,mode="r")
tmp=tempfile.NamedTemporaryFile(mode="w",delete=False)
##### Apply bar theme #####
- bar_theme=theme["bar"]
+ bar_theme=theme["bar_colors"]
for line in f:
if contains(".*colors\s{",line):
tmp.write(line)
@@ -53,18 +58,17 @@ def apply_to_config(tmp_config,theme):
shutil.move(tmp.name,tmp_config)
##### Apply client theme #####
- client_theme=theme["client"]
+ client_theme=theme["window_colors"]
f=open(tmp_config,mode="a")
for key,value in client_theme.items():
- f.write(key+" "+value["background"]+" "+value["text"]+" "+value["indicator"]+" "+value["child_border"]+"\n")
+ f.write("client."+key+" "+value["border"]+" "+value["background"]+" "+value["text"]+" "+value["indicator"]+" "+safe_get(value,"child_border")+"\n")
f.close()
def apply_theme(config_file,theme):
+ print("Applying theme: "+theme["meta"]["description"])
tmp=extract_config(config_file)
apply_to_config(tmp,theme)
- shutil.move(tmp,"/home/loic/aa.theme")
-
-
+ shutil.move(tmp,config_file)
theme={
"bar":{
diff --git a/src/theme.py b/src/theme.py
new file mode 100644
index 0000000..187b8d2
--- /dev/null
+++ b/src/theme.py
@@ -0,0 +1,30 @@
+import yaml,re
+
+
+def configure(theme):
+ if "colors" in theme:
+ colors=theme["colors"]
+ window_colors=theme["window_colors"]
+ for key1,value1 in window_colors.items():
+ for key2,value2 in value1.items():
+ if re.match("#.*",value2) == None:
+ window_colors[key1][key2]=colors[value2]
+ theme["window_colors"]=window_colors
+
+ bar_colors=theme["bar_colors"]
+ for key1,value1 in bar_colors.items():
+ if isinstance(value1,dict):
+ for key2,value2 in value1.items():
+ if re.match("#.*",value2) == None:
+ bar_colors[key1][key2]=colors[value2]
+ else:
+ if re.match("#.*",value1) == None:
+ bar_colors[key1]=colors[value1]
+ theme["bar_colors"]=bar_colors
+ return(theme)
+
+def load(theme_file):
+ f=open(theme_file,mode="r")
+ theme=yaml.load(f,Loader=yaml.FullLoader)
+ f.close()
+ return(configure(theme))