parent
f313bcaf13
commit
3cf6d1c185
@ -91,6 +91,7 @@ class KeyConfigParser(QObject):
|
|||||||
self._load_default()
|
self._load_default()
|
||||||
else:
|
else:
|
||||||
self._read()
|
self._read()
|
||||||
|
self._load_default(only_new=True)
|
||||||
log.init.debug("Loaded bindings: {}".format(self.keybindings))
|
log.init.debug("Loaded bindings: {}".format(self.keybindings))
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@ -217,18 +218,41 @@ class KeyConfigParser(QObject):
|
|||||||
sections = '!' + sections
|
sections = '!' + sections
|
||||||
return sections
|
return sections
|
||||||
|
|
||||||
def _load_default(self):
|
def _load_default(self, *, only_new=False):
|
||||||
"""Load the built-in default key bindings."""
|
"""Load the built-in default key bindings.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
only_new: If set, only keybindings which are completely unused
|
||||||
|
(same command/key not bound) are added.
|
||||||
|
"""
|
||||||
for sectname, sect in configdata.KEY_DATA.items():
|
for sectname, sect in configdata.KEY_DATA.items():
|
||||||
sectname = self._normalize_sectname(sectname)
|
sectname = self._normalize_sectname(sectname)
|
||||||
if not sect:
|
if not sect:
|
||||||
self.keybindings[sectname] = collections.OrderedDict()
|
if not only_new:
|
||||||
|
self.keybindings[sectname] = collections.OrderedDict()
|
||||||
|
self._mark_config_dirty()
|
||||||
else:
|
else:
|
||||||
for command, keychains in sect.items():
|
for command, keychains in sect.items():
|
||||||
for e in keychains:
|
for e in keychains:
|
||||||
self._add_binding(sectname, e, command)
|
if not only_new or self._is_new(sectname, command, e):
|
||||||
|
self._add_binding(sectname, e, command)
|
||||||
|
self._mark_config_dirty()
|
||||||
self.changed.emit(sectname)
|
self.changed.emit(sectname)
|
||||||
|
|
||||||
|
def _is_new(self, sectname, command, keychain):
|
||||||
|
"""Check if a given binding is new.
|
||||||
|
|
||||||
|
A binding is considered new if both the command is not bound to any key
|
||||||
|
yet, and the key isn't used anywhere else in the same section.
|
||||||
|
"""
|
||||||
|
bindings = self.keybindings[sectname]
|
||||||
|
if keychain in bindings:
|
||||||
|
return False
|
||||||
|
elif command in bindings.values():
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
"""Read the config file from disk and parse it."""
|
"""Read the config file from disk and parse it."""
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user