From 26ae63b5ad402a5067ff2ed4f9ab78ff1f540475 Mon Sep 17 00:00:00 2001 From: Tobias Witek Date: Sun, 16 Feb 2020 14:02:21 +0100 Subject: [PATCH] [core/theme] Add preliminary cycling support Add support for cycling values in a theme, for now as long as the cycle size is 0 :P --- core/output.py | 1 + core/theme.py | 11 +++++++++-- tests/core/test_theme.py | 19 +++++++++++++++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/core/output.py b/core/output.py index ca21119..23b50e8 100644 --- a/core/output.py +++ b/core/output.py @@ -43,6 +43,7 @@ class i3(object): 'name': module.id(), 'color': self._theme.fg(widget), 'background': self._theme.bg(widget), + 'separator': self._theme.default_separators(), }) return widgets diff --git a/core/theme.py b/core/theme.py index 4721c67..7ef636b 100644 --- a/core/theme.py +++ b/core/theme.py @@ -31,11 +31,18 @@ class Theme(object): def bg(self, widget=None): return self.__get(widget, 'bg') + def default_separators(self, widget=None): + return self.__get(widget, 'default-separators', True) + def __get(self, widget, key, default=None): value = default - if 'defaults' in self._data: - value = self._data['defaults'].get(key, value) + for option in ['defaults', 'cycle']: + if option in self._data: + tmp = self._data[option] + if isinstance(tmp, list): + tmp = tmp[0] + value = tmp.get(key, value) return value # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/tests/core/test_theme.py b/tests/core/test_theme.py index c9dc2a2..c132d43 100644 --- a/tests/core/test_theme.py +++ b/tests/core/test_theme.py @@ -6,11 +6,17 @@ class theme(unittest.TestCase): def setUp(self): self.invalidThemeName = 'this-theme-does-not-exist' self.validThemeName = 'default' - self.defaults = { + self.defaultsTheme = { 'defaults': { 'fg': 'red', 'bg': 'black' } } + self.cycleTheme = { + 'cycle': [ + { 'fg': 'red', 'bg': 'black' }, + { 'fg': 'black', 'bg': 'red' } + ] + } def test_invalid_theme(self): with self.assertRaises(RuntimeError): @@ -21,8 +27,13 @@ class theme(unittest.TestCase): self.assertEqual(self.validThemeName, theme.name) def test_defaults(self): - theme = core.theme.Theme(raw_data=self.defaults) - self.assertEqual(self.defaults['defaults']['fg'], theme.fg()) - self.assertEqual(self.defaults['defaults']['bg'], theme.bg()) + theme = core.theme.Theme(raw_data=self.defaultsTheme) + self.assertEqual(self.defaultsTheme['defaults']['fg'], theme.fg()) + self.assertEqual(self.defaultsTheme['defaults']['bg'], theme.bg()) + + def test_cycle(self): + theme = core.theme.Theme(raw_data=self.cycleTheme) + self.assertEqual(self.cycleTheme['cycle'][0]['fg'], theme.fg()) + self.assertEqual(self.cycleTheme['cycle'][0]['bg'], theme.bg()) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4