From 6bfb6da0ad0c552c34457aafe85b0f0b61200ba2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 15 Feb 2022 22:33:51 +0530 Subject: [PATCH] Make the regex for sgr stripping tighter --- kittens/hints/main.py | 6 +++--- kitty/utils.py | 6 ++++-- kitty/window.py | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/kittens/hints/main.py b/kittens/hints/main.py index 4d970a4e4..130aebcf6 100644 --- a/kittens/hints/main.py +++ b/kittens/hints/main.py @@ -20,8 +20,8 @@ from kitty.fast_data_types import get_options, set_clipboard_string from kitty.key_encoding import KeyEvent from kitty.typing import BossType, KittyCommonOpts from kitty.utils import ( - ScreenSize, ansi_sanitizer_pat, resolve_custom_file, screen_size_function, - set_primary_selection + ScreenSize, kitty_ansi_sanitizer_pat, resolve_custom_file, + screen_size_function, set_primary_selection ) from ..tui.handler import Handler, result_handler @@ -475,7 +475,7 @@ def process_escape_codes(text: str) -> Tuple[str, Tuple[Mark, ...]]: return '' - text = ansi_sanitizer_pat().sub(process_hyperlink, text) + text = kitty_ansi_sanitizer_pat().sub(process_hyperlink, text) if active_hyperlink_url is not None: add_hyperlink(len(text)) return text, tuple(hyperlinks) diff --git a/kitty/utils.py b/kitty/utils.py index 68cb42195..9d6500360 100644 --- a/kitty/utils.py +++ b/kitty/utils.py @@ -62,8 +62,10 @@ def sgr_sanitizer_pat(for_splitting: bool = False) -> 're.Pattern[str]': @run_once -def ansi_sanitizer_pat() -> 're.Pattern[str]': - return re.compile(r'\x1b(?:\[.*?m|\].*?\x1b\\)') +def kitty_ansi_sanitizer_pat() -> 're.Pattern[str]': + # removes ANSI sequences generated by kitty's ANSI output routines. Not + # suitable for stripping general ANSI sequences + return re.compile(r'\x1b(?:\[[0-9;:]*?m|\].*?\x1b\\)') def platform_window_id(os_window_id: int) -> Optional[int]: diff --git a/kitty/window.py b/kitty/window.py index a1d085ce2..13d1bea5f 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -45,7 +45,7 @@ from .terminfo import get_capabilities from .types import MouseEvent, WindowGeometry, ac from .typing import BossType, ChildType, EdgeLiteral, TabType, TypedDict from .utils import ( - ansi_sanitizer_pat, get_primary_selection, load_shaders, log_error, + get_primary_selection, kitty_ansi_sanitizer_pat, load_shaders, log_error, open_cmd, open_url, parse_color_set, resolve_custom_file, sanitize_title, set_primary_selection ) @@ -284,7 +284,7 @@ def setup_colors(screen: Screen, opts: Options) -> None: def text_sanitizer(as_ansi: bool, add_wrap_markers: bool) -> Callable[[str], str]: - pat = ansi_sanitizer_pat() + pat = kitty_ansi_sanitizer_pat() ansi, wrap_markers = not as_ansi, not add_wrap_markers def remove_wrap_markers(line: str) -> str: