diff --git a/bumblebee/modules/__init__.py b/bumblebee/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bumblebee/modules/time.py b/bumblebee/modules/time.py new file mode 100644 index 0000000..dc054b2 --- /dev/null +++ b/bumblebee/modules/time.py @@ -0,0 +1,7 @@ +import datetime + +class Module: + def data(self): + return datetime.datetime.now().strftime("%x %X") + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/bumblebee/outputs/i3.py b/bumblebee/outputs/i3.py index 39c8e20..7ed5836 100644 --- a/bumblebee/outputs/i3.py +++ b/bumblebee/outputs/i3.py @@ -1,13 +1,22 @@ import json class i3bar: - def preamble(self): + def __init__(self): + self._data = [] + def start(self): return json.dumps({ "version": 1 }) + "[" - def data(self, data): - return json.dumps(data) + "," + def add(self, obj): + self._data.append({ + "full_text": obj.data() + }) - def finalize(self): + def get(self): + data = json.dumps(self._data) + self._data = [] + return data + "," + + def stop(self): return "]" # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/i3bumblebee b/i3bumblebee index f798013..9ff4920 100755 --- a/i3bumblebee +++ b/i3bumblebee @@ -1,18 +1,46 @@ #!/usr/bin/env python +import sys +import time +import argparse +import importlib import bumblebee.outputs.i3 +def print_module_list(): + # TODO + pass + 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") + + args = parser.parse_args() + + if args.list: + print_module_list() + sys.exit(0) + + modules = [] + 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")()) + output = bumblebee.outputs.i3.i3bar() - print output.preamble() + print output.start() + sys.stdout.flush() while True: - # TODO: retrieve data from modules - data = [] - print output.data(data) + for m in modules: + output.add(m) + print output.get() + sys.stdout.flush() + time.sleep(1) - print output.finalize() + print output.stop() if __name__ == "__main__": main()