diff --git a/kitty/boss.py b/kitty/boss.py index 150d6c30d..ac9d68fc0 100755 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -1133,10 +1133,14 @@ class Boss: ''') def combine(self, actions: Tuple[KeyAction, ...], window_for_dispatch: Optional[Window] = None, dispatch_type: str = 'KeyPress') -> bool: consumed = False - if self.dispatch_action(actions[0], window_for_dispatch, dispatch_type): + try: + if self.dispatch_action(actions[0], window_for_dispatch, dispatch_type): + consumed = True + if len(actions) > 1: + self.drain_actions(list(actions[1:]), window_for_dispatch, dispatch_type) + except Exception as e: + self.show_error('Key action failed', f'{actions[0].pretty()}\n{e}') consumed = True - if len(actions) > 1: - self.drain_actions(list(actions[1:]), window_for_dispatch, dispatch_type) return consumed def on_focus(self, os_window_id: int, focused: bool) -> None: diff --git a/kitty/conf/utils.py b/kitty/conf/utils.py index 67a8cc8d3..165cc77e3 100644 --- a/kitty/conf/utils.py +++ b/kitty/conf/utils.py @@ -260,6 +260,12 @@ class KeyAction(NamedTuple): return f'KeyAction({self.func!r}, {self.args!r})' return f'KeyAction({self.func!r})' + def pretty(self) -> str: + ans = self.func + for x in self.args: + ans += f' {x}' + return ans + def parse_kittens_func_args(action: str, args_funcs: Dict[str, KeyFunc[Tuple[str, Any]]]) -> KeyAction: parts = action.strip().split(' ', 1)