[bug 613] - Shortcut for autosplit h/v depending on active terminal size #613

-added auto split feature
-new signal split-auto was added
-currently this uses widget dimensions for the split as rows, cols were having different space and was not consistent, this can be changed if needed
-short cut was also added
-icon for the menu item needs to be added
This commit is contained in:
Vishweshwar Saran Singh Deo 2022-11-05 11:42:38 +05:30
parent 1aa437d6e3
commit 6bdb0c648c
7 changed files with 33 additions and 0 deletions

View File

@ -138,6 +138,7 @@ DEFAULTS = {
'go_right' : '<Alt>Right',
'rotate_cw' : '<Super>r',
'rotate_ccw' : '<Super><Shift>r',
'split_auto' : '<Shift><Control>a',
'split_horiz' : '<Shift><Control>o',
'split_vert' : '<Shift><Control>e',
'close_term' : '<Shift><Control>w',

View File

@ -67,6 +67,16 @@ class Container(object):
child is .remove()d and .add()ed"""
return None
def split_auto(self, widget, cwd=None):
"""Split this container automatically"""
width = widget.get_allocation().width
height = widget.get_allocation().height
dbg("split as per current dimenstions:(%s %s)" % (width, height))
if width > height:
self.split_axis(widget, False, cwd)
else:
self.split_axis(widget, True , cwd)
def split_horiz(self, widget, cwd=None):
"""Split this container horizontally"""
return(self.split_axis(widget, True, cwd))

View File

@ -275,6 +275,7 @@ class Notebook(Container, Gtk.Notebook):
widget.force_set_profile(None, profile)
signals = {'close-term': self.wrapcloseterm,
'split-auto': self.split_auto,
'split-horiz': self.split_horiz,
'split-vert': self.split_vert,
'title-change': self.propagate_title_change,

View File

@ -93,6 +93,7 @@ class Paned(Container):
if self.maker.isinstance(widget, 'Terminal'):
top_window = self.get_toplevel()
signals = {'close-term': self.wrapcloseterm,
'split-auto': self.split_auto,
'split-horiz': self.split_horiz,
'split-vert': self.split_vert,
'title-change': self.propagate_title_change,

View File

@ -46,6 +46,8 @@ class Terminal(Gtk.VBox):
'group-tab-toggle': (GObject.SignalFlags.RUN_LAST, None, ()),
'ungroup-tab': (GObject.SignalFlags.RUN_LAST, None, ()),
'ungroup-all': (GObject.SignalFlags.RUN_LAST, None, ()),
'split-auto': (GObject.SignalFlags.RUN_LAST, None,
(GObject.TYPE_STRING,)),
'split-horiz': (GObject.SignalFlags.RUN_LAST, None,
(GObject.TYPE_STRING,)),
'split-vert': (GObject.SignalFlags.RUN_LAST, None,
@ -1853,6 +1855,9 @@ class Terminal(Gtk.VBox):
def key_go_right(self):
self.emit('navigate', 'right')
def key_split_auto(self):
self.emit('split-auto', self.get_cwd())
def key_split_horiz(self):
self.emit('split-horiz', self.get_cwd())

View File

@ -158,6 +158,20 @@ class TerminalPopupMenu(object):
menu.append(item)
if not terminal.is_zoomed():
item = self.menu_item(Gtk.ImageMenuItem, 'split_auto',
'Split _Auto')
"""
image = Gtk.Image()
image.set_from_icon_name(APP_NAME + '_auto', Gtk.IconSize.MENU)
item.set_image(image)
if hasattr(item, 'set_always_show_image'):
item.set_always_show_image(True)
"""
item.connect('activate', lambda x: terminal.emit('split-auto',
self.terminal.get_cwd()))
menu.append(item)
item = self.menu_item(Gtk.ImageMenuItem, 'split_horiz',
'Split H_orizontally')
image = Gtk.Image()

View File

@ -422,6 +422,7 @@ class Window(Container, Gtk.Window):
if maker.isinstance(widget, 'Terminal'):
signals = {'close-term': self.closeterm,
'title-change': self.title.set_title,
'split-auto': self.split_auto,
'split-horiz': self.split_horiz,
'split-vert': self.split_vert,
'resize-term': self.resizeterm,