[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.
This commit is contained in:
Tobias Witek 2016-10-30 17:56:04 +01:00
parent 4133ae1907
commit 4ad41a8ee0
7 changed files with 46 additions and 4 deletions

9
bumblebee/module.py Normal file
View file

@ -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

View file

@ -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")

15
bumblebee/output.py Normal file
View file

@ -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

View file

@ -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 }) + "["

6
bumblebee/themes.py Normal file
View file

@ -0,0 +1,6 @@
class Theme:
def __init__(self, name):
pass
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -0,0 +1,3 @@
{
}

View file

@ -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()