From 74a5d3a25e8268e81ad0ae126224df7ee9bf6c9d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 12 Nov 2021 21:16:21 +0530 Subject: [PATCH] allow multiple close and removal actions --- kitty/boss.py | 14 +++++++------- kitty/window.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kitty/boss.py b/kitty/boss.py index 0c47f807c..0420be26c 100755 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -584,9 +584,9 @@ class Boss: window = self.window_id_map.pop(window_id, None) if window is None: return - if window.action_on_close: + for close_action in window.actions_on_close: try: - window.action_on_close(window) + close_action(window) except Exception: import traceback traceback.print_exc() @@ -602,13 +602,13 @@ class Boss: if tab is not None: tab.remove_window(window) self._cleanup_tab_after_window_removal(tab) - if window.action_on_removal: + for removal_action in window.actions_on_removal: try: - window.action_on_removal(window) + removal_action(window) except Exception: import traceback traceback.print_exc() - window.action_on_close = window.action_on_removal = None + del window.actions_on_close[:], window.actions_on_removal[:] window = self.active_window if window is not prev_active_window: if prev_active_window is not None: @@ -1346,13 +1346,13 @@ class Boss: copy_colors_from=w ) wid = w.id - overlay_window.action_on_close = partial(self.on_kitten_finish, wid, custom_callback or end_kitten) + overlay_window.actions_on_close.append(partial(self.on_kitten_finish, wid, custom_callback or end_kitten)) if action_on_removal is not None: def callback_wrapper(*a: Any) -> None: if action_on_removal is not None: action_on_removal(wid, self) - overlay_window.action_on_removal = callback_wrapper + overlay_window.actions_on_removal.append(callback_wrapper) return overlay_window @ac('misc', 'Run the specified kitten. See :doc:`/kittens/custom` for details') diff --git a/kitty/window.py b/kitty/window.py index 25fa6eac5..e5af909d1 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -361,8 +361,8 @@ class Window: self.current_mouse_event_button = 0 self.current_clipboard_read_ask: Optional[bool] = None self.prev_osc99_cmd = NotificationCommand() - self.action_on_close: Optional[Callable[['Window'], None]] = None - self.action_on_removal: Optional[Callable[['Window'], None]] = None + self.actions_on_close: List[Callable[['Window'], None]] = [] + self.actions_on_removal: List[Callable[['Window'], None]] = [] self.current_marker_spec: Optional[Tuple[str, Union[str, Tuple[Tuple[int, str], ...]]]] = None self.pty_resized_once = False self.last_reported_pty_size = (-1, -1, -1, -1)