Start making some navigation work

This commit is contained in:
Chris Jones 2009-11-09 22:33:17 +00:00
parent 5dd6ae0154
commit 4284cf67ee
3 changed files with 44 additions and 20 deletions

View File

@ -91,6 +91,8 @@ DEFAULTS = {
'hide_tabbar' : False, 'hide_tabbar' : False,
'scroll_tabbar' : False, 'scroll_tabbar' : False,
'alternate_screen_scroll': True, 'alternate_screen_scroll': True,
'split_to_group' : False,
'autoclean_groups' : True,
'keybindings' : { 'keybindings' : {
'zoom_in' : '<Ctrl>plus', 'zoom_in' : '<Ctrl>plus',
'zoom_out' : '<Ctrl>minus', 'zoom_out' : '<Ctrl>minus',

View File

@ -17,8 +17,6 @@ class Terminator(Borg):
config = None config = None
keybindings = None keybindings = None
splittogroup = None
autocleangroups = None
groupsend = None groupsend = None
groupsend_type = {'all':0, 'group':1, 'off':2} groupsend_type = {'all':0, 'group':1, 'off':2}
@ -37,10 +35,6 @@ class Terminator(Borg):
self.groups = [] self.groups = []
if not self.groupsend: if not self.groupsend:
self.groupsend = self.groupsend_type['group'] self.groupsend = self.groupsend_type['group']
if not self.splittogroup:
self.splittogroup = False
if not self.autocleangroups:
self.autocleangroups = True
if not self.config: if not self.config:
self.config = Config() self.config = Config()
if not self.keybindings: if not self.keybindings:
@ -51,6 +45,7 @@ class Terminator(Borg):
"""Register a new terminal widget""" """Register a new terminal widget"""
self.terminals.append(terminal) self.terminals.append(terminal)
terminal.connect('ungroup-all', self.ungroup_all) terminal.connect('ungroup-all', self.ungroup_all)
terminal.connect('navigate', self.navigate_terminal)
def deregister_terminal(self, terminal): def deregister_terminal(self, terminal):
"""De-register a terminal widget""" """De-register a terminal widget"""
@ -63,6 +58,34 @@ class Terminator(Borg):
for terminal in self.terminals: for terminal in self.terminals:
terminal.reconfigure() 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): def create_group(self, name):
"""Create a new group""" """Create a new group"""
if name not in self.groups: if name not in self.groups:
@ -83,7 +106,7 @@ class Terminator(Borg):
def group_hoover(self): def group_hoover(self):
"""Clean out unused groups""" """Clean out unused groups"""
if self.autocleangroups: if self.config['autoclean_groups']:
todestroy = [] todestroy = []
for group in self.groups: for group in self.groups:
for terminal in self.terminals: for terminal in self.terminals:

View File

@ -51,6 +51,8 @@ class Terminal(gtk.VBox):
'maximise': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()), 'maximise': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
'resize-term': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, 'resize-term': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
(gobject.TYPE_STRING,)), (gobject.TYPE_STRING,)),
'navigate': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
(gobject.TYPE_STRING,)),
} }
TARGET_TYPE_VTE = 8 TARGET_TYPE_VTE = 8
@ -343,12 +345,12 @@ class Terminal(gtk.VBox):
menu.append(gtk.MenuItem()) menu.append(gtk.MenuItem())
item = gtk.CheckMenuItem(_('Split to this group')) 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()) item.connect('toggled', lambda x: self.do_splittogroup_toggle())
menu.append(item) menu.append(item)
item = gtk.CheckMenuItem(_('Autoclean groups')) 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()) item.connect('toggled', lambda x: self.do_autocleangroups_toggle())
menu.append(item) menu.append(item)
@ -417,19 +419,16 @@ class Terminal(gtk.VBox):
def do_splittogroup_toggle(self): def do_splittogroup_toggle(self):
"""Toggle the splittogroup mode""" """Toggle the splittogroup mode"""
# FIXME: Can we think of a smarter way of doing this than poking? self.config['split_to_group'] = not self.config['split_to_group']
self.terminator.splittogroup = not self.terminator.splittogroup
def do_autocleangroups_toggle(self): def do_autocleangroups_toggle(self):
"""Toggle the autocleangroups mode""" """Toggle the autocleangroups mode"""
# FIXME: Can we think of a smarter way of doing this than poking? self.config['autoclean_groups'] = not self.config['autoclean_groups']
self.terminator.autocleangroups = not self.terminator.autocleangroups
def reconfigure(self, widget=None): def reconfigure(self, widget=None):
"""Reconfigure our settings""" """Reconfigure our settings"""
dbg('Terminal::reconfigure') dbg('Terminal::reconfigure')
if self.cnxid: if self.cnxid:
dbg('Terminal::reconfigure: disconnecting')
self.vte.disconnect(self.cnxid) self.vte.disconnect(self.cnxid)
self.cnxid = None self.cnxid = None
@ -880,22 +879,22 @@ class Terminal(gtk.VBox):
self.terminator.newtab (self, True) self.terminator.newtab (self, True)
def key_go_next(self): def key_go_next(self):
self.terminator.go_next (self) self.emit('navigate', 'next')
def key_go_prev(self): def key_go_prev(self):
self.terminator.go_prev (self) self.emit('navigate', 'prev')
def key_go_up(self): def key_go_up(self):
self.terminator.go_up (self) self.emit('navigate', 'up')
def key_go_down(self): def key_go_down(self):
self.terminator.go_down (self) self.emit('navigate', 'down')
def key_go_left(self): def key_go_left(self):
self.terminator.go_left (self) self.emit('navigate', 'left')
def key_go_right(self): def key_go_right(self):
self.terminator.go_right (self) self.emit('navigate', 'right')
def key_split_horiz(self): def key_split_horiz(self):
self.emit('split-horiz') self.emit('split-horiz')