From 4284cf67eefb65f23331b80c928804c3596a7c6c Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Mon, 9 Nov 2009 22:33:17 +0000 Subject: [PATCH] Start making some navigation work --- terminatorlib/config.py | 2 ++ terminatorlib/newterminator.py | 37 +++++++++++++++++++++++++++------- terminatorlib/terminal.py | 25 +++++++++++------------ 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/terminatorlib/config.py b/terminatorlib/config.py index 2a078637..a3395743 100755 --- a/terminatorlib/config.py +++ b/terminatorlib/config.py @@ -91,6 +91,8 @@ DEFAULTS = { 'hide_tabbar' : False, 'scroll_tabbar' : False, 'alternate_screen_scroll': True, + 'split_to_group' : False, + 'autoclean_groups' : True, 'keybindings' : { 'zoom_in' : 'plus', 'zoom_out' : 'minus', diff --git a/terminatorlib/newterminator.py b/terminatorlib/newterminator.py index cf6be427..6eaf30e6 100755 --- a/terminatorlib/newterminator.py +++ b/terminatorlib/newterminator.py @@ -17,8 +17,6 @@ class Terminator(Borg): config = None keybindings = None - splittogroup = None - autocleangroups = None groupsend = None groupsend_type = {'all':0, 'group':1, 'off':2} @@ -37,10 +35,6 @@ class Terminator(Borg): self.groups = [] if not self.groupsend: self.groupsend = self.groupsend_type['group'] - if not self.splittogroup: - self.splittogroup = False - if not self.autocleangroups: - self.autocleangroups = True if not self.config: self.config = Config() if not self.keybindings: @@ -51,6 +45,7 @@ class Terminator(Borg): """Register a new terminal widget""" self.terminals.append(terminal) terminal.connect('ungroup-all', self.ungroup_all) + terminal.connect('navigate', self.navigate_terminal) def deregister_terminal(self, terminal): """De-register a terminal widget""" @@ -63,6 +58,34 @@ class Terminator(Borg): for terminal in self.terminals: terminal.reconfigure() + def navigate_terminal(self, terminal, direction): + """Nagivate around the terminals""" + current = self.terminals.index(terminal) + length = len(self.terminals) + next = None + + if length <= 1: + return + + print "Current term: %d" % current + print "Number of terms: %d" % length + + if direction == 'next': + next = current + 1 + if next >= length: + next = 0 + elif direction == 'prev': + next = current - 1 + if next < 0: + next = length - 1 + else: + raise NotImplementedError + # FIXME: Do the directional navigation + + if next is not None: + print "sending focus to term %d" % next + self.terminals[next].vte.grab_focus() + def create_group(self, name): """Create a new group""" if name not in self.groups: @@ -83,7 +106,7 @@ class Terminator(Borg): def group_hoover(self): """Clean out unused groups""" - if self.autocleangroups: + if self.config['autoclean_groups']: todestroy = [] for group in self.groups: for terminal in self.terminals: diff --git a/terminatorlib/terminal.py b/terminatorlib/terminal.py index 7b594123..1f67b421 100755 --- a/terminatorlib/terminal.py +++ b/terminatorlib/terminal.py @@ -51,6 +51,8 @@ class Terminal(gtk.VBox): 'maximise': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()), 'resize-term': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)), + 'navigate': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, + (gobject.TYPE_STRING,)), } TARGET_TYPE_VTE = 8 @@ -343,12 +345,12 @@ class Terminal(gtk.VBox): menu.append(gtk.MenuItem()) item = gtk.CheckMenuItem(_('Split to this group')) - item.set_active(self.terminator.splittogroup) + item.set_active(self.config['split_to_group']) item.connect('toggled', lambda x: self.do_splittogroup_toggle()) menu.append(item) item = gtk.CheckMenuItem(_('Autoclean groups')) - item.set_active(self.terminator.autocleangroups) + item.set_active(self.config['autoclean_groups']) item.connect('toggled', lambda x: self.do_autocleangroups_toggle()) menu.append(item) @@ -417,19 +419,16 @@ class Terminal(gtk.VBox): def do_splittogroup_toggle(self): """Toggle the splittogroup mode""" - # FIXME: Can we think of a smarter way of doing this than poking? - self.terminator.splittogroup = not self.terminator.splittogroup + self.config['split_to_group'] = not self.config['split_to_group'] def do_autocleangroups_toggle(self): """Toggle the autocleangroups mode""" - # FIXME: Can we think of a smarter way of doing this than poking? - self.terminator.autocleangroups = not self.terminator.autocleangroups + self.config['autoclean_groups'] = not self.config['autoclean_groups'] def reconfigure(self, widget=None): """Reconfigure our settings""" dbg('Terminal::reconfigure') if self.cnxid: - dbg('Terminal::reconfigure: disconnecting') self.vte.disconnect(self.cnxid) self.cnxid = None @@ -880,22 +879,22 @@ class Terminal(gtk.VBox): self.terminator.newtab (self, True) def key_go_next(self): - self.terminator.go_next (self) + self.emit('navigate', 'next') def key_go_prev(self): - self.terminator.go_prev (self) + self.emit('navigate', 'prev') def key_go_up(self): - self.terminator.go_up (self) + self.emit('navigate', 'up') def key_go_down(self): - self.terminator.go_down (self) + self.emit('navigate', 'down') def key_go_left(self): - self.terminator.go_left (self) + self.emit('navigate', 'left') def key_go_right(self): - self.terminator.go_right (self) + self.emit('navigate', 'right') def key_split_horiz(self): self.emit('split-horiz')