From 5c7233890f2e34d699fb740a422b9431f8e7fe66 Mon Sep 17 00:00:00 2001 From: David Sowder Date: Sun, 27 Dec 2020 10:12:19 -0600 Subject: [PATCH] Add feature to allow relaunching the command after child exit when the exit action is to hold the tab open --- terminatorlib/terminal.py | 15 +++++++++++++++ terminatorlib/terminal_popup_menu.py | 6 ++++++ terminatorlib/titlebar.py | 6 +++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/terminatorlib/terminal.py b/terminatorlib/terminal.py index d25fbc9b..a11b734f 100644 --- a/terminatorlib/terminal.py +++ b/terminatorlib/terminal.py @@ -126,8 +126,11 @@ class Terminal(Gtk.VBox): custom_encoding = None custom_font_size = None layout_command = None + relaunch_command = None directory = None + is_held_open = False + fgcolor_active = None bgcolor = None palette_active = None @@ -676,6 +679,8 @@ class Terminal(Gtk.VBox): if self.config['exit_action'] == 'restart': self.cnxids.new(self.vte, 'child-exited', self.spawn_child, True) + elif self.config['exit_action'] == 'hold': + self.cnxids.new(self.vte, 'child-exited', self.held_open, True) elif self.config['exit_action'] in ('close', 'left'): self.cnxids.new(self.vte, 'child-exited', lambda x, y: self.emit('close-term')) @@ -1429,6 +1434,10 @@ class Terminal(Gtk.VBox): if cwd is not None: self.cwd = cwd + def held_open(self, widget=None, respawn=False, debugserver=False): + self.is_held_open = True + self.titlebar.update() + def spawn_child(self, widget=None, respawn=False, debugserver=False): args = [] shell = None @@ -1441,13 +1450,19 @@ class Terminal(Gtk.VBox): if respawn == False: self.vte.grab_focus() + self.is_held_open = False + options = self.config.options_get() if options and options.command: command = options.command + self.relaunch_command = command options.command = None elif options and options.execute: command = options.execute + self.relaunch_command = command options.execute = None + elif self.relaunch_command: + command = self.relaunch_command elif self.config['use_custom_command']: command = self.config['custom_command'] elif self.layout_command: diff --git a/terminatorlib/terminal_popup_menu.py b/terminatorlib/terminal_popup_menu.py index 29ca7751..8af5be62 100644 --- a/terminatorlib/terminal_popup_menu.py +++ b/terminatorlib/terminal_popup_menu.py @@ -179,6 +179,12 @@ class TerminalPopupMenu(object): menu.append(item) menu.append(Gtk.SeparatorMenuItem()) + if terminal.is_held_open: + item = Gtk.MenuItem.new_with_mnemonic(_('Relaunch Command')) + item.connect('activate', lambda x: terminal.spawn_child()) + menu.append(item) + menu.append(Gtk.SeparatorMenuItem()) + item = Gtk.CheckMenuItem.new_with_mnemonic(_('Show _scrollbar')) item.set_active(terminal.scrollbar.get_property('visible')) item.connect('toggled', lambda x: terminal.do_scrollbar_toggle()) diff --git a/terminatorlib/titlebar.py b/terminatorlib/titlebar.py index 8df29f3b..f42dfd3f 100644 --- a/terminatorlib/titlebar.py +++ b/terminatorlib/titlebar.py @@ -105,10 +105,14 @@ class Titlebar(Gtk.EventBox): """Update our contents""" default_bg = False + temp_heldtext_str = '' temp_sizetext_str = '' + + if self.terminal.is_held_open: + temp_heldtext_str = _('[INACTIVE: Right-Click for Relaunch option] ') if not self.config['title_hide_sizetext']: temp_sizetext_str = " %s" % (self.sizetext) - self.label.set_text("%s%s" % (self.termtext, temp_sizetext_str)) + self.label.set_text("%s%s%s" % (temp_heldtext_str, self.termtext, temp_sizetext_str)) if (not self.config['title_use_system_font']) and self.config['title_font']: title_font = Pango.FontDescription(self.config['title_font'])