diff --git a/viu_media/assets/scripts/fzf/_ansi_utils.py b/viu_media/assets/scripts/fzf/_ansi_utils.py index 05a9048..a31605d 100644 --- a/viu_media/assets/scripts/fzf/_ansi_utils.py +++ b/viu_media/assets/scripts/fzf/_ansi_utils.py @@ -5,12 +5,26 @@ Lightweight stdlib-only utilities to replace Rich dependency in preview scripts. Provides RGB color formatting, table rendering, and markdown stripping. """ +import os import re import shutil import textwrap import unicodedata +def get_terminal_width() -> int: + """ + Get terminal width, prioritizing FZF preview environment variables. + + Returns: + Terminal width in columns + """ + fzf_cols = os.environ.get("FZF_PREVIEW_COLUMNS") + if fzf_cols: + return int(fzf_cols) + return shutil.get_terminal_size((80, 24)).columns + + def display_width(text: str) -> int: """ Calculate the actual display width of text, accounting for wide characters. @@ -72,7 +86,7 @@ def print_rule(sep_color: str) -> None: Args: sep_color: Color as 'R,G,B' string """ - width = shutil.get_terminal_size((80, 24)).columns + width = get_terminal_width() r, g, b = parse_color(sep_color) print(rgb_color(r, g, b, "─" * width)) @@ -94,7 +108,7 @@ def print_table_row( key_styled = rgb_color(r, g, b, key, bold=True) # Get actual terminal width - term_width = shutil.get_terminal_size((80, 24)).columns + term_width = get_terminal_width() # Calculate display widths accounting for wide characters key_display_width = display_width(key) @@ -183,6 +197,6 @@ def wrap_text(text: str, width: int | None = None) -> str: Wrapped text """ if width is None: - width = shutil.get_terminal_size((80, 24)).columns + width = get_terminal_width() return textwrap.fill(text, width=width) diff --git a/viu_media/assets/scripts/fzf/airing_schedule_info.py b/viu_media/assets/scripts/fzf/airing_schedule_info.py index eb29f0b..11cc64f 100644 --- a/viu_media/assets/scripts/fzf/airing_schedule_info.py +++ b/viu_media/assets/scripts/fzf/airing_schedule_info.py @@ -1,12 +1,17 @@ import sys -import shutil -from _ansi_utils import print_rule, print_table_row, strip_markdown, wrap_text +from _ansi_utils import ( + print_rule, + print_table_row, + strip_markdown, + wrap_text, + get_terminal_width, +) HEADER_COLOR = sys.argv[1] SEPARATOR_COLOR = sys.argv[2] # Get terminal dimensions -term_width = shutil.get_terminal_size((80, 24)).columns +term_width = get_terminal_width() # Print title centered print("{ANIME_TITLE}".center(term_width)) diff --git a/viu_media/assets/scripts/fzf/character_info.py b/viu_media/assets/scripts/fzf/character_info.py index a60de67..f99aed5 100644 --- a/viu_media/assets/scripts/fzf/character_info.py +++ b/viu_media/assets/scripts/fzf/character_info.py @@ -1,12 +1,17 @@ import sys -import shutil -from _ansi_utils import print_rule, print_table_row, strip_markdown, wrap_text +from _ansi_utils import ( + print_rule, + print_table_row, + strip_markdown, + wrap_text, + get_terminal_width, +) HEADER_COLOR = sys.argv[1] SEPARATOR_COLOR = sys.argv[2] # Get terminal dimensions -term_width = shutil.get_terminal_size((80, 24)).columns +term_width = get_terminal_width() # Print title centered print("{CHARACTER_NAME}".center(term_width)) diff --git a/viu_media/assets/scripts/fzf/episode_info.py b/viu_media/assets/scripts/fzf/episode_info.py index 825513c..c0bd03c 100644 --- a/viu_media/assets/scripts/fzf/episode_info.py +++ b/viu_media/assets/scripts/fzf/episode_info.py @@ -1,12 +1,11 @@ import sys -import shutil -from _ansi_utils import print_rule, print_table_row +from _ansi_utils import print_rule, print_table_row, get_terminal_width HEADER_COLOR = sys.argv[1] SEPARATOR_COLOR = sys.argv[2] # Get terminal dimensions -term_width = shutil.get_terminal_size((80, 24)).columns +term_width = get_terminal_width() # Print title centered print("{TITLE}".center(term_width)) diff --git a/viu_media/assets/scripts/fzf/media_info.py b/viu_media/assets/scripts/fzf/media_info.py index f7dd7d1..c3c4b27 100644 --- a/viu_media/assets/scripts/fzf/media_info.py +++ b/viu_media/assets/scripts/fzf/media_info.py @@ -1,12 +1,17 @@ import sys -import shutil -from _ansi_utils import print_rule, print_table_row, strip_markdown, wrap_text +from _ansi_utils import ( + print_rule, + print_table_row, + strip_markdown, + wrap_text, + get_terminal_width, +) HEADER_COLOR = sys.argv[1] SEPARATOR_COLOR = sys.argv[2] # Get terminal dimensions -term_width = shutil.get_terminal_size((80, 24)).columns +term_width = get_terminal_width() # Print title centered print("{TITLE}".center(term_width)) diff --git a/viu_media/assets/scripts/fzf/preview.py b/viu_media/assets/scripts/fzf/preview.py index 8c4b064..de500c7 100644 --- a/viu_media/assets/scripts/fzf/preview.py +++ b/viu_media/assets/scripts/fzf/preview.py @@ -244,12 +244,13 @@ def fzf_image_preview(file_path: str): def fzf_text_info_render(): """Renders the text-based info via the cached python script.""" - import shutil + # Get terminal dimensions from FZF environment or fallback + cols, lines = get_terminal_dimensions() - # Print simple separator line - width = shutil.get_terminal_size((80, 24)).columns + # Print simple separator line with proper width r, g, b = map(int, SEPARATOR_COLOR.split(",")) - print(f"\x1b[38;2;{r};{g};{b}m" + "─" * width + "\x1b[0m") + separator = f"\x1b[38;2;{r};{g};{b}m" + ("─" * cols) + "\x1b[0m" + print(separator, flush=True) if PREVIEW_MODE == "text" or PREVIEW_MODE == "full": preview_info_path = INFO_CACHE_DIR / f"{hash_id}.py" diff --git a/viu_media/assets/scripts/fzf/review_info.py b/viu_media/assets/scripts/fzf/review_info.py index e7fdbdc..6c2decc 100644 --- a/viu_media/assets/scripts/fzf/review_info.py +++ b/viu_media/assets/scripts/fzf/review_info.py @@ -1,12 +1,17 @@ import sys -import shutil -from _ansi_utils import print_rule, print_table_row, strip_markdown, wrap_text +from _ansi_utils import ( + print_rule, + print_table_row, + strip_markdown, + wrap_text, + get_terminal_width, +) HEADER_COLOR = sys.argv[1] SEPARATOR_COLOR = sys.argv[2] # Get terminal dimensions -term_width = shutil.get_terminal_size((80, 24)).columns +term_width = get_terminal_width() # Print title centered print("{REVIEWER_NAME}".center(term_width))