diff --git a/terminatorlib/notebook.py b/terminatorlib/notebook.py index 9dcd4d13..584d14d6 100755 --- a/terminatorlib/notebook.py +++ b/terminatorlib/notebook.py @@ -118,7 +118,8 @@ class Notebook(Container, gtk.Notebook): 'group-all': top_window.group_all, 'ungroup-all': top_window.ungroup_all, 'group-tab': top_window.group_tab, - 'ungroup-tab': top_window.ungroup_tab} + 'ungroup-tab': top_window.ungroup_tab, + 'move-tab': top_window.move_tab} if maker.isinstance(widget, 'Terminal'): for signal in signals: diff --git a/terminatorlib/paned.py b/terminatorlib/paned.py index 1275c3f5..c7ce090c 100755 --- a/terminatorlib/paned.py +++ b/terminatorlib/paned.py @@ -90,6 +90,7 @@ class Paned(Container): 'ungroup-all': top_window.ungroup_all, 'group-tab': top_window.group_tab, 'ungroup-tab': top_window.ungroup_tab, + 'move-tab': top_window.move_tab, 'maximise': [top_window.zoom, False]} for signal in signals: diff --git a/terminatorlib/terminal.py b/terminatorlib/terminal.py index a0a442fb..889615ba 100755 --- a/terminatorlib/terminal.py +++ b/terminatorlib/terminal.py @@ -1223,11 +1223,9 @@ for %s (%s)' % (name, urlplugin.__class__.__name__)) def key_resize_right(self): self.emit('resize-term', 'right') - # FIXME: Nothing currently handles this signal. Make it so something does. def key_move_tab_right(self): self.emit('move-tab', 'right') - # FIXME: Nothing currently handles this signal. Make it so something does. def key_move_tab_left(self): self.emit('move-tab', 'left') diff --git a/terminatorlib/window.py b/terminatorlib/window.py index 0ae8c480..5d58241f 100755 --- a/terminatorlib/window.py +++ b/terminatorlib/window.py @@ -258,7 +258,8 @@ class Window(Container, gtk.Window): 'group-all': self.group_all, 'ungroup-all': self.ungroup_all, 'group-tab': self.group_tab, - 'ungroup-tab': self.ungroup_tab} + 'ungroup-tab': self.ungroup_tab, + 'move-tab': self.move_tab} for signal in signals: self.connect_child(widget, signal, signals[signal]) @@ -405,6 +406,8 @@ class Window(Container, gtk.Window): pages = child.get_n_pages() if cur == pages - 1: num = 0 + else: + num = cur + 1 elif num == -2: # Go to the previous tab cur = child.get_current_page() @@ -463,6 +466,36 @@ class Window(Container, gtk.Window): for terminal in self.get_visible_terminals(): terminal.set_group(None, None) + def move_tab(self, widget, direction): + """Handle a keyboard shortcut for moving tab positions""" + maker = Factory() + notebook = self.get_child() + + if not maker.isinstance(notebook, 'Notebook'): + dbg('not in a notebook, refusing to move tab %s' % direction) + return + + dbg('moving tab %s' % direction) + numpages = notebook.get_n_pages() + page = notebook.get_current_page() + child = notebook.get_nth_page(page) + + if direction == 'left': + if page == 0: + page = numpages + else: + page = page - 1 + elif direction == 'right': + if page == numpages - 1: + page = 0 + else: + page = page + 1 + else: + err('unknown direction: %s' % direction) + return + + notebook.reorder_child(child, page) + class WindowTitle(object): """Class to handle the setting of the window title"""