diff options
Diffstat (limited to 'qutebrowser/keyinput/keyutils.py')
-rw-r--r-- | qutebrowser/keyinput/keyutils.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/qutebrowser/keyinput/keyutils.py b/qutebrowser/keyinput/keyutils.py index 91d6a36a3..dfe4fb3ff 100644 --- a/qutebrowser/keyinput/keyutils.py +++ b/qutebrowser/keyinput/keyutils.py @@ -321,6 +321,10 @@ class KeyInfo: """Get a QKeyEvent from this KeyInfo.""" return QKeyEvent(typ, self.key, self.modifiers, self.text()) + def to_int(self): + """Get the key as an integer (with key/modifiers).""" + return int(self.key) | int(self.modifiers) + class KeySequence: @@ -495,6 +499,18 @@ class KeySequence: return self.__class__(*keys) + def with_mappings(self, mappings): + """Get a new KeySequence with the given mappings applied.""" + keys = [] + for key in self._iter_keys(): + key_seq = KeySequence(key) + if key_seq in mappings: + new_seq = mappings[key_seq] + assert len(new_seq) == 1 + key = new_seq[0].to_int() + keys.append(key) + return self.__class__(*keys) + @classmethod def parse(cls, keystr): """Parse a keystring like <Ctrl-x> or xyz and return a KeySequence.""" |