From 711f8b024eec2c81f15010e8beaae9ef3edd5b42 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 15 Feb 2022 22:11:57 +0530 Subject: [PATCH] Properly sanitize pagerhist when returning as plain text --- kitty/window.py | 12 ++++++++---- kitty_tests/screen.py | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/kitty/window.py b/kitty/window.py index 31d65559d..4fd8b906f 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -42,12 +42,11 @@ from .notify import NotificationCommand, handle_notification_cmd from .options.types import Options from .rgb import to_color from .terminfo import get_capabilities -from .types import MouseEvent, WindowGeometry, ac +from .types import MouseEvent, WindowGeometry, ac, run_once from .typing import BossType, ChildType, EdgeLiteral, TabType, TypedDict from .utils import ( get_primary_selection, load_shaders, log_error, open_cmd, open_url, - parse_color_set, resolve_custom_file, sanitize_title, - set_primary_selection, sgr_sanitizer_pat + parse_color_set, resolve_custom_file, sanitize_title, set_primary_selection ) MatchPatternType = Union[Pattern[str], Tuple[Pattern[str], Optional[Pattern[str]]]] @@ -283,8 +282,13 @@ def setup_colors(screen: Screen, opts: Options) -> None: ) +@run_once +def ansi_sanitizer_pat() -> 're.Pattern[str]': + return re.compile(r'\x1b(?:\[.*?m|\].*?\x1b\\)') + + def text_sanitizer(as_ansi: bool, add_wrap_markers: bool) -> Callable[[str], str]: - pat = sgr_sanitizer_pat() + pat = ansi_sanitizer_pat() ansi, wrap_markers = not as_ansi, not add_wrap_markers def remove_wrap_markers(line: str) -> str: diff --git a/kitty_tests/screen.py b/kitty_tests/screen.py index 3fcbbf86f..449a24909 100644 --- a/kitty_tests/screen.py +++ b/kitty_tests/screen.py @@ -1085,4 +1085,4 @@ class TestScreen(BaseTest): s = self.create_screen() draw_prompt('p1') draw_output(30) - self.ae(tuple(map(int, lco()[len('\x1b]133;C\x1b\\'):].split())), tuple(range(0, 30))) + self.ae(tuple(map(int, lco().split())), tuple(range(0, 30)))