[output] Create preliminary framework for output handling
Prepare a framework for having modular outputs. Essentially, the main
application uses a output-type object to format strings for the
preamble, the actual data items, and a "postamble" (finalizer). The
printing of that representation, again, is up to the main application,
not the output framework.
Probably, at some point in the future, an interface class will be in
order, but right now, I want to keep it lean - seeing as for the
forseeable future, i3bar is going to be the one and only consumer of
this.
2016-10-30 15:58:35 +01:00
#!/usr/bin/env python
2016-10-30 17:30:09 +01:00
import sys
import time
import argparse
import importlib
2016-10-31 07:18:57 +01:00
import bumblebee.theme
[output] Create preliminary framework for output handling
Prepare a framework for having modular outputs. Essentially, the main
application uses a output-type object to format strings for the
preamble, the actual data items, and a "postamble" (finalizer). The
printing of that representation, again, is up to the main application,
not the output framework.
Probably, at some point in the future, an interface class will be in
order, but right now, I want to keep it lean - seeing as for the
forseeable future, i3bar is going to be the one and only consumer of
this.
2016-10-30 15:58:35 +01:00
import bumblebee.outputs.i3
2016-10-30 17:30:09 +01:00
def print_module_list():
# TODO
pass
[output] Create preliminary framework for output handling
Prepare a framework for having modular outputs. Essentially, the main
application uses a output-type object to format strings for the
preamble, the actual data items, and a "postamble" (finalizer). The
printing of that representation, again, is up to the main application,
not the output framework.
Probably, at some point in the future, an interface class will be in
order, but right now, I want to keep it lean - seeing as for the
forseeable future, i3bar is going to be the one and only consumer of
this.
2016-10-30 15:58:35 +01:00
def main():
2016-10-30 17:30:09 +01:00
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)")
2016-10-30 17:56:04 +01:00
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")
2016-10-30 17:30:09 +01:00
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)
2016-10-30 18:10:25 +01:00
module_name = m if not ":" in m else m.split(":")[0]
module_args = None if not ":" in m else m.split(":")[1:]
2016-10-31 07:46:21 +01:00
module = importlib.import_module("bumblebee.modules.{}".format(module_name))
2016-10-31 10:45:15 +01:00
modules.append(getattr(module, "Module")(module_args))
2016-10-30 17:30:09 +01:00
2016-10-31 10:45:15 +01:00
theme = bumblebee.theme.Theme(args.theme) if args.theme else bumblebee.theme.Theme()
output = bumblebee.outputs.i3.i3bar(theme)
[output] Create preliminary framework for output handling
Prepare a framework for having modular outputs. Essentially, the main
application uses a output-type object to format strings for the
preamble, the actual data items, and a "postamble" (finalizer). The
printing of that representation, again, is up to the main application,
not the output framework.
Probably, at some point in the future, an interface class will be in
order, but right now, I want to keep it lean - seeing as for the
forseeable future, i3bar is going to be the one and only consumer of
this.
2016-10-30 15:58:35 +01:00
2016-10-30 17:30:09 +01:00
print output.start()
sys.stdout.flush()
[output] Create preliminary framework for output handling
Prepare a framework for having modular outputs. Essentially, the main
application uses a output-type object to format strings for the
preamble, the actual data items, and a "postamble" (finalizer). The
printing of that representation, again, is up to the main application,
not the output framework.
Probably, at some point in the future, an interface class will be in
order, but right now, I want to keep it lean - seeing as for the
forseeable future, i3bar is going to be the one and only consumer of
this.
2016-10-30 15:58:35 +01:00
while True:
2016-10-31 10:45:15 +01:00
theme.reset()
2016-10-30 17:30:09 +01:00
for m in modules:
output.add(m)
2016-10-31 10:45:15 +01:00
theme.next()
2016-10-30 17:30:09 +01:00
print output.get()
sys.stdout.flush()
time.sleep(1)
[output] Create preliminary framework for output handling
Prepare a framework for having modular outputs. Essentially, the main
application uses a output-type object to format strings for the
preamble, the actual data items, and a "postamble" (finalizer). The
printing of that representation, again, is up to the main application,
not the output framework.
Probably, at some point in the future, an interface class will be in
order, but right now, I want to keep it lean - seeing as for the
forseeable future, i3bar is going to be the one and only consumer of
this.
2016-10-30 15:58:35 +01:00
2016-10-30 17:30:09 +01:00
print output.stop()
[output] Create preliminary framework for output handling
Prepare a framework for having modular outputs. Essentially, the main
application uses a output-type object to format strings for the
preamble, the actual data items, and a "postamble" (finalizer). The
printing of that representation, again, is up to the main application,
not the output framework.
Probably, at some point in the future, an interface class will be in
order, but right now, I want to keep it lean - seeing as for the
forseeable future, i3bar is going to be the one and only consumer of
this.
2016-10-30 15:58:35 +01:00
if __name__ == "__main__":
main()
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4