From f816f894d3790719a1013711329c6c8d07b3301a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0ar=C5=ABnas=20Nejus?= Date: Wed, 20 Aug 2025 11:28:39 +0100 Subject: [PATCH] Use default red/green for case differences --- beets/ui/__init__.py | 38 ++++++++++++-------------------------- docs/changelog.rst | 2 +- 2 files changed, 13 insertions(+), 27 deletions(-) diff --git a/beets/ui/__init__.py b/beets/ui/__init__.py index 293571ce2..be8d29e87 100644 --- a/beets/ui/__init__.py +++ b/beets/ui/__init__.py @@ -620,7 +620,7 @@ def color_len(colored_text): return len(uncolorize(colored_text)) -def _colordiff(a, b): +def _colordiff(a: Any, b: Any) -> tuple[str, str]: """Given two values, return the same pair of strings except with their differences highlighted in the specified color. Strings are highlighted intelligently to show differences; other values are @@ -642,35 +642,21 @@ def _colordiff(a, b): colorize("text_diff_added", str(b)), ) - a_out = [] - b_out = [] + before = "" + after = "" matcher = SequenceMatcher(lambda x: False, a, b) for op, a_start, a_end, b_start, b_end in matcher.get_opcodes(): - if op == "equal": - # In both strings. - a_out.append(a[a_start:a_end]) - b_out.append(b[b_start:b_end]) - elif op == "insert": - # Right only. - b_out.append(colorize("text_diff_added", b[b_start:b_end])) - elif op == "delete": - # Left only. - a_out.append(colorize("text_diff_removed", a[a_start:a_end])) - elif op == "replace": - # Right and left differ. Colorise with second highlight if - # it's just a case change. - if a[a_start:a_end].lower() != b[b_start:b_end].lower(): - a_color = "text_diff_removed" - b_color = "text_diff_added" - else: - a_color = b_color = "text_highlight_minor" - a_out.append(colorize(a_color, a[a_start:a_end])) - b_out.append(colorize(b_color, b[b_start:b_end])) - else: - assert False + before_part, after_part = a[a_start:a_end], b[b_start:b_end] + if op in {"delete", "replace"}: + before_part = colorize("text_diff_removed", before_part) + if op in {"insert", "replace"}: + after_part = colorize("text_diff_added", after_part) - return "".join(a_out), "".join(b_out) + before += before_part + after += after_part + + return before, after def colordiff(a, b): diff --git a/docs/changelog.rst b/docs/changelog.rst index b9ac55b01..71fd657b7 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -138,7 +138,7 @@ Other changes: - UI: Update default ``text_diff_added`` color from **bold red** to **bold green.** - UI: Use ``text_diff_added`` and ``text_diff_removed`` colors in **all** diff - comparisons. + comparisons, including case differences. 2.3.1 (May 14, 2025) --------------------