allow multiple close and removal actions

This commit is contained in:
Kovid Goyal 2021-11-12 21:16:21 +05:30
parent 4fb29e1b6b
commit 74a5d3a25e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 9 additions and 9 deletions

View File

@ -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')

View File

@ -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)