Merge remote-tracking branch 'origin/pr/3336'
This commit is contained in:
commit
38f8cacd2b
@ -77,17 +77,26 @@ def bind(key, *, info):
|
|||||||
key: the key being bound.
|
key: the key being bound.
|
||||||
"""
|
"""
|
||||||
model = completionmodel.CompletionModel(column_widths=(20, 60, 20))
|
model = completionmodel.CompletionModel(column_widths=(20, 60, 20))
|
||||||
cmd_text = info.keyconf.get_command(key, 'normal')
|
data = []
|
||||||
|
|
||||||
|
cmd_text = info.keyconf.get_command(key, 'normal')
|
||||||
if cmd_text:
|
if cmd_text:
|
||||||
parser = runners.CommandParser()
|
parser = runners.CommandParser()
|
||||||
try:
|
try:
|
||||||
cmd = parser.parse(cmd_text).cmd
|
cmd = parser.parse(cmd_text).cmd
|
||||||
except cmdexc.NoSuchCommandError:
|
except cmdexc.NoSuchCommandError:
|
||||||
data = [(cmd_text, 'Invalid command!', key)]
|
data.append((cmd_text, '(Current) Invalid command!', key))
|
||||||
else:
|
else:
|
||||||
data = [(cmd_text, cmd.desc, key)]
|
data.append((cmd_text, '(Current) {}'.format(cmd.desc), key))
|
||||||
model.add_category(listcategory.ListCategory("Current", data))
|
|
||||||
|
cmd_text = info.keyconf.get_command(key, 'normal', default=True)
|
||||||
|
if cmd_text:
|
||||||
|
parser = runners.CommandParser()
|
||||||
|
cmd = parser.parse(cmd_text).cmd
|
||||||
|
data.append((cmd_text, '(Default) {}'.format(cmd.desc), key))
|
||||||
|
|
||||||
|
if data:
|
||||||
|
model.add_category(listcategory.ListCategory("Current/Default", data))
|
||||||
|
|
||||||
cmdlist = util.get_cmd_completions(info, include_hidden=True,
|
cmdlist = util.get_cmd_completions(info, include_hidden=True,
|
||||||
include_aliases=True)
|
include_aliases=True)
|
||||||
|
@ -162,10 +162,13 @@ class KeyConfig:
|
|||||||
cmd_to_keys[cmd].insert(0, key)
|
cmd_to_keys[cmd].insert(0, key)
|
||||||
return cmd_to_keys
|
return cmd_to_keys
|
||||||
|
|
||||||
def get_command(self, key, mode):
|
def get_command(self, key, mode, default=False):
|
||||||
"""Get the command for a given key (or None)."""
|
"""Get the command for a given key (or None)."""
|
||||||
key = self._prepare(key, mode)
|
key = self._prepare(key, mode)
|
||||||
bindings = self.get_bindings_for(mode)
|
if default:
|
||||||
|
bindings = dict(val.bindings.default[mode])
|
||||||
|
else:
|
||||||
|
bindings = self.get_bindings_for(mode)
|
||||||
return bindings.get(key, None)
|
return bindings.get(key, None)
|
||||||
|
|
||||||
def bind(self, key, command, *, mode, save_yaml=False):
|
def bind(self, key, command, *, mode, save_yaml=False):
|
||||||
|
@ -73,6 +73,9 @@ def cmdutils_stub(monkeypatch, stubs):
|
|||||||
name='scroll',
|
name='scroll',
|
||||||
desc='Scroll the current tab in the given direction.',
|
desc='Scroll the current tab in the given direction.',
|
||||||
modes=()),
|
modes=()),
|
||||||
|
'tab-close': stubs.FakeCommand(
|
||||||
|
name='tab-close',
|
||||||
|
desc='Close the current tab.'),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -101,9 +104,10 @@ def configdata_stub(monkeypatch, configdata_init):
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
default={
|
default={
|
||||||
'normal': {
|
'normal': collections.OrderedDict([
|
||||||
'<ctrl+q>': 'quit'
|
('<ctrl+q>', 'quit'),
|
||||||
}
|
('d', 'tab-close'),
|
||||||
|
])
|
||||||
},
|
},
|
||||||
backends=[],
|
backends=[],
|
||||||
raw_backends=None)),
|
raw_backends=None)),
|
||||||
@ -122,6 +126,7 @@ def configdata_stub(monkeypatch, configdata_init):
|
|||||||
('<ctrl+q>', 'quit'),
|
('<ctrl+q>', 'quit'),
|
||||||
('ZQ', 'quit'),
|
('ZQ', 'quit'),
|
||||||
('I', 'invalid'),
|
('I', 'invalid'),
|
||||||
|
('d', 'scroll down'),
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
backends=[],
|
backends=[],
|
||||||
@ -209,6 +214,7 @@ def test_command_completion(qtmodeltester, cmdutils_stub, configdata_stub,
|
|||||||
('open', 'open a url', ''),
|
('open', 'open a url', ''),
|
||||||
('q', "Alias for 'quit'", ''),
|
('q', "Alias for 'quit'", ''),
|
||||||
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
||||||
|
('tab-close', 'Close the current tab.', ''),
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -233,7 +239,8 @@ def test_help_completion(qtmodeltester, cmdutils_stub, key_config_stub,
|
|||||||
"Commands": [
|
"Commands": [
|
||||||
(':open', 'open a url', ''),
|
(':open', 'open a url', ''),
|
||||||
(':quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
(':quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
||||||
(':scroll', 'Scroll the current tab in the given direction.', '')
|
(':scroll', 'Scroll the current tab in the given direction.', ''),
|
||||||
|
(':tab-close', 'Close the current tab.', ''),
|
||||||
],
|
],
|
||||||
"Settings": [
|
"Settings": [
|
||||||
('aliases', 'Aliases for commands.', None),
|
('aliases', 'Aliases for commands.', None),
|
||||||
@ -566,9 +573,9 @@ def test_setting_option_completion(qtmodeltester, config_stub,
|
|||||||
('aliases', 'Aliases for commands.', '{"q": "quit"}'),
|
('aliases', 'Aliases for commands.', '{"q": "quit"}'),
|
||||||
('bindings.commands', 'Default keybindings',
|
('bindings.commands', 'Default keybindings',
|
||||||
'{"normal": {"<ctrl+q>": "quit", "ZQ": "quit", '
|
'{"normal": {"<ctrl+q>": "quit", "ZQ": "quit", '
|
||||||
'"I": "invalid"}}'),
|
'"I": "invalid", "d": "scroll down"}}'),
|
||||||
('bindings.default', 'Default keybindings',
|
('bindings.default', 'Default keybindings',
|
||||||
'{"normal": {"<ctrl+q>": "quit"}}'),
|
'{"normal": {"<ctrl+q>": "quit", "d": "tab-close"}}'),
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -589,14 +596,15 @@ def test_bind_completion(qtmodeltester, cmdutils_stub, config_stub,
|
|||||||
qtmodeltester.check(model)
|
qtmodeltester.check(model)
|
||||||
|
|
||||||
_check_completions(model, {
|
_check_completions(model, {
|
||||||
"Current": [
|
"Current/Default": [
|
||||||
('quit', 'quit qutebrowser', 'ZQ'),
|
('quit', '(Current) quit qutebrowser', 'ZQ'),
|
||||||
],
|
],
|
||||||
"Commands": [
|
"Commands": [
|
||||||
('open', 'open a url', ''),
|
('open', 'open a url', ''),
|
||||||
('q', "Alias for 'quit'", ''),
|
('q', "Alias for 'quit'", ''),
|
||||||
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
||||||
('scroll', 'Scroll the current tab in the given direction.', '')
|
('scroll', 'Scroll the current tab in the given direction.', ''),
|
||||||
|
('tab-close', 'Close the current tab.', ''),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -608,21 +616,22 @@ def test_bind_completion_invalid(cmdutils_stub, config_stub, key_config_stub,
|
|||||||
model.set_pattern('')
|
model.set_pattern('')
|
||||||
|
|
||||||
_check_completions(model, {
|
_check_completions(model, {
|
||||||
"Current": [
|
"Current/Default": [
|
||||||
('invalid', 'Invalid command!', 'I'),
|
('invalid', '(Current) Invalid command!', 'I'),
|
||||||
],
|
],
|
||||||
"Commands": [
|
"Commands": [
|
||||||
('open', 'open a url', ''),
|
('open', 'open a url', ''),
|
||||||
('q', "Alias for 'quit'", ''),
|
('q', "Alias for 'quit'", ''),
|
||||||
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
||||||
('scroll', 'Scroll the current tab in the given direction.', '')
|
('scroll', 'Scroll the current tab in the given direction.', ''),
|
||||||
|
('tab-close', 'Close the current tab.', ''),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
def test_bind_completion_no_current(qtmodeltester, cmdutils_stub, config_stub,
|
def test_bind_completion_no_binding(qtmodeltester, cmdutils_stub, config_stub,
|
||||||
key_config_stub, configdata_stub, info):
|
key_config_stub, configdata_stub, info):
|
||||||
"""Test keybinding completion with no current binding."""
|
"""Test keybinding completion with no current or default binding."""
|
||||||
model = configmodel.bind('x', info=info)
|
model = configmodel.bind('x', info=info)
|
||||||
model.set_pattern('')
|
model.set_pattern('')
|
||||||
qtmodeltester.data_display_may_return_none = True
|
qtmodeltester.data_display_may_return_none = True
|
||||||
@ -633,7 +642,30 @@ def test_bind_completion_no_current(qtmodeltester, cmdutils_stub, config_stub,
|
|||||||
('open', 'open a url', ''),
|
('open', 'open a url', ''),
|
||||||
('q', "Alias for 'quit'", ''),
|
('q', "Alias for 'quit'", ''),
|
||||||
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
||||||
('scroll', 'Scroll the current tab in the given direction.', '')
|
('scroll', 'Scroll the current tab in the given direction.', ''),
|
||||||
|
('tab-close', 'Close the current tab.', ''),
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def test_bind_completion_changed(cmdutils_stub, config_stub, key_config_stub,
|
||||||
|
configdata_stub, info):
|
||||||
|
"""Test command completion with a non-default command bound."""
|
||||||
|
model = configmodel.bind('d', info=info)
|
||||||
|
model.set_pattern('')
|
||||||
|
|
||||||
|
_check_completions(model, {
|
||||||
|
"Current/Default": [
|
||||||
|
('scroll down',
|
||||||
|
'(Current) Scroll the current tab in the given direction.', 'd'),
|
||||||
|
('tab-close', '(Default) Close the current tab.', 'd'),
|
||||||
|
],
|
||||||
|
"Commands": [
|
||||||
|
('open', 'open a url', ''),
|
||||||
|
('q', "Alias for 'quit'", ''),
|
||||||
|
('quit', 'quit qutebrowser', 'ZQ, <ctrl+q>'),
|
||||||
|
('scroll', 'Scroll the current tab in the given direction.', ''),
|
||||||
|
('tab-close', 'Close the current tab.', ''),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user