diff --git a/qutebrowser/completion/models/instances.py b/qutebrowser/completion/models/instances.py index 1a3a95d3f..30f22ddc5 100644 --- a/qutebrowser/completion/models/instances.py +++ b/qutebrowser/completion/models/instances.py @@ -186,3 +186,7 @@ def init(): history = objreg.get('web-history') history.async_read_done.connect( functools.partial(update, [usertypes.Completion.url])) + + keyconf = objreg.get('key-config') + keyconf.changed.connect( + functools.partial(update, [usertypes.Completion.command])) diff --git a/qutebrowser/completion/models/miscmodels.py b/qutebrowser/completion/models/miscmodels.py index 62267d51c..831243312 100644 --- a/qutebrowser/completion/models/miscmodels.py +++ b/qutebrowser/completion/models/miscmodels.py @@ -19,6 +19,7 @@ """Misc. CompletionModels.""" +from collections import defaultdict from PyQt5.QtCore import Qt, QTimer, pyqtSlot from qutebrowser.browser import webview @@ -35,6 +36,8 @@ class CommandCompletionModel(base.BaseCompletionModel): # https://github.com/The-Compiler/qutebrowser/issues/545 # pylint: disable=abstract-method + COLUMN_WIDTHS = (20, 60, 20) + def __init__(self, parent=None): super().__init__(parent) assert cmdutils.cmd_dict @@ -48,8 +51,18 @@ class CommandCompletionModel(base.BaseCompletionModel): for name, cmd in config.section('aliases').items(): cmdlist.append((name, "Alias for '{}'".format(cmd))) cat = self.new_category("Commands") + + # map each command to its bound keys and show these in the misc column + keyconf = objreg.get('key-config') + cmd_to_keys = defaultdict(list) + for key, cmd in keyconf.get_bindings_for('normal').items(): + # put special bindings last + if key.startswith('<') and key.endswith('>'): + cmd_to_keys[cmd].append(key) + else: + cmd_to_keys[cmd].insert(0, key) for (name, desc) in sorted(cmdlist): - self.new_item(cat, name, desc) + self.new_item(cat, name, desc, ', '.join(cmd_to_keys[name])) class HelpCompletionModel(base.BaseCompletionModel):