Refactor KeyInfo.__str__
This removes the special handling for macOS, but this is hopefully not needed anymore as we don't compare strings.
This commit is contained in:
parent
af6e5b1838
commit
693178c8ee
@ -203,54 +203,26 @@ class KeyInfo:
|
|||||||
A name of the key (combination) as a string or
|
A name of the key (combination) as a string or
|
||||||
an empty string if only modifiers are pressed.
|
an empty string if only modifiers are pressed.
|
||||||
"""
|
"""
|
||||||
if utils.is_mac:
|
|
||||||
# Qt swaps Ctrl/Meta on macOS, so we switch it back here so the
|
|
||||||
# user can use it in the config as expected. See:
|
|
||||||
# https://github.com/qutebrowser/qutebrowser/issues/110
|
|
||||||
# http://doc.qt.io/qt-5.4/osx-issues.html#special-keys
|
|
||||||
modmask2str = collections.OrderedDict([
|
|
||||||
(Qt.MetaModifier, 'Ctrl'),
|
|
||||||
(Qt.AltModifier, 'Alt'),
|
|
||||||
(Qt.ControlModifier, 'Meta'),
|
|
||||||
(Qt.ShiftModifier, 'Shift'),
|
|
||||||
])
|
|
||||||
else:
|
|
||||||
modmask2str = collections.OrderedDict([
|
|
||||||
(Qt.ControlModifier, 'Ctrl'),
|
|
||||||
(Qt.AltModifier, 'Alt'),
|
|
||||||
(Qt.MetaModifier, 'Meta'),
|
|
||||||
(Qt.ShiftModifier, 'Shift'),
|
|
||||||
])
|
|
||||||
|
|
||||||
if is_modifier_key(self.key):
|
if is_modifier_key(self.key):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
parts = []
|
|
||||||
|
|
||||||
for (mask, s) in modmask2str.items():
|
|
||||||
if self.modifiers & mask and s not in parts:
|
|
||||||
parts.append(s)
|
|
||||||
|
|
||||||
key_string = _key_to_string(self.key)
|
key_string = _key_to_string(self.key)
|
||||||
|
|
||||||
if is_printable(self.key):
|
if is_printable(self.key):
|
||||||
# FIXME Add a test to make sure Tab doesn;t become TAB
|
# "normal" binding
|
||||||
|
# FIXME Add a test to make sure Tab doesn't become TAB
|
||||||
assert len(key_string) == 1 or self.key == Qt.Key_Space, key_string
|
assert len(key_string) == 1 or self.key == Qt.Key_Space, key_string
|
||||||
if self.modifiers == Qt.ShiftModifier:
|
if self.modifiers == Qt.ShiftModifier:
|
||||||
parts = []
|
return key_string.upper()
|
||||||
key_string = key_string.upper()
|
elif self.modifiers == Qt.NoModifier:
|
||||||
|
return key_string.lower()
|
||||||
else:
|
else:
|
||||||
|
# Use special binding syntax, but <Ctrl-a> instead of <Ctrl-A>
|
||||||
key_string = key_string.lower()
|
key_string = key_string.lower()
|
||||||
|
|
||||||
parts.append(key_string)
|
# "special" binding
|
||||||
part_string = '+'.join(parts)
|
modifier_string = QKeySequence(self.modifiers).toString()
|
||||||
|
return '<{}{}>'.format(modifier_string, key_string)
|
||||||
if len(part_string) > 1:
|
|
||||||
# "special" binding
|
|
||||||
return '<{}>'.format(part_string)
|
|
||||||
else:
|
|
||||||
# "normal" binding
|
|
||||||
return part_string
|
|
||||||
|
|
||||||
def text(self):
|
def text(self):
|
||||||
"""Get the text which would be displayed when pressing this key."""
|
"""Get the text which would be displayed when pressing this key."""
|
||||||
|
@ -138,13 +138,7 @@ class TestKeyEventToString:
|
|||||||
key=Qt.Key_A, modifiers=(Qt.ControlModifier | Qt.AltModifier |
|
key=Qt.Key_A, modifiers=(Qt.ControlModifier | Qt.AltModifier |
|
||||||
Qt.MetaModifier | Qt.ShiftModifier))
|
Qt.MetaModifier | Qt.ShiftModifier))
|
||||||
s = str(keyutils.KeyInfo.from_event(evt))
|
s = str(keyutils.KeyInfo.from_event(evt))
|
||||||
assert s == '<Ctrl+Alt+Meta+Shift+a>'
|
assert s == '<Meta+Ctrl+Alt+Shift+a>'
|
||||||
|
|
||||||
@pytest.mark.fake_os('mac')
|
|
||||||
def test_mac(self, fake_keyevent_factory):
|
|
||||||
"""Test with a simulated mac."""
|
|
||||||
evt = fake_keyevent_factory(key=Qt.Key_A, modifiers=Qt.ControlModifier)
|
|
||||||
assert str(keyutils.KeyInfo.from_event(evt)) == '<Meta+a>'
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('keystr, expected', [
|
@pytest.mark.parametrize('keystr, expected', [
|
||||||
|
Loading…
Reference in New Issue
Block a user