Merge pull request #398 from woorst/missing_bindings
set_bindings can now update or replace existing bindings
This commit is contained in:
@@ -643,14 +643,16 @@ class KeyMap(object):
|
||||
self.set_bindings(bindings)
|
||||
|
||||
def set_bindings(self, bindings):
|
||||
# Clear the keymap before applying the bindings to avoid confusion.
|
||||
# If a user defines custom bindings in their config file, they must
|
||||
# explicitly define ALL of the bindings.
|
||||
self._keymap = {}
|
||||
new_keymap = {}
|
||||
for command, keys in bindings.items():
|
||||
if not isinstance(command, Command):
|
||||
command = Command(command)
|
||||
self._keymap[command] = keys
|
||||
new_keymap[command] = keys
|
||||
|
||||
if not self._keymap:
|
||||
self._keymap = new_keymap
|
||||
else:
|
||||
self._keymap.update(new_keymap)
|
||||
|
||||
def get(self, command):
|
||||
if not isinstance(command, Command):
|
||||
|
||||
@@ -136,9 +136,10 @@ def test_config_from_file():
|
||||
|
||||
fargs, fbindings = Config.get_file(filename=fp.name)
|
||||
config = Config(**fargs)
|
||||
default_keymap = config.keymap._keymap.copy()
|
||||
config.keymap.set_bindings(fbindings)
|
||||
assert config.config == {}
|
||||
assert config.keymap._keymap == {}
|
||||
assert config.keymap._keymap == default_keymap
|
||||
|
||||
# [rtv]
|
||||
rows = ['{0}={1}'.format(key, val) for key, val in args.items()]
|
||||
|
||||
@@ -370,13 +370,17 @@ def test_objects_keymap():
|
||||
keymap.get('downvote')
|
||||
assert 'DOWNVOTE' in six.text_type(e)
|
||||
|
||||
# Updating the bindings wipes out the old ones
|
||||
bindings = {'refresh': ['a', 0x12, '<LF>', '<KEY_UP>']}
|
||||
bindings2 = {'upvote': ['b', 0x13, '<KEY_DOWN>']}
|
||||
keymap._keymap = {}
|
||||
keymap.set_bindings(bindings)
|
||||
assert keymap.get('refresh')
|
||||
with pytest.raises(exceptions.ConfigError) as e:
|
||||
keymap.get('upvote')
|
||||
assert 'UPVOTE' in six.text_type(e)
|
||||
keymap.set_bindings(bindings2)
|
||||
assert keymap.get('refresh')
|
||||
assert keymap.get('upvote')
|
||||
|
||||
# Strings should be parsed correctly into keys
|
||||
assert KeyMap.parse('a') == 97
|
||||
|
||||
Reference in New Issue
Block a user