From 0a6acc19dc4ca47dcd8cd75d0a4b3465e1c145de Mon Sep 17 00:00:00 2001 From: Thomas Hurst Date: Sat, 23 Aug 2008 23:57:51 +0100 Subject: [PATCH] Ctrl-Tab and Ctrl-Shift-Tab are actually valid keybindings. Teach keybindings.py that some items may have more than one keybinding by supporting optional tuples in defaults. --- terminatorlib/config.py | 4 +-- terminatorlib/keybindings.py | 48 +++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/terminatorlib/config.py b/terminatorlib/config.py index 7e21c98d..96861dd9 100755 --- a/terminatorlib/config.py +++ b/terminatorlib/config.py @@ -105,8 +105,8 @@ Defaults = { 'zoom_normal' : '0', 'new_root_tab' : 'T', 'new_tab' : 'T', - 'go_next' : 'N', - 'go_prev' : 'P', + 'go_next' : ('N','Tab'), + 'go_prev' : ('P','Tab'), 'split_horiz' : 'O', 'split_vert' : 'E', 'close_term' : 'W', diff --git a/terminatorlib/keybindings.py b/terminatorlib/keybindings.py index 79f1ecf0..ea7c0e6b 100644 --- a/terminatorlib/keybindings.py +++ b/terminatorlib/keybindings.py @@ -32,29 +32,33 @@ class TerminatorKeybindings: def reload(self): self._lookup = {} self._masks = 0 - for action, binding in self.keys.items(): - try: - keyval, mask = self._parsebinding(binding) - #keyval, mask = gtk.accelerator_parse(binding) - #mask = int(mask) - except KeymapError, e: - e.action = action - raise e - else: - if mask & gtk.gdk.SHIFT_MASK: - if keyval == gtk.keysyms.Tab: - keyval = gtk.keysyms.ISO_Left_Tab - mask &= ~gtk.gdk.SHIFT_MASK - else: - keyvals = gtk.gdk.keyval_convert_case(keyval) - if keyvals[0] != keyvals[1]: - keyval = keyvals[1] - mask &= ~gtk.gdk.SHIFT_MASK + for action, bindings in self.keys.items(): + if not isinstance(bindings, tuple): + bindings = (bindings,) + + for binding in bindings: + try: + keyval, mask = self._parsebinding(binding) + # Does much the same, but with poorer error handling. + #keyval, mask = gtk.accelerator_parse(binding) + except KeymapError, e: + e.action = action + raise e else: - keyval = gtk.gdk.keyval_to_lower(keyval) - self._lookup.setdefault(mask, {}) - self._lookup[mask][keyval] = action - self._masks |= mask + if mask & gtk.gdk.SHIFT_MASK: + if keyval == gtk.keysyms.Tab: + keyval = gtk.keysyms.ISO_Left_Tab + mask &= ~gtk.gdk.SHIFT_MASK + else: + keyvals = gtk.gdk.keyval_convert_case(keyval) + if keyvals[0] != keyvals[1]: + keyval = keyvals[1] + mask &= ~gtk.gdk.SHIFT_MASK + else: + keyval = gtk.gdk.keyval_to_lower(keyval) + self._lookup.setdefault(mask, {}) + self._lookup[mask][keyval] = action + self._masks |= mask def _parsebinding(self, binding): mask = 0