From 0a6acc19dc4ca47dcd8cd75d0a4b3465e1c145de Mon Sep 17 00:00:00 2001 From: Thomas Hurst Date: Sat, 23 Aug 2008 23:57:51 +0100 Subject: [PATCH 1/2] 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 From cac821f58a316a2cffa9c3a141ffe2fa60313e35 Mon Sep 17 00:00:00 2001 From: Thomas Hurst Date: Sun, 24 Aug 2008 07:39:49 +0100 Subject: [PATCH 2/2] Add a demo font selection button and a spin button for scrollback --- terminatorlib/prefs_profile.py | 36 +++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/terminatorlib/prefs_profile.py b/terminatorlib/prefs_profile.py index cbd541f4..3387bc4e 100644 --- a/terminatorlib/prefs_profile.py +++ b/terminatorlib/prefs_profile.py @@ -29,18 +29,32 @@ class ProfileEditor: value = Defaults[key] widget = None - if type == "bool": - widget = gtk.CheckButton () - widget.set_active (value) - elif type in ["str", "int", "float"]: - widget = gtk.Entry () - widget.set_text (str(value)) - elif type == "list": - continue + if key == 'font': + #widget = gtk.FontSelection() + #widget.set_preview_text("Terminator: The robot future of terminals") + #widget.set_font_name(value) + widget = gtk.FontButton(value) + elif key == 'scrollback_lines': + # estimated byte size per line according to g-t: + # sizeof(void *) + sizeof(char *) + sizeof(int) + (80 * (sizeof(int32) + 4) + widget = gtk.SpinButton() + widget.set_digits(0) + widget.set_increments(100, 1000) + widget.set_range(0, 100000) + widget.set_value(value) else: - print "Unknown type: " + type - continue - + if type == "bool": + widget = gtk.CheckButton () + widget.set_active (value) + elif type in ["str", "int", "float"]: + widget = gtk.Entry () + widget.set_text (str(value)) + elif type == "list": + continue + else: + print "Unknown type: " + type + continue + table.attach (label, 0, 1, row, row + 1) table.attach (widget, 1, 2, row, row + 1) row += 1