From 40f0f75ad5706aa150fc01078f265f31d61a2a79 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 24 Sep 2017 19:42:39 +0200 Subject: [PATCH] Improve error message for duplicate keys in config.py --- qutebrowser/config/configfiles.py | 6 +++++- tests/unit/config/test_configfiles.py | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/qutebrowser/config/configfiles.py b/qutebrowser/config/configfiles.py index c9720a6d8..62cd6088c 100644 --- a/qutebrowser/config/configfiles.py +++ b/qutebrowser/config/configfiles.py @@ -212,7 +212,11 @@ class ConfigAPI: def bind(self, key, command, mode='normal', *, force=False): with self._handle_error('binding', key): - self._keyconfig.bind(key, command, mode=mode, force=force) + try: + self._keyconfig.bind(key, command, mode=mode, force=force) + except configexc.DuplicateKeyError as e: + raise configexc.KeybindingError('{} - use force=True to ' + 'override!'.format(e)) def unbind(self, key, mode='normal'): with self._handle_error('unbinding', key): diff --git a/tests/unit/config/test_configfiles.py b/tests/unit/config/test_configfiles.py index 6a58659fa..a2ed4099a 100644 --- a/tests/unit/config/test_configfiles.py +++ b/tests/unit/config/test_configfiles.py @@ -364,6 +364,15 @@ class TestConfigPy: "config.bind(',f', 'foo')") confpy.read() + def test_bind_duplicate_key(self, confpy): + """Make sure we get a nice error message on duplicate key bindings.""" + confpy.write("config.bind('H', 'message-info back')") + api = confpy.read(error=True) + error = api.errors[0] + + expected = "Duplicate key H - use force=True to override!" + assert str(error.exception) == expected + @pytest.mark.parametrize('line, key, mode', [ ('config.unbind("o")', 'o', 'normal'), ('config.unbind("y", mode="prompt")', 'y', 'prompt'),