From 0b79cbdb3b6ce5ea43506bf8faf78ecfbe6cae8c Mon Sep 17 00:00:00 2001 From: James Reid Date: Mon, 30 May 2022 19:25:09 +0100 Subject: [PATCH] Add "user" tab to themes kitten Add new tab named "user" to the built-in themes kitten - new tab filters and displays only user-defined color themes, identified by adding "is_user_defined" property to "Theme" class which defaults to False, and is set True when a theme is fetched using the "load_from_dir" method. --- kittens/themes/collection.py | 4 +++- kittens/themes/main.py | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/kittens/themes/collection.py b/kittens/themes/collection.py index f2810f6f8..c8b3e8c4c 100644 --- a/kittens/themes/collection.py +++ b/kittens/themes/collection.py @@ -494,6 +494,7 @@ class Theme: is_dark: bool = False blurb: str = '' num_settings: int = 0 + is_user_defined: bool = False def apply_dict(self, d: Dict[str, Any]) -> None: self.name = str(d['name']) @@ -501,7 +502,7 @@ class Theme: a = d.get(x) if isinstance(a, str): setattr(self, x, a) - for x in ('is_dark', 'num_settings'): + for x in ('is_dark', 'num_settings', 'is_user_defined'): a = d.get(x) if isinstance(a, int): setattr(self, x, a) @@ -594,6 +595,7 @@ class Themes: d = parse_theme(name, raw) except (Exception, SystemExit): continue + d['is_user_defined'] = True t = Theme(raw.__str__) t.apply_dict(d) if t.name: diff --git a/kittens/themes/main.py b/kittens/themes/main.py index 8554aa5d8..751e2c5e7 100644 --- a/kittens/themes/main.py +++ b/kittens/themes/main.py @@ -69,6 +69,10 @@ def create_recent_filter(names: Iterable[str]) -> Callable[[Theme], bool]: return recent_filter +def user_filter(q: Theme) -> bool: + return q.is_user_defined + + def mark_shortcut(text: str, acc: str) -> str: acc_idx = text.lower().index(acc.lower()) return text[:acc_idx] + styled(text[acc_idx], underline='straight', bold=True, fg_intense=True) + text[acc_idx+1:] @@ -153,12 +157,13 @@ class ThemesHandler(Handler): self.report_traceback_on_exit: Optional[str] = None self.filter_map: Dict[str, Callable[[Theme], bool]] = { 'dark': dark_filter, 'light': light_filter, 'all': all_filter, - 'recent': create_recent_filter(self.cached_values.get('recent', ())) + 'recent': create_recent_filter(self.cached_values.get('recent', ())), + 'user': user_filter } self.themes_list = ThemesList() self.colors_set_once = False self.line_edit = LineEdit() - self.tabs = tuple('all dark light recent'.split()) + self.tabs = tuple('all dark light recent user'.split()) self.quit_on_next_key_release = -1 def update_recent(self) -> None: