diff --git a/kitty/config.py b/kitty/config.py index 1d05dfb3f..c25f3e0d9 100644 --- a/kitty/config.py +++ b/kitty/config.py @@ -8,8 +8,8 @@ import re from contextlib import contextmanager, suppress from functools import partial from typing import ( - Any, Callable, Dict, FrozenSet, Generator, Iterable, List, NamedTuple, - Optional, Sequence, Tuple, Type, Union + Any, Callable, Dict, FrozenSet, Generator, Iterable, List, Optional, + Sequence, Tuple, Type, Union ) from . import fast_data_types as defines @@ -343,7 +343,8 @@ def parse_send_text(val: str, key_definitions: List[KeyDefinition]) -> None: mode, sc = parts[:2] text = ' '.join(parts[2:]) key_str = '{} send_text {} {}'.format(sc, mode, text) - parse_key(key_str, key_definitions) + for k in parse_key(key_str): + key_definitions.append(k) SpecialHandlerFunc = Callable[[str, str, Dict[str, Any]], None] @@ -365,12 +366,14 @@ def deprecated_handler(*names: str) -> Callable[[SpecialHandlerFunc], SpecialHan @special_handler def handle_map(key: str, val: str, ans: Dict[str, Any]) -> None: - parse_key(val, ans['key_definitions']) + for k in parse_key(val): + ans['key_definitions'].append(k) @special_handler def handle_mouse_map(key: str, val: str, ans: Dict[str, Any]) -> None: - parse_mouse_action(val, ans['mouse_mappings']) + for ma in parse_mouse_action(val): + ans['mouse_mappings'].append(ma) @special_handler diff --git a/kitty/options_types.py b/kitty/options_types.py index 9275c8556..002ebd7c1 100644 --- a/kitty/options_types.py +++ b/kitty/options_types.py @@ -489,7 +489,7 @@ class KeyDefinition(BaseDefinition): self.rest = tuple(map(r, self.rest)) -def parse_key(val: str, key_definitions: List[KeyDefinition]) -> None: +def parse_key(val: str) -> Iterable[KeyDefinition]: parts = val.split(maxsplit=1) if len(parts) != 2: return @@ -533,13 +533,13 @@ def parse_key(val: str, key_definitions: List[KeyDefinition]) -> None: if paction is not None: if is_sequence: if trigger is not None: - key_definitions.append(KeyDefinition(True, paction, trigger[0], trigger[1], trigger[2], rest)) + yield KeyDefinition(True, paction, trigger[0], trigger[1], trigger[2], rest) else: assert key is not None - key_definitions.append(KeyDefinition(False, paction, mods, is_native, key)) + yield KeyDefinition(False, paction, mods, is_native, key) -def parse_mouse_action(val: str, mouse_mappings: List[MouseMapping]) -> None: +def parse_mouse_action(val: str) -> Iterable[MouseMapping]: parts = val.split(maxsplit=3) if len(parts) != 4: log_error(f'Ignoring invalid mouse action: {val}') @@ -578,4 +578,4 @@ def parse_mouse_action(val: str, mouse_mappings: List[MouseMapping]) -> None: log_error(f'Ignoring unknown mouse action: {action}') return for mode in specified_modes: - mouse_mappings.append(MouseMapping(button, mods, count, mode == 'grabbed', paction)) + yield MouseMapping(button, mods, count, mode == 'grabbed', paction)