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