summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2018-03-08 11:41:31 +0100
committerFlorian Bruhin <git@the-compiler.org>2018-03-08 11:42:27 +0100
commit482b622b1b628d91f75b44c59d17214b94531d3e (patch)
treee86e9d6bb7438c626c4c090b96afc15f25ed9e11
parent1899e313fd4f0a35cb71390053ebbcb8df451537 (diff)
downloadqutebrowser-482b622b1b628d91f75b44c59d17214b94531d3e.tar.gz
qutebrowser-482b622b1b628d91f75b44c59d17214b94531d3e.zip
Fix handling of empty bindings without breaking :unbind
1899e313fd4f0a35cb71390053ebbcb8df451537 as a fix for #3631 broke :unbind, as the config system treats None and '' equally. Instead, allow None/'' again, but just handle it as "no binding".
-rw-r--r--doc/changelog.asciidoc2
-rw-r--r--qutebrowser/config/config.py2
-rw-r--r--qutebrowser/config/configdata.yml4
-rw-r--r--tests/unit/config/test_config.py6
-rw-r--r--tests/unit/keyinput/test_basekeyparser.py6
5 files changed, 17 insertions, 3 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc
index 0d6adc5b6..26294d7ca 100644
--- a/doc/changelog.asciidoc
+++ b/doc/changelog.asciidoc
@@ -134,7 +134,7 @@ Fixed
- HTML/JS resource files are now read into RAM on start to avoid crashes when
changing qutebrowser versions while it's open.
- Setting `bindings.key_mappings` to an empty value is now allowed.
-- Binding to an empty command now shows an error rather than crashing.
+- Bindings to an empty commands are now ignored rather than crashing.
Removed
~~~~~~~
diff --git a/qutebrowser/config/config.py b/qutebrowser/config/config.py
index de8cc7042..7204fb8f3 100644
--- a/qutebrowser/config/config.py
+++ b/qutebrowser/config/config.py
@@ -147,7 +147,7 @@ class KeyConfig:
"""Get the combined bindings for the given mode."""
bindings = dict(val.bindings.default[mode])
for key, binding in val.bindings.commands[mode].items():
- if binding is None:
+ if not binding:
bindings.pop(key, None)
else:
bindings[key] = binding
diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml
index a778d1d35..a6a2d5317 100644
--- a/qutebrowser/config/configdata.yml
+++ b/qutebrowser/config/configdata.yml
@@ -2485,7 +2485,9 @@ bindings.commands:
name: Dict
none_ok: true
keytype: Key
- valtype: Command
+ valtype:
+ name: Command
+ none_ok: true # needed for :unbind
desc: >-
Keybindings mapping keys to commands in different modes.
diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py
index d51d79370..9104c0f53 100644
--- a/tests/unit/config/test_config.py
+++ b/tests/unit/config/test_config.py
@@ -161,6 +161,12 @@ class TestKeyConfig:
for key, command in expected.items():
assert key_config_stub.get_command(key, 'normal') == command
+ def test_get_bindings_for_empty_command(self, key_config_stub,
+ config_stub):
+ config_stub.val.bindings.commands = {'normal': {',x': ''}}
+ bindings = key_config_stub.get_bindings_for('normal')
+ assert keyseq(',x') not in bindings
+
def test_get_command_unbound(self, key_config_stub, config_stub,
no_bindings):
config_stub.val.bindings.default = no_bindings
diff --git a/tests/unit/keyinput/test_basekeyparser.py b/tests/unit/keyinput/test_basekeyparser.py
index b8747580b..6465db875 100644
--- a/tests/unit/keyinput/test_basekeyparser.py
+++ b/tests/unit/keyinput/test_basekeyparser.py
@@ -115,6 +115,12 @@ class TestReadConfig:
assert keyseq('foo') in keyparser.bindings
assert keyseq('<ctrl+x>') in keyparser.bindings
+ def test_read_config_empty_binding(self, keyparser, config_stub):
+ """Make sure setting an empty binding doesn't crash."""
+ keyparser._read_config('normal')
+ config_stub.val.bindings.commands = {'normal': {'co': ''}}
+ # The config is re-read automatically
+
def test_read_config_modename_none(self, keyparser):
assert keyparser._modename is None