From 64634bd7904af4ea8b2534f2d2071266afbdb5d7 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Thu, 26 Oct 2023 10:30:23 +0200 Subject: [PATCH] fix frappyman.do_listcfg --- frappyman.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/frappyman.py b/frappyman.py index b1cef04..592f65d 100644 --- a/frappyman.py +++ b/frappyman.py @@ -353,34 +353,35 @@ class FrappyManager(ServiceManager): for service in self.services: self.all_cfg(ins, service, list_info, sea_info) seacfgpat = re.compile(r'(.*)(\.config|\.stick|\.addon)') - sea_ambig = {} # collect info about ambiguous sea info - for cfg, seacfg in sea_info.items(): - sea_ambig.setdefault(seacfg, set()).add(cfg) + inverted_sea_info = {} + for seacfg, cfgset in sea_info.items(): + for cfg in cfgset: + inverted_sea_info[seacfg] = cfg ambiguous = 0 keylen = max(max(len(k) for k in cfgs) for cfgs in list_info.values()) for cfgdir, cfgs in list_info.items(): if cfgs: prt('') prt('--- %s:' % cfgdir) - for cfg, desc in cfgs.items(): - seacfg = sea_info.get(cfg) + for cfg, desc in sorted(cfgs.items(), key=lambda v: (v[0].lower(), v)): + seacfg = inverted_sea_info.get(cfg) if seacfg: name, ext = seacfgpat.match(seacfg).groups() if name == cfg or name + 'stick' == cfg: prefix = '* ' else: prefix = f'* ({name}{ext}) ' - n = len(sea_ambig.get(seacfg)) + n = len(sea_info[seacfg]) if n > 1: prefix = '!' + prefix[1:] - ambiguous += 1 + ambiguous += 1.0 / n desc = prefix + desc prt('%s %s' % (cfg.ljust(keylen), desc)) prt(' ') gap = ' ' * keylen prt(f'{gap} * need sea') if ambiguous: - print(f'{gap} ! {ambiguous} ambiguous mappings sea -> frappy') + print(f'{gap} ! {round(ambiguous)} ambiguous mappings sea -> frappy') def treat_args(self, argdict, unknown=(), extra=()): if len(unknown) == 1: