Use kitty_mod in debug config output

Fixes #5367
This commit is contained in:
Kovid Goyal
2022-08-11 23:45:23 +05:30
parent f42d2c63a6
commit 2b7455e353
2 changed files with 61 additions and 35 deletions

View File

@@ -22,7 +22,7 @@ from .fast_data_types import Color, num_users
from .options.types import Options as KittyOpts, defaults
from .options.utils import SequenceMap
from .rgb import color_as_sharp
from .types import MouseEvent, Shortcut
from .types import MouseEvent, Shortcut, mod_to_names
AnyEvent = TypeVar('AnyEvent', MouseEvent, Shortcut)
Print = Callable[..., None]
@@ -41,30 +41,40 @@ def title(x: str) -> str:
return colored(x, 'blue', intense=True)
def print_event(ev: AnyEvent, defn: str, print: Print) -> None:
print(f'\t{ev.human_repr}{defn}')
def print_event(ev: str, defn: str, print: Print) -> None:
print(f'\t{ev} {defn}')
def print_mapping_changes(defns: Dict[AnyEvent, str], changes: Set[AnyEvent], text: str, print: Print) -> None:
def print_mapping_changes(defns: Dict[str, str], changes: Set[str], text: str, print: Print) -> None:
if changes:
print(title(text))
for k in sorted(changes):
print_event(k, defns[k], print)
def compare_maps(final: Dict[AnyEvent, str], initial: Dict[AnyEvent, str], print: Print) -> None:
is_mouse = False
for k in initial:
if isinstance(k, MouseEvent):
is_mouse = True
break
added = set(final) - set(initial)
removed = set(initial) - set(final)
changed = {k for k in set(final) & set(initial) if final[k] != initial[k]}
which = 'mouse actions' if is_mouse else 'shortcuts'
print_mapping_changes(final, added, f'Added {which}:', print)
print_mapping_changes(initial, removed, f'Removed {which}:', print)
print_mapping_changes(final, changed, f'Changed {which}:', print)
def compare_shortcut_maps(final: Dict[Shortcut, str], final_kitty_mod: int, initial: Dict[Shortcut, str], initial_kitty_mod: int, print: Print) -> None:
# previous_tab uses a definition of ctrl+shift+tab not kitty_mod+tab, but
# we cant distinguish these as the information about the original
# definition is discarded.
ei = {k._replace(kitty_mod=0 if v == 'previous_tab' and k.keys[0].key == 57346 else initial_kitty_mod).human_repr: v for k, v in initial.items()}
ef = {k._replace(kitty_mod=final_kitty_mod).human_repr: v for k, v in final.items()}
added = set(ef) - set(ei)
removed = set(ei) - set(ef)
changed = {k for k in set(ef) & set(ei) if ef[k] != ei[k]}
print_mapping_changes(ef, added, 'Added shortcuts:', print)
print_mapping_changes(ei, removed, 'Removed shortcuts:', print)
print_mapping_changes(ef, changed, 'Changed shortcuts:', print)
def compare_mouse_maps(final: Dict[MouseEvent, str], final_kitty_mod: int, initial: Dict[MouseEvent, str], initial_kitty_mod: int, print: Print) -> None:
ei = {k.human_repr: v for k, v in initial.items()}
ef = {k.human_repr: v for k, v in final.items()}
added = set(ef) - set(ei)
removed = set(ei) - set(ef)
changed = {k for k in set(ef) & set(ei) if ef[k] != ei[k]}
print_mapping_changes(ef, added, 'Added mouse actions:', print)
print_mapping_changes(ei, removed, 'Removed mouse actions:', print)
print_mapping_changes(ef, changed, 'Changed mouse actions:', print)
def flatten_sequence_map(m: SequenceMap) -> ShortcutMap:
@@ -105,16 +115,19 @@ def compare_opts(opts: KittyOpts, print: Print) -> None:
if isinstance(val, Color):
colors.append(fmt.format(f) + ' ' + color_as_sharp(val) + ' ' + styled(' ', bg=val))
else:
print(fmt.format(f), str(getattr(opts, f)))
if f == 'kitty_mod':
print(fmt.format(f), '+'.join(mod_to_names(getattr(opts, f))))
else:
print(fmt.format(f), str(getattr(opts, f)))
compare_maps(opts.mousemap, default_opts.mousemap, print)
compare_mouse_maps(opts.mousemap, opts.kitty_mod, default_opts.mousemap, default_opts.kitty_mod, print)
final_, initial_ = opts.keymap, default_opts.keymap
final: ShortcutMap = {Shortcut((k,)): v for k, v in final_.items()}
initial: ShortcutMap = {Shortcut((k,)): v for k, v in initial_.items()}
final_s, initial_s = map(flatten_sequence_map, (opts.sequence_map, default_opts.sequence_map))
final.update(final_s)
initial.update(initial_s)
compare_maps(final, initial, print)
compare_shortcut_maps(final, opts.kitty_mod, initial, default_opts.kitty_mod, print)
if colors:
print(f'{title("Colors")}:', end='\n\t')
print('\n\t'.join(sorted(colors)))