Clean up config merging
This commit is contained in:
parent
e427fd1233
commit
b36c3f3425
@ -274,32 +274,36 @@ defaults = Options(**defaults)
|
|||||||
actions = frozenset(defaults.keymap.values())
|
actions = frozenset(defaults.keymap.values())
|
||||||
|
|
||||||
|
|
||||||
def update_dict(a, b):
|
def merge_keymaps(defaults, newvals):
|
||||||
a.update(b)
|
ans = defaults.copy()
|
||||||
return a
|
for k, v in newvals.items():
|
||||||
|
if v in {'noop', 'no-op', 'no_op'}:
|
||||||
|
ans.pop(k, None)
|
||||||
|
continue
|
||||||
|
if v in actions:
|
||||||
|
ans[k] = v
|
||||||
|
return ans
|
||||||
|
|
||||||
|
|
||||||
def merge_dicts(vals, defaults):
|
def merge_dicts(defaults, newvals):
|
||||||
return {
|
ans = defaults.copy()
|
||||||
k: update_dict(v, vals.get(k, {}))
|
ans.update(newvals)
|
||||||
if isinstance(v, dict) else vals.get(k, v)
|
return ans
|
||||||
for k, v in defaults.items()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def merge_configs(ans, vals):
|
def merge_configs(defaults, vals):
|
||||||
vals['keymap'] = {
|
ans = {}
|
||||||
k: v
|
for k, v in defaults.items():
|
||||||
for k, v in vals.get('keymap', {}).items() if v in actions
|
if isinstance(v, dict):
|
||||||
}
|
newvals = vals.get(k, {})
|
||||||
remove_keys = {
|
if k == 'keymap':
|
||||||
k
|
ans['keymap'] = merge_keymaps(v, newvals)
|
||||||
for k, v in vals.get('keymap', {}).items()
|
elif k == 'send_text_map':
|
||||||
if v in ('noop', 'no-op', 'no_op')
|
ans[k] = {m: merge_dicts(mm, newvals.get(m, {})) for m, mm in v.items()}
|
||||||
}
|
else:
|
||||||
ans = merge_dicts(vals, ans)
|
ans[k] = merge_dicts(v, newvals)
|
||||||
for k in remove_keys:
|
else:
|
||||||
ans['keymap'].pop(k, None)
|
ans[k] = vals.get(k, v)
|
||||||
return ans
|
return ans
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user