diff --git a/kitty/boss.py b/kitty/boss.py index fd3526160..844b9bb73 100755 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -816,9 +816,11 @@ class Boss: if matched_action is not None: self.dispatch_action(matched_action) - def visual_window_select_action(self, tab: Tab, callback: Callable[[Optional[Tab], Optional[Window]], None], choose_msg: str) -> None: + def cancel_current_visual_select(self) -> None: if self.visual_window_select_active_in_tab_id: self.visual_window_select_action_trigger(self.visual_window_select_active_in_tab_id) + + def visual_window_select_action(self, tab: Tab, callback: Callable[[Optional[Tab], Optional[Window]], None], choose_msg: str) -> None: self.visual_window_select_callback = callback if tab.current_layout.only_active_window_visible: self.select_window_in_tab_using_overlay(tab, choose_msg) diff --git a/kitty/rc/base.py b/kitty/rc/base.py index ff05701b9..38166c573 100644 --- a/kitty/rc/base.py +++ b/kitty/rc/base.py @@ -217,6 +217,9 @@ class RemoteCommand: def response_from_kitty(self, boss: 'Boss', window: Optional['Window'], payload_get: PayloadGetType) -> ResponseType: raise NotImplementedError() + def cancel_async_request(self, boss: 'Boss', window: Optional['Window'], payload_get: PayloadGetType) -> None: + pass + def cli_params_for(command: RemoteCommand) -> Tuple[Callable[[], str], str, str, str]: return (command.options_spec or '\n').format, command.argspec, command.desc, f'{appname} @ {command.name}' diff --git a/kitty/rc/select_window.py b/kitty/rc/select_window.py index 72f6a4de7..1351ec0df 100644 --- a/kitty/rc/select_window.py +++ b/kitty/rc/select_window.py @@ -57,5 +57,8 @@ instead of the active tab. break return no_response + def cancel_async_request(self, boss: 'Boss', window: Optional['Window'], payload_get: PayloadGetType) -> None: + boss.cancel_current_visual_select() + select_window = SelectWindow() diff --git a/kitty/remote_control.py b/kitty/remote_control.py index 9afedc1d3..3f60a2d6e 100644 --- a/kitty/remote_control.py +++ b/kitty/remote_control.py @@ -48,6 +48,7 @@ def handle_cmd(boss: BossType, window: Optional[WindowType], serialized_cmd: str if async_id: if 'cancel_async' in cmd: active_async_requests.pop(async_id, None) + c.cancel_async_request(boss, window, PayloadGetter(c, payload)) return None active_async_requests[async_id] = monotonic() payload['async_id'] = async_id