diff --git a/kittens/choose/main.py b/kittens/choose/main.py index 16d900965..9dc4e90f3 100644 --- a/kittens/choose/main.py +++ b/kittens/choose/main.py @@ -3,47 +3,14 @@ # License: GPL v3 Copyright: 2018, Kovid Goyal import sys -from typing import Iterable, List, Union +from typing import List from kitty.key_encoding import KeyEvent -from . import subseq_matcher from ..tui.handler import Handler from ..tui.loop import Loop -def match( - input_data: Union[str, bytes, Iterable[Union[str, bytes]]], - query: str, - threads: int = 0, - positions: bool = False, - level1: str = '/', - level2: str = '-_0123456789', - level3: str = '.', - limit: int = 0, - mark_before: str = '', - mark_after: str = '', - delimiter: str = '\n' -) -> List[str]: - if isinstance(input_data, str): - idata = [x.encode('utf-8') for x in input_data.split(delimiter)] - elif isinstance(input_data, bytes): - idata = input_data.split(delimiter.encode('utf-8')) - else: - idata = [x.encode('utf-8') if isinstance(x, str) else x for x in input_data] - query = query.lower() - level1 = level1.lower() - level2 = level2.lower() - level3 = level3.lower() - data = subseq_matcher.match( - idata, (level1, level2, level3), query, - positions, limit, threads, - mark_before, mark_after, delimiter) - if data is None: - return [] - return list(filter(None, data.split(delimiter or '\n'))) - - class ChooseHandler(Handler): def initialize(self) -> None: diff --git a/kittens/choose/match.py b/kittens/choose/match.py new file mode 100644 index 000000000..d0cfe2bbf --- /dev/null +++ b/kittens/choose/match.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 +# License: GPLv3 Copyright: 2021, Kovid Goyal + +from typing import Iterable, List, Union + +from . import subseq_matcher + + +def match( + input_data: Union[str, bytes, Iterable[Union[str, bytes]]], + query: str, + threads: int = 0, + positions: bool = False, + level1: str = '/', + level2: str = '-_0123456789', + level3: str = '.', + limit: int = 0, + mark_before: str = '', + mark_after: str = '', + delimiter: str = '\n' +) -> List[str]: + if isinstance(input_data, str): + idata = [x.encode('utf-8') for x in input_data.split(delimiter)] + elif isinstance(input_data, bytes): + idata = input_data.split(delimiter.encode('utf-8')) + else: + idata = [x.encode('utf-8') if isinstance(x, str) else x for x in input_data] + query = query.lower() + level1 = level1.lower() + level2 = level2.lower() + level3 = level3.lower() + data = subseq_matcher.match( + idata, (level1, level2, level3), query, + positions, limit, threads, + mark_before, mark_after, delimiter) + if data is None: + return [] + return list(filter(None, data.split(delimiter or '\n'))) diff --git a/kittens/themes/collection.py b/kittens/themes/collection.py index 70e404a88..5ded581ef 100644 --- a/kittens/themes/collection.py +++ b/kittens/themes/collection.py @@ -20,7 +20,7 @@ from kitty.constants import cache_dir, config_dir from kitty.options.types import Options as KittyOptions from kitty.rgb import Color -from ..choose.main import match +from ..choose.match import match def set_comment_in_zip_file(path: str, data: str) -> None: