998db40a2d
Allow theme entries to be lists that are then iterated. For this purpose, extend the Config class so that it can serve as generic store for data items. That makes it easy to centralize code used for rotation etc. in a single place.
88 lines
2.7 KiB
Python
88 lines
2.7 KiB
Python
import os
|
|
import argparse
|
|
import textwrap
|
|
|
|
import bumblebee.theme
|
|
import bumblebee.module
|
|
|
|
class Config(object):
|
|
def __init__(self, args):
|
|
self._raw = args
|
|
self._parser = self._parser()
|
|
self._indent = " "*4
|
|
self._store = {}
|
|
|
|
if len(args) == 0:
|
|
self._parser.print_help()
|
|
self._parser.exit()
|
|
|
|
self._args = self._parser.parse_args(args)
|
|
|
|
if self._args.list == "modules":
|
|
self.print_modules()
|
|
if self._args.list == "themes":
|
|
self.print_themes()
|
|
if self._args.list:
|
|
self._parser.exit()
|
|
|
|
def getstore(self, name, default=None):
|
|
if not name in self._store:
|
|
self._store[name] = default
|
|
return self._store.get(name, default)
|
|
|
|
def store(self, name, value):
|
|
self._store[name] = value
|
|
|
|
def increase(self, name, limit, default):
|
|
self._store[name] += 1
|
|
if self._store[name] >= limit:
|
|
self._store[name] = default
|
|
return self._store[name]
|
|
|
|
def parameter(self, name, default):
|
|
# TODO
|
|
return default
|
|
|
|
def theme(self):
|
|
return self._args.theme
|
|
|
|
def modules(self):
|
|
return self._args.modules
|
|
|
|
def print_themes(self):
|
|
print(textwrap.fill(", ".join(bumblebee.theme.themes()),
|
|
80, initial_indent = self._indent, subsequent_indent = self._indent
|
|
))
|
|
|
|
def print_modules(self):
|
|
for m in bumblebee.module.modules():
|
|
|
|
print("{}{}: ".format(self._indent, m.name()))
|
|
print textwrap.fill("About : {}".format(m.description()),
|
|
80, initial_indent=self._indent*2, subsequent_indent=self._indent*4)
|
|
print textwrap.fill("Usage : {}".format(m.usage()),
|
|
80, initial_indent=self._indent*2, subsequent_indent=self._indent*4)
|
|
print textwrap.fill("Notes : {}".format(m.notes()),
|
|
80, initial_indent=self._indent*2, subsequent_indent=self._indent*4)
|
|
print ""
|
|
|
|
def _parser(self):
|
|
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)",
|
|
default=[],
|
|
)
|
|
parser.add_argument("-l", "--list",
|
|
help="List: 'modules', 'themes' ",
|
|
choices = [ "modules", "themes" ],
|
|
)
|
|
parser.add_argument("-t", "--theme", help="Specify which theme to use for "
|
|
"drawing the modules",
|
|
default="default",
|
|
)
|
|
|
|
return parser
|
|
|
|
|
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|