enhancing tabs
** reordering tabs change term_list accordingly (almost though... think there is still a bug there) ** Ctrl-Shift-PageUp/PageDown will shift the first parent tab to the left/right (g-t like)
This commit is contained in:
parent
9d72385231
commit
ac77dc6783
90
terminator
90
terminator
|
@ -612,6 +612,12 @@ text/plain
|
||||||
elif keyname in ('Up', 'Down', 'Left', 'Right'):
|
elif keyname in ('Up', 'Down', 'Left', 'Right'):
|
||||||
self.terminator.resizeterm (self, keyname)
|
self.terminator.resizeterm (self, keyname)
|
||||||
return (True)
|
return (True)
|
||||||
|
elif keyname == 'Page_Down':
|
||||||
|
self.terminator.move_tab(self, 'right')
|
||||||
|
return (True)
|
||||||
|
elif keyname == 'Page_Up':
|
||||||
|
self.terminator.move_tab(self, 'left')
|
||||||
|
return (True)
|
||||||
|
|
||||||
mask = gtk.gdk.CONTROL_MASK
|
mask = gtk.gdk.CONTROL_MASK
|
||||||
if (event.state & mask) == mask:
|
if (event.state & mask) == mask:
|
||||||
|
@ -1002,6 +1008,7 @@ class Terminator:
|
||||||
parent.insert_page(pane, None, page)
|
parent.insert_page(pane, None, page)
|
||||||
parent.set_tab_label_text(pane, widget._vte.get_window_title())
|
parent.set_tab_label_text(pane, widget._vte.get_window_title())
|
||||||
parent.set_tab_label_packing(pane, True, True, gtk.PACK_START)
|
parent.set_tab_label_packing(pane, True, True, gtk.PACK_START)
|
||||||
|
parent.set_tab_reorderable(pane, True)
|
||||||
parent.set_current_page(page)
|
parent.set_current_page(page)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1046,9 +1053,69 @@ class Terminator:
|
||||||
return (terminal)
|
return (terminal)
|
||||||
|
|
||||||
def on_page_reordered(self, notebook, child, page_num):
|
def on_page_reordered(self, notebook, child, page_num):
|
||||||
|
#page has been reordered, we need to get the
|
||||||
|
# first term and last term
|
||||||
dbg ("Reordered: %d"%page_num)
|
dbg ("Reordered: %d"%page_num)
|
||||||
|
nbpages = notebook.get_n_pages()
|
||||||
|
if nbpages == 1:
|
||||||
|
dbg("[ERROR] only one page in on_page_reordered")
|
||||||
|
|
||||||
|
first = self._notebook_first_term(notebook.get_nth_page(page_num))
|
||||||
|
last = self._notebook_last_term(notebook.get_nth_page(page_num))
|
||||||
|
firstidx = self.term_list.index(first)
|
||||||
|
lastidx = self.term_list.index(last)
|
||||||
|
termslice = self.term_list[firstidx:lastidx+1]
|
||||||
|
#remove them from the list
|
||||||
|
for term in termslice:
|
||||||
|
self.term_list.remove(term)
|
||||||
|
|
||||||
|
if page_num == 0:
|
||||||
|
#first page, we insert before the first term of next page
|
||||||
|
nexttab = notebook.get_nth_page(1)
|
||||||
|
sibling = self._notebook_first_term(nexttab)
|
||||||
|
siblingindex = self.term_list.index(sibling)
|
||||||
|
for term in termslice:
|
||||||
|
self.term_list.insert(siblingindex, term)
|
||||||
|
siblingindex += 1
|
||||||
|
else:
|
||||||
|
#other pages, we insert after the last term of previous page
|
||||||
|
previoustab = notebook.get_nth_page(page_num - 1)
|
||||||
|
sibling = self._notebook_last_term(previoustab)
|
||||||
|
print sibling
|
||||||
|
siblingindex = self.term_list.index(sibling)
|
||||||
|
for term in termslice:
|
||||||
|
siblingindex += 1
|
||||||
|
self.term_list.insert(siblingindex, term)
|
||||||
|
|
||||||
|
#for page reorder, we need to get the first term of a notebook
|
||||||
|
def notebook_first_term(self, notebook):
|
||||||
|
return self._notebook_first_term(notebook.get_nth_page(0))
|
||||||
|
|
||||||
|
def _notebook_first_term(self, child):
|
||||||
|
if isinstance(child, TerminatorTerm):
|
||||||
|
return child
|
||||||
|
elif isinstance(child, gtk.Paned):
|
||||||
|
return self._notebook_first_term(child.get_child1())
|
||||||
|
elif isinstance(child, gtk.Notebook):
|
||||||
|
return self._notebook_first_term(child.get_nth_page(0))
|
||||||
|
|
||||||
|
dbg("[ERROR] unsupported class %s in _notebook_first_term" % child.__class__.__name__)
|
||||||
|
return None
|
||||||
|
|
||||||
|
#for page reorder, we need to get the last term of a notebook
|
||||||
|
def notebook_last_term(self, notebook):
|
||||||
|
return self._notebook_last_term(notebook.get_nth_page(notebook.get_n_pages()-1))
|
||||||
|
|
||||||
|
def _notebook_last_term(self, child):
|
||||||
|
if isinstance(child, TerminatorTerm):
|
||||||
|
return child
|
||||||
|
elif isinstance(child, gtk.Paned):
|
||||||
|
return self._notebook_first_term(child.get_child2())
|
||||||
|
elif isinstance(child, gtk.Notebook):
|
||||||
|
return self._notebook_first_term(child.get_nth_page(child.get_n_pages()-1))
|
||||||
|
|
||||||
|
dbg("[ERROR] unsupported class %s in _notebook_last_term" % child.__class__.__name__)
|
||||||
|
return None
|
||||||
|
|
||||||
def newtab(self,widget):
|
def newtab(self,widget):
|
||||||
terminal = TerminatorTerm (self, self.profile, None, widget.get_cwd())
|
terminal = TerminatorTerm (self, self.profile, None, widget.get_cwd())
|
||||||
|
@ -1057,6 +1124,7 @@ class Terminator:
|
||||||
if isinstance(parent, gtk.Paned) or isinstance(parent, gtk.Window):
|
if isinstance(parent, gtk.Paned) or isinstance(parent, gtk.Window):
|
||||||
#no notebook yet.
|
#no notebook yet.
|
||||||
notebook = gtk.Notebook()
|
notebook = gtk.Notebook()
|
||||||
|
notebook.set_tab_pos(gtk.POS_TOP)
|
||||||
notebook.connect('page-reordered',self.on_page_reordered)
|
notebook.connect('page-reordered',self.on_page_reordered)
|
||||||
notebook.set_property('homogeneous', True)
|
notebook.set_property('homogeneous', True)
|
||||||
notebook.set_tab_reorderable(widget, True)
|
notebook.set_tab_reorderable(widget, True)
|
||||||
|
@ -1159,6 +1227,8 @@ class Terminator:
|
||||||
grandparent.remove_page(page)
|
grandparent.remove_page(page)
|
||||||
grandparent.insert_page(sibling, None,page)
|
grandparent.insert_page(sibling, None,page)
|
||||||
grandparent.set_tab_label_packing(sibling, True, True, gtk.PACK_START)
|
grandparent.set_tab_label_packing(sibling, True, True, gtk.PACK_START)
|
||||||
|
grandparent.set_tab_reorderable(sibling, True)
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
grandparent.remove (parent)
|
grandparent.remove (parent)
|
||||||
|
@ -1307,6 +1377,26 @@ class Terminator:
|
||||||
notebook.next_page()
|
notebook.next_page()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def move_tab(self, term, direction):
|
||||||
|
dbg("moving to direction %s" % direction)
|
||||||
|
(notebook, page) = self.get_first_notebook_page(term)
|
||||||
|
page_num = notebook.page_num(page)
|
||||||
|
nbpages = notebook.get_n_pages()
|
||||||
|
#dbg ("%s %s %s %s" % (page_num, nbpages,notebook, page))
|
||||||
|
if page_num == 0 and direction == 'left':
|
||||||
|
new_page_num = nbpages
|
||||||
|
elif page_num == nbpages - 1 and direction == 'right':
|
||||||
|
new_page_num = 0
|
||||||
|
elif direction == 'left':
|
||||||
|
new_page_num = page_num - 1
|
||||||
|
elif direction == 'right':
|
||||||
|
new_page_num = page_num + 1
|
||||||
|
else:
|
||||||
|
dbg("[ERROR] unhandled combination in move_tab: direction = %s page_num = %d" % (direction, page_num))
|
||||||
|
return False
|
||||||
|
notebook.reorder_child(page, new_page_num)
|
||||||
|
return True
|
||||||
|
|
||||||
def get_first_parent_notebook(self, widget):
|
def get_first_parent_notebook(self, widget):
|
||||||
if isinstance (widget, gtk.Window):
|
if isinstance (widget, gtk.Window):
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in New Issue