done, the key will remain disabled (semi-transparent and crossed) for that
amount of time (in seconds).
+#### `common` key property
+
+A special entry `common` has its properties applying to all the keys. They can
+be overriden individually.
+
### `keys` : actions related to keys
This section lets you describe for each key, the list of actions associated to
successifs sur la touche. La touche est désactivée (grisée et barrée) pendant
toute la durée des actions puis le délai de x secondes.
+### Propriété `common`
+
+Une entrée spéciale `common` s'applique à toutes les touches. Les propriétés
+définies dans cette entrée peuvent être modifiées individuellement.
+
### `keys` : actions sur les touches
Cette section sert à décrire, pour chaque touche, la liste des actions
def parse_config(self):
def update_alias(prop_hash, aliases, key):
if isinstance(aliases[key], dict):
- prop_hash.update(aliases[key], **prop_hash)
+ for alias in aliases[key]:
+ prop_hash.setdefault(alias, aliases[key][alias])
else:
warn_print("Alias {} is not a hash, ignored".format(key))
seen_files = {}
+ common_key_properties = {}
+ if 'common' in config['key_properties'] and\
+ isinstance(config['key_properties'], dict):
+ common_key_properties = config['key_properties']['common']
+ include_aliases(common_key_properties, aliases)
+ elif 'common' in config['key_properties']:
+ warn_print("'common' key in key_properties is not a hash, ignored")
+
key_properties = defaultdict(lambda: {
"actions": [],
"properties": {},
})
for key in check_key_properties(config):
+ if key == 'common':
+ continue
+
key_prop = config['key_properties'][key]
if not isinstance(key_prop, dict):
continue
include_aliases(key_prop, aliases)
+ for _key in common_key_properties:
+ key_prop.setdefault(_key, common_key_properties[_key])
+
check_key_property(key_prop, key)
key_properties[key]["properties"] = key_prop