From 263706670c02971784020b79f527ff01321ccb2e Mon Sep 17 00:00:00 2001 From: Benex254 Date: Tue, 6 Aug 2024 13:32:38 +0300 Subject: [PATCH] refactor and add docs to fzf package --- fastanime/libs/fzf/__init__.py | 75 +++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/fastanime/libs/fzf/__init__.py b/fastanime/libs/fzf/__init__.py index 0466efe..3529042 100644 --- a/fastanime/libs/fzf/__init__.py +++ b/fastanime/libs/fzf/__init__.py @@ -5,31 +5,15 @@ import subprocess import sys from typing import Callable, List +# TODO: will probably scrap art not to useful from art import text2art from rich import print from ...constants import PLATFORM -from .config import FZF_DEFAULT_OPTS, FzfOptions logger = logging.getLogger(__name__) -# fzf\ -# --info=hidden \ -# --layout=reverse \ -# --height=100% \ -# --prompt="Select Channel: " \ -# --header="$fzf_header" \ -# --preview-window=left,50%\ -# --bind=right:accept \ -# --expect=shift-left,shift-right\ -# --tabstop=1 \ -# --no-margin \ -# +m \ -# -i \ -# --exact \ - - def clear(): if PLATFORM == "Windows": os.system("cls") @@ -37,7 +21,25 @@ def clear(): os.system("clear") +FZF_DEFAULT_OPTS = """ + --color=fg:#d0d0d0,fg+:#d0d0d0,bg:#121212,bg+:#262626 + --color=hl:#5f87af,hl+:#5fd7ff,info:#afaf87,marker:#87ff00 + --color=prompt:#d7005f,spinner:#af5fff,pointer:#af5fff,header:#87afaf + --color=border:#262626,label:#aeaeae,query:#d9d9d9 + --border="rounded" --border-label="" --preview-window="border-rounded" --prompt="> " + --marker=">" --pointer="◆" --separator="─" --scrollbar="│" +""" + + class FZF: + """an abstraction over the fzf commandline utility + + Attributes: + FZF_EXECUTABLE: [TODO:attribute] + default_options: [TODO:attribute] + stdout: [TODO:attribute] + """ + if not os.getenv("FZF_DEFAULT_OPTS"): os.environ["FZF_DEFAULT_OPTS"] = FZF_DEFAULT_OPTS FZF_EXECUTABLE = shutil.which("fzf") @@ -57,6 +59,15 @@ class FZF: ] def _with_filter(self, command: str, work: Callable) -> List[str]: + """ported from the fzf docs demo + + Args: + command: [TODO:description] + work: [TODO:description] + + Returns: + [TODO:return] + """ try: process = subprocess.Popen( command, @@ -88,7 +99,19 @@ class FZF: return output - def _run_fzf(self, commands: list[FzfOptions], _fzf_input) -> str: + def _run_fzf(self, commands: list[str], _fzf_input) -> str: + """core abstraction + + Args: + _fzf_input ([TODO:parameter]): [TODO:description] + commands: [TODO:description] + + Raises: + Exception: [TODO:throw] + + Returns: + [TODO:return] + """ fzf_input = "\n".join(_fzf_input) if not self.FZF_EXECUTABLE: @@ -118,6 +141,19 @@ class FZF: expect: str | None = None, validator: Callable | None = None, ) -> str: + """a helper method that wraps common use cases over the fzf utility + + Args: + fzf_input: [TODO:description] + prompt: [TODO:description] + header: [TODO:description] + preview: [TODO:description] + expect: [TODO:description] + validator: [TODO:description] + + Returns: + [TODO:return] + """ _commands = [ *self.default_options, "--header", @@ -149,4 +185,5 @@ class FZF: fzf = FZF() if __name__ == "__main__": - fzf.run([*os.listdir(), "exit"], "Prompt: ", "Header", preview="bat {}") + action = fzf.run([*os.listdir(), "exit"], "Prompt: ", "Header", preview="bat {}") + print(action)