From 4ad41a8ee0ca722b5eec979c22daf952647988e4 Mon Sep 17 00:00:00 2001 From: Tobias Witek Date: Sun, 30 Oct 2016 17:56:04 +0100 Subject: [PATCH] [themes] Add themeing framework Add - again a very simplistic - method for themeing the output. Essentially, the plan is to have JSON-formatted configuration files in bumblebee/themes/ and have a separate class for querying the config whenever the output needs to know about semantic formatting/coloring. Note that the theme object is stored on a per-module basis. Right now, that doesn't have any effect (except looking particularly wasteful), but the idea is to be able to have different themes for different modules in the future. --- bumblebee/module.py | 9 +++++++++ bumblebee/modules/time.py | 6 +++++- bumblebee/output.py | 15 +++++++++++++++ bumblebee/outputs/i3.py | 4 +++- bumblebee/themes.py | 6 ++++++ bumblebee/themes/simple.json | 3 +++ i3bumblebee | 7 +++++-- 7 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 bumblebee/module.py create mode 100644 bumblebee/output.py create mode 100644 bumblebee/themes.py create mode 100644 bumblebee/themes/simple.json diff --git a/bumblebee/module.py b/bumblebee/module.py new file mode 100644 index 0000000..823c830 --- /dev/null +++ b/bumblebee/module.py @@ -0,0 +1,9 @@ + +class Module(object): + def __init__(self, theme): + self._theme = theme + + def theme(self): + return self._theme + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/bumblebee/modules/time.py b/bumblebee/modules/time.py index dc054b2..4b6a1db 100644 --- a/bumblebee/modules/time.py +++ b/bumblebee/modules/time.py @@ -1,6 +1,10 @@ import datetime +import bumblebee.module + +class Module(bumblebee.module.Module): + def __init__(self, theme): + super(Module, self).__init__(theme) -class Module: def data(self): return datetime.datetime.now().strftime("%x %X") diff --git a/bumblebee/output.py b/bumblebee/output.py new file mode 100644 index 0000000..fa2e042 --- /dev/null +++ b/bumblebee/output.py @@ -0,0 +1,15 @@ + +class Output(object): + def start(self): + pass + + def add(self, obj): + pass + + def get(self): + pass + + def stop(self): + pass + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/bumblebee/outputs/i3.py b/bumblebee/outputs/i3.py index 7ed5836..b47bb73 100644 --- a/bumblebee/outputs/i3.py +++ b/bumblebee/outputs/i3.py @@ -1,8 +1,10 @@ import json +import bumblebee.output -class i3bar: +class i3bar(bumblebee.output.Output): def __init__(self): self._data = [] + def start(self): return json.dumps({ "version": 1 }) + "[" diff --git a/bumblebee/themes.py b/bumblebee/themes.py new file mode 100644 index 0000000..3e5f001 --- /dev/null +++ b/bumblebee/themes.py @@ -0,0 +1,6 @@ + +class Theme: + def __init__(self, name): + pass + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/bumblebee/themes/simple.json b/bumblebee/themes/simple.json new file mode 100644 index 0000000..0db3279 --- /dev/null +++ b/bumblebee/themes/simple.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/i3bumblebee b/i3bumblebee index 9ff4920..5ddcbbd 100755 --- a/i3bumblebee +++ b/i3bumblebee @@ -4,6 +4,7 @@ import sys import time import argparse import importlib +import bumblebee.themes import bumblebee.outputs.i3 def print_module_list(): @@ -13,7 +14,8 @@ def print_module_list(): def main(): parser = argparse.ArgumentParser(description="display system data in the i3bar") parser.add_argument("-m", "--modules", nargs="+", help="List of modules to load. The order of the list determines their order in the i3bar (from left to right)") - parser.add_argument("-l", "--list", action="store_true", help="List all available modules") + parser.add_argument("-l", "--list", action="store_true", help="List all available modules and themes") + parser.add_argument("-t", "--theme", help="Specify which theme to use for drawing the modulemoduless") args = parser.parse_args() @@ -22,11 +24,12 @@ def main(): sys.exit(0) modules = [] + theme = bumblebee.themes.Theme(args.theme) for m in args.modules: # TODO: how to cleanly handle errors here? # (useful error messages) module = importlib.import_module("bumblebee.modules.%s" % m) - modules.append(getattr(module, "Module")()) + modules.append(getattr(module, "Module")(theme)) output = bumblebee.outputs.i3.i3bar()