diff --git a/terminatorlib/config.py b/terminatorlib/config.py
index 4fbb907d..97583570 100644
--- a/terminatorlib/config.py
+++ b/terminatorlib/config.py
@@ -622,12 +622,7 @@ class ConfigBase(Borg):
dbg('config already loaded')
return
- if self.command_line_options and self.command_line_options.config:
- filename = self.command_line_options.config
- else:
- filename = os.path.join(get_config_dir(), 'config')
- if not os.path.exists(filename):
- filename = os.path.join(get_system_config_dir(), 'config')
+ filename = self.get_config_filename()
dbg('looking for config file: %s' % filename)
try:
#
@@ -706,6 +701,68 @@ class ConfigBase(Borg):
self.loaded = True
+ def get_config_filename(self):
+ filename = ''
+ if self.command_line_options and self.command_line_options.config:
+ filename = self.command_line_options.config
+ else:
+ filename = os.path.join(get_config_dir(), 'config')
+ if not os.path.exists(filename):
+ filename = os.path.join(get_system_config_dir(), 'config')
+
+ return filename
+
+ def save_config_with_suffix(self, suffix):
+ try:
+ filename = self.get_config_filename()
+
+ #save the current config, to revert any changes make in preferences
+ #save the current config to config_dir path which is at least writable
+ cfg_filename = os.path.join(get_config_dir(), 'config')
+ cur_loaded_file = cfg_filename + suffix
+
+ if os.path.exists(filename) and cur_loaded_file:
+ dbg('copy file:%s to' \
+ ' file:%s' % (filename, cur_loaded_file))
+ shutil.copy2(filename, cur_loaded_file)
+ elif cur_loaded_file:
+ open(cur_loaded_file, 'a').close()
+ else:
+ err('ConfigBase:: Unable to get filename to save')
+ except Exception as ex:
+ err('ConfigBase::save_config_with_suffix' \
+ ' Unable to save config: %s' % ex)
+
+ def restore_config_with_suffix(self, suffix):
+ try:
+ filename = self.get_config_filename()
+
+ cfg_filename = os.path.join(get_config_dir(), 'config')
+ cur_loaded_file = cfg_filename + suffix
+ if os.path.exists(cur_loaded_file):
+ if not os.access(filename, os.W_OK):
+ dbg('path:%s not writable' \
+ ' restoring to path:%s' % (filename,cfg_filename))
+ filename = cfg_filename
+
+ dbg('restore from file:%s to file:%s'
+ % (cur_loaded_file, filename))
+ shutil.copy2(cur_loaded_file, filename)
+ except Exception as ex:
+ err('ConfigBase::restore_config_with_suffix' \
+ ' Unable to restore config: %s' % ex)
+
+ def remove_config_with_suffix(self, suffix):
+ try:
+ cfg_filename = os.path.join(get_config_dir(), 'config')
+ cur_loaded_file = cfg_filename + suffix
+ if os.path.exists(cur_loaded_file):
+ dbg('remove file:%s' % (cur_loaded_file))
+ os.remove(cur_loaded_file)
+ except Exception as ex:
+ err('ConfigBase::remove_config_with_suffix' \
+ ' Unable to remove config: %s' % ex)
+
def reload(self):
"""Force a reload of the base config"""
self.loaded = False
@@ -771,7 +828,8 @@ class ConfigBase(Borg):
open(filename, 'a').close()
backup_file = filename + '~'
- shutil.copy2(filename, backup_file)
+ if os.path.exists(filename):
+ shutil.copy2(filename, backup_file)
with open(filename, 'wb') as fh:
parser.write(fh)
diff --git a/terminatorlib/preferences.glade b/terminatorlib/preferences.glade
index e0e8a2a5..83a90847 100644
--- a/terminatorlib/preferences.glade
+++ b/terminatorlib/preferences.glade
@@ -424,6 +424,7 @@
Terminator Preferences
640
400
+
-
+
+
+
+
+ True
+ True
+ 1
+
+
diff --git a/terminatorlib/prefseditor.py b/terminatorlib/prefseditor.py
index d5933c4b..72c14110 100755
--- a/terminatorlib/prefseditor.py
+++ b/terminatorlib/prefseditor.py
@@ -235,14 +235,25 @@ class PrefsEditor:
nb = guiget('notebook1')
nb.set_current_page(cur_page)
+ self.config.base.save_config_with_suffix('_cur')
+
+ def on_destroy_event(self, _widget):
+ self.config.base.remove_config_with_suffix('_cur')
+
def on_closebutton_clicked(self, _button):
"""Close the window"""
+ self.config.base.remove_config_with_suffix('_cur')
terminator = Terminator()
terminator.reconfigure()
self.window.destroy()
self.calling_window.preventHide = False
del(self)
+ def on_restoreconfigbutton_clicked(self, _button):
+ """restore config to load time"""
+ self.config.base.restore_config_with_suffix('_cur')
+ self.on_closebutton_clicked(_button)
+
def set_values(self):
"""Update the preferences window with all the configuration from
Config()"""