More work on themes kitten

This commit is contained in:
Kovid Goyal 2021-08-04 07:36:09 +05:30
parent 36670b49a0
commit 8a6b51441c
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C

View file

@ -6,15 +6,16 @@
import sys
import traceback
from enum import Enum, auto
from typing import List, Optional, Union
from typing import Any, Callable, Dict, Iterable, List, Optional, Union
from kitty.config import cached_values_for
from kitty.typing import KeyEventType
from kitty.utils import ScreenSize
from ..tui.handler import Handler
from ..tui.loop import Loop
from ..tui.operations import styled
from .collection import Themes, load_themes
from .collection import Theme, Themes, load_themes
def format_traceback(msg: str) -> str:
@ -26,11 +27,37 @@ class State(Enum):
browsing = auto()
def dark_filter(q: Theme) -> bool:
return q.is_dark
def light_filter(q: Theme) -> bool:
return not q.is_dark
def all_filter(q: Theme) -> bool:
return True
def create_recent_filter(names: Iterable[str]) -> Callable[[Theme], bool]:
allowed = frozenset(names)
def recent_filter(q: Theme) -> bool:
return q.name in allowed
return recent_filter
class ThemesHandler(Handler):
def __init__(self) -> None:
def __init__(self, cached_values: Dict[str, Any]) -> None:
self.cached_values = cached_values
self.state = State.fetching
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', ()))
}
def enforce_cursor_state(self) -> None:
self.cmd.set_cursor_visible(self.state == State.fetching)
@ -57,9 +84,8 @@ def fetching_done(themes_or_exception: Union[Themes, str]) -> None:
self.report_traceback_on_exit = themes_or_exception
self.quit_loop(1)
return
else:
self.all_themes: Themes = themes_or_exception
self.state = State.browsing
self.all_themes: Themes = themes_or_exception
self.state = State.browsing
self.draw_screen()
def fetch() -> None:
@ -103,8 +129,9 @@ def on_eot(self) -> None:
def main(args: List[str]) -> None:
loop = Loop()
handler = ThemesHandler()
loop.loop(handler)
with cached_values_for('themes-kitten') as cached_values:
handler = ThemesHandler(cached_values)
loop.loop(handler)
if loop.return_code != 0:
if handler.report_traceback_on_exit:
print(handler.report_traceback_on_exit, file=sys.stderr)