83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
import os
|
|
import signal
|
|
import sys
|
|
|
|
# Fix imports when testing this file directly
|
|
if __name__ == '__main__':
|
|
sys.path.append( os.path.join(os.path.dirname(__file__), "../.."))
|
|
|
|
from terminatorlib.config import Config
|
|
import terminatorlib.plugin as plugin
|
|
from terminatorlib.util import get_config_dir, err, dbg, gerr
|
|
from terminatorlib.terminator import Terminator
|
|
from terminatorlib import util
|
|
|
|
|
|
# AVAILABLE must contain a list of all the classes that you want exposed
|
|
AVAILABLE = ['SaveLastSessionLayout']
|
|
|
|
class SaveLastSessionLayout(plugin.Plugin):
|
|
capabilities = ['session']
|
|
|
|
config = None
|
|
conf_file = os.path.join(get_config_dir(),"save_last_session_cwd")
|
|
conf_sessions = []
|
|
emit_close_count = 0
|
|
|
|
def __init__(self):
|
|
dbg("SaveLastSessionLayout Init")
|
|
self.connect_signals()
|
|
|
|
#not used, but capability can be used to load automatically
|
|
def load_session_layout(self, debugtab=False, widget=None, cwd=None, metadata=None, profile=None):
|
|
dbg("SaveLastSessionLayout load layout")
|
|
terminator = Terminator()
|
|
util.spawn_new_terminator(terminator.origcwd, ['-u', '-l', 'SaveLastSessionLayout'])
|
|
|
|
def save_session_layout(self, debugtab=False, widget=None, cwd=None, metadata=None, profile=None):
|
|
|
|
config = Config()
|
|
terminator = Terminator()
|
|
current_layout = terminator.describe_layout(save_cwd = True)
|
|
dbg("SaveLastSessionLayout: save layout(%s)" % current_layout)
|
|
res = config.replace_layout("SaveLastSessionLayout", current_layout)
|
|
if (not res):
|
|
r = config.add_layout("SaveLastSessionLayout", current_layout)
|
|
config.save()
|
|
return True
|
|
|
|
def signal_handler(self,signum, frame):
|
|
|
|
signame = signal.Signals(signum).name
|
|
dbg('signal handler called:signal %s (%s)' %
|
|
(signame, signum))
|
|
self.save_session_layout()
|
|
|
|
def connect_signals(self):
|
|
dbg("SaveLastSessionLayout connect_signals")
|
|
|
|
signal.signal(signal.SIGTERM, self.signal_handler)
|
|
signal.signal(signal.SIGCHLD, self.signal_handler)
|
|
signal.signal(signal.SIGHUP, self.signal_handler)
|
|
|
|
n = 0
|
|
for term in Terminator().terminals:
|
|
dbg("SaveLastSessionLayout connect_signals to term num:(%d)" % n)
|
|
n = n + 1
|
|
# event close-term works, and does not require an additional
|
|
# event but has a race condition when
|
|
# there is only one terminal we are unable to get the
|
|
# describe_layout section
|
|
|
|
#term.connect('close-term', self.close, None)
|
|
term.connect('pre-close-term', self.close, None)
|
|
|
|
#Can connect signal from terminal
|
|
#term.connect('load-layout', self.load_session_layout, None)
|
|
|
|
def close(self, term, event, arg1 = None):
|
|
if (self.emit_close_count == 0):
|
|
self.emit_close_count = self.emit_close_count + 1
|
|
self.save_session_layout("", "")
|
|
|