From 98acd15edfbeba6e6b40e0b9b93055c9d7b42d68 Mon Sep 17 00:00:00 2001 From: Tobias Witek Date: Sat, 5 Nov 2016 11:40:27 +0100 Subject: [PATCH] [theme] Re-implement colorscheme cycling Again, allow the "default" section to contain cycles that are used one after the other for each widget. --- bumblebee/outputs/i3.py | 6 +- bumblebee/theme.py | 138 +++++----------------- bumblebee/themes/solarized-powerline.json | 12 +- 3 files changed, 37 insertions(+), 119 deletions(-) diff --git a/bumblebee/outputs/i3.py b/bumblebee/outputs/i3.py index 452fd78..fe7797e 100644 --- a/bumblebee/outputs/i3.py +++ b/bumblebee/outputs/i3.py @@ -46,9 +46,9 @@ class Output(bumblebee.output.Output): for widget in widgets: if theme.separator(widget): self._data.append({ - u"full_text": theme.separator(obj), - "color": theme.separator_color(obj), - "background": theme.separator_background(), + u"full_text": theme.separator(widget), + "color": theme.separator_color(widget), + "background": theme.separator_background(widget), "separator": False, "separator_block_width": 0, }) diff --git a/bumblebee/theme.py b/bumblebee/theme.py index 8c492ed..0568260 100644 --- a/bumblebee/theme.py +++ b/bumblebee/theme.py @@ -10,24 +10,30 @@ def themes(): return [ os.path.basename(f).replace(".json", "") for f in glob.iglob("{}/*.json".format(d)) ] class Theme: - # TODO: cycle handling def __init__(self, config): with open("{}/{}.json".format(getpath(), config.theme())) as f: self._data = json.load(f) self._defaults = self._data.get("defaults", {}) - self._cycle = {} + self._cycles = self._defaults.get("cycle", []) + self.begin() def begin(self): - pass + self._cycleidx = 0 + self._cycle = self._cycles[0] if len(self._cycles) > 0 else {} + self._background = [ None, None ] def next_widget(self): - pass + self._background[1] = self._background[0] + self._cycleidx += 1 + if self._cycleidx >= len(self._cycles): + self._cycleidx = 0 + self._cycle = self._cycles[self._cycleidx] if len(self._cycles) > self._cycleidx else {} def prefix(self, widget): - pass + return self._get(widget, "prefix") def suffix(self, widget): - pass + return self._get(widget, "suffix") def color(self, widget): result = self._get(widget, "fg") @@ -38,22 +44,28 @@ class Theme: return result def background(self, widget): - pass + result = self._get(widget, "bg") + if widget.warning(): + result = self._get(widget, "bg-warning") + if widget.critical(): + result = self._get(widget, "bg-critical") + self._background[0] = result + return result def separator(self, widget): - pass - - def separator_color(self, widget): - pass - - def separator_background(self, widget): - pass + return self._get(widget, "separator") def default_separators(self, widget): - pass + return self._get(widget, "default-separators") + + def separator_color(self, widget): + return self.background(widget) + + def separator_background(self, widget): + return self._background[1] def separator_block_width(self, widget): - pass + return 9 def _get(self, widget, name): module = widget.module() @@ -74,98 +86,4 @@ class Theme: return value - -#class Theme: -# _cycle_index = 0 -# _cycle = None -# def __init__(self, config): -# self._data = None -# path = os.path.dirname(os.path.realpath(__file__)) -# with open("{}/{}.json".format(getpath(), config.theme())) as f: -# self._data = json.load(f) -# self._defaults = self._data.get("defaults", {}) -# self._cycle = self._defaults.get("cycle", []) -# self._modules = {} -# -# self.reset() -# -# def _gettheme(self, obj, key): -# module = obj.__module__.split(".")[-1] -# module_theme = self._data.get(module, {}) -# -# value = getattr(obj, key)() if hasattr(obj, key) else None -# value = self._defaults.get(key, value) -# if len(self._cycle) > 0: -# value = self._defaults["cycle"][self._cycle_index].get(key, value) -# value = module_theme.get(key, value) -# -# if hasattr(obj, "state"): -# state = getattr(obj, "state")() -# state_theme = module_theme.get("states", {}).get(state, {}) -# -# value = state_theme.get(key, value) -# -# if type(value) is list: -# # cycle through the values -# if not obj in self._modules: -# self._modules[obj] = { "idx": 0 } -# else: -# self._modules[obj]["idx"] += 1 -# if self._modules[obj]["idx"] >= len(value): -# self._modules[obj]["idx"] = 0 -# value = value[self._modules[obj]["idx"]] -# -# return value -# -# def reset(self): -# self._cycle_index = 0 -# self._previous_background = None -# self._background = None -# -# def urgent(self, obj): -# self._gettheme(obj, "urgent") -# -# def next(self): -# self._cycle_index += 1 -# self._previous_background = self._background -# if self._cycle_index >= len(self._cycle): -# self._cycle_index = 0 -# -# def color(self, obj): -# fg = None -# if obj.warning(): -# fg = self._gettheme(obj, "fg-warning") -# if obj.critical(): -# fg = self._gettheme(obj, "fg-critical") -# if fg == None: -# fg = self._gettheme(obj, "fg") -# return fg -# -# def background(self, obj): -# self._background = None -# if obj.warning(): -# self._background = self._gettheme(obj, "bg-warning") -# if obj.critical(): -# self._background = self._gettheme(obj, "bg-critical") -# -# if self._background == None: -# self._background = self._gettheme(obj, "bg") -# -# return self._background -# -# def previous_background(self): -# return self._previous_background -# -# def separator(self, obj): -# return self._gettheme(obj, "separator") -# -# def default_separators(self, obj): -# return self._gettheme(obj, "default_separators") -# -# def prefix(self, obj): -# return self._gettheme(obj, "prefix") -# -# def suffix(self, obj): -# return self._gettheme(obj, "suffix") - # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/bumblebee/themes/solarized-powerline.json b/bumblebee/themes/solarized-powerline.json index d92d0e0..32d4319 100644 --- a/bumblebee/themes/solarized-powerline.json +++ b/bumblebee/themes/solarized-powerline.json @@ -17,7 +17,7 @@ "fg-warning": "#002b36", "bg-warning": "#b58900", - "default_separators": false, + "default-separators": false, "separator": "" }, "date": { @@ -98,23 +98,23 @@ "prefix": [ "  ", "  ", "  ", "  ", "  " ], "suffix": "  " }, - "discharging_critical": { + "discharging-critical": { "prefix": "  ", "suffix": "  " }, - "discharging_low": { + "discharging-low": { "prefix": "  ", "suffix": "  " }, - "discharging_medium": { + "discharging-medium": { "prefix": "  ", "suffix": "  " }, - "discharging_high": { + "discharging-high": { "prefix": "  ", "suffix": "  " }, - "discharging_full": { + "discharging-full": { "prefix": "  ", "suffix": "  " }