diff --git a/terminatorlib/preferences.glade b/terminatorlib/preferences.glade
index a4d3bf56..0d8ae2e2 100644
--- a/terminatorlib/preferences.glade
+++ b/terminatorlib/preferences.glade
@@ -810,7 +810,6 @@
False
Choose A Terminal Font
True
- True
@@ -851,6 +850,7 @@
True
False
True
+
False
@@ -882,6 +882,7 @@
True
True
•
+
1
@@ -934,6 +935,7 @@
True
CursorShapeListStore
0
+
@@ -964,6 +966,7 @@
True
True
#000000000000
+
1
@@ -1004,6 +1007,7 @@
True
False
True
+
False
@@ -1059,6 +1063,7 @@
True
False
True
+
0
@@ -1072,6 +1077,7 @@
False
True
True
+
False
@@ -1087,6 +1093,7 @@
False
True
True
+
False
@@ -1102,6 +1109,7 @@
False
True
True
+
False
@@ -1184,6 +1192,7 @@
False
True
True
+
False
@@ -1199,6 +1208,7 @@
False
True
True
+
False
@@ -1250,6 +1260,7 @@
True
True
•
+
1
@@ -1287,6 +1298,7 @@
True
ChildExitedListStore
0
+
@@ -1445,6 +1457,7 @@
True
Choose Terminal Text Color
#000000000000
+
False
@@ -1475,6 +1488,7 @@
True
Choose Terminal Background Color
#000000000000
+
False
@@ -1845,6 +1859,7 @@
1
@@ -1981,6 +1996,7 @@
True
False
Select Background Image
+
1
@@ -1999,6 +2015,7 @@
False
True
True
+
False
@@ -2081,6 +2098,7 @@
delayed
background_darkness_scale
bottom
+
1
@@ -2147,6 +2165,7 @@
False
True
True
+
2
@@ -2163,6 +2182,7 @@
False
True
True
+
2
@@ -2179,6 +2199,7 @@
True
ScrollbarPositionListStore
0
+
@@ -2210,6 +2231,7 @@
ScrollbackAdjustmend
1
True
+
False
@@ -2349,6 +2371,7 @@
True
BackspaceKeyListStore
1
+
@@ -2368,6 +2391,7 @@
True
DeleteKeyListStore
2
+
@@ -2797,7 +2821,7 @@
True
True
True
-
+
False
diff --git a/terminatorlib/prefseditor.py b/terminatorlib/prefseditor.py
index 2464f158..128c5b6f 100755
--- a/terminatorlib/prefseditor.py
+++ b/terminatorlib/prefseditor.py
@@ -111,15 +111,8 @@ class PrefsEditor:
self.window.show_all()
self.set_values()
- def on_cancelbutton_clicked(self, _button):
+ def on_closebutton_clicked(self, _button):
"""Close the window"""
- self.window.destroy()
- del(self)
-
- def on_okbutton_clicked(self, _button):
- """Save the config"""
- self.store_values()
- self.config.save()
terminator = Terminator()
terminator.reconfigure()
self.window.destroy()
@@ -231,71 +224,6 @@ class PrefsEditor:
## Plugins tab
# FIXME: Implement this
- def store_values(self):
- """Store the values from the GUI back into Config()"""
- guiget = self.builder.get_object
-
- ## Global tab
- # Focus
- widget = guiget('focuscombo')
- selected = widget.get_active()
- if selected == 0:
- value = 'system'
- elif selected == 1:
- value = 'click'
- elif selected == 2:
- value = 'mouse'
- self.config['focus'] = value
- # Handle size
- widget = guiget('handlesize')
- self.config['handle_size'] = int(widget.get_value())
- # Window geometry
- widget = guiget('wingeomcheck')
- self.config['geometry_hinting'] = widget.get_active()
- # Window state
- widget = guiget('winstatecombo')
- selected = widget.get_active()
- if selected == 0:
- value = 'normal'
- elif selected == 1:
- value = 'hidden'
- elif selected == 2:
- value = 'maximise'
- elif selected == 3:
- value = 'fullscreen'
- self.config['window_state'] = value
- # Window borders
- widget = guiget('winbordercheck')
- self.config['borderless'] = not widget.get_active()
- # Tab position
- widget = guiget('tabposcombo')
- selected = widget.get_active()
- if selected == 0:
- value = 'top'
- elif selected == 1:
- value = 'bottom'
- elif selected == 2:
- value = 'left'
- elif selected == 3:
- value = 'right'
- self.config['tab_position'] = value
-
- ## Profile tab
- self.store_profile_values()
-
- ## Layouts tab
- self.store_layout(self.previous_layout_selection)
-
- ## Keybindings tab
- keybindings = self.config['keybindings']
- liststore = guiget('KeybindingsListStore')
- for keybinding in liststore:
- accel = gtk.accelerator_name(keybinding[2], keybinding[3])
- keybindings[keybinding[0]] = accel
-
- ## Plugins tab
- # FIXME: Implement this
-
def set_profile_values(self, profile):
"""Update the profile values for a given profile"""
self.config.set_profile(profile)
@@ -477,199 +405,270 @@ class PrefsEditor:
else:
widget.set_active(0)
- def store_profile_values(self):
- """Pull out all the settings before switching profile"""
- guiget = self.builder.get_object
+ def set_layout(self, layout_name):
+ """Set a layout"""
+ self.layouteditor.set_layout(layout_name)
- ## General tab
- # Use system font
- widget = guiget('system_font_checkbutton')
- self.config['use_system_font'] = widget.get_active()
- # Font
- widget = guiget('font_selector')
- self.config['font'] = widget.get_font_name()
- # Allow bold
- widget = guiget('allow_bold_checkbutton')
+ def on_wingeomcheck_toggled(self, widget):
+ """Window geometry setting changed"""
+ self.config['geometry_hinting'] = widget.get_active()
+ self.config.save()
+
+ def on_winbordercheck_toggled(self, widget):
+ """Window border setting changed"""
+ self.config['borderless'] = not widget.get_active()
+ self.config.save()
+
+ def on_allow_bold_checkbutton_toggled(self, widget):
+ """Allow bold setting changed"""
self.config['allow_bold'] = widget.get_active()
- # Icon Bell
- widget = guiget('icon_bell_checkbutton')
- self.config['icon_bell'] = widget.get_active()
- # Visual Bell
- widget = guiget('visual_bell_checkbutton')
- self.config['visible_bell'] = widget.get_active()
- # Audible Bell
- widget = guiget('audible_bell_checkbutton')
- self.config['audible_bell'] = widget.get_active()
- # Urgent Bell
- widget = guiget('urgent_bell_checkbutton')
- self.config['urgent_bell'] = widget.get_active()
- # Show titlebar
- widget = guiget('show_titlebar')
+ self.config.save()
+
+ def on_show_titlebar_toggled(self, widget):
+ """Show titlebar setting changed"""
self.config['show_titlebar'] = widget.get_active()
- # Word chars
- widget = guiget('word_chars_entry')
- self.config['word_chars'] = widget.get_text()
- # Cursor Shape
- widget = guiget('cursor_shape_combobox')
- selected = widget.get_active()
- if selected == 0:
- value = 'block'
- elif selected == 1:
- value = 'underline'
- elif selected == 2:
- value = 'ibeam'
- self.config['cursor_shape'] = value
- # Cursor Blink
- widget = guiget('cursor_blink')
+ self.config.save()
+
+ def on_cursor_blink_toggled(self, widget):
+ """Cursor blink setting changed"""
self.config['cursor_blink'] = widget.get_active()
- # Cursor Colour
- widget = guiget('cursor_color')
- self.config['cursor_color'] = widget.get_color().to_string()
-
- ## Command tab
- # Login shell
- widget = guiget('login_shell_checkbutton')
+ self.config.save()
+
+ def on_icon_bell_checkbutton_toggled(self, widget):
+ """Icon bell setting changed"""
+ self.config['icon_bell'] = widget.get_active()
+ self.config.save()
+
+ def on_visual_bell_checkbutton_toggled(self, widget):
+ """Visual bell setting changed"""
+ self.config['visible_bell'] = widget.get_active()
+ self.config.save()
+
+ def on_audible_bell_checkbutton_toggled(self, widget):
+ """Audible bell setting changed"""
+ self.config['audible_bell'] = widget.get_active()
+ self.config.save()
+
+ def on_urgent_bell_checkbutton_toggled(self, widget):
+ """Window manager bell setting changed"""
+ self.config['urgent_bell'] = widget.get_active()
+ self.config.save()
+
+ def on_login_shell_checkbutton_toggled(self, widget):
+ """Login shell setting changed"""
self.config['login_shell'] = widget.get_active()
- # Update records
- widget = guiget('update_records_checkbutton')
+ self.config.save()
+
+ def on_update_records_checkbutton_toggled(self, widget):
+ """Update records setting changed"""
self.config['update_records'] = widget.get_active()
- # Use custom command
- widget = guiget('use_custom_command_checkbutton')
- self.config['use_custom_command'] = widget.get_active()
- # Custom command
- widget = guiget('custom_command_entry')
- self.config['custom_command'] = widget.get_text()
- # Exit action
- widget = guiget('exit_action_combobox')
- selected = widget.get_active()
- if selected == 0:
- value = 'close'
- elif selected == 1:
- value = 'restart'
- elif selected == 2:
- value = 'hold'
- self.config['exit_action'] = value
+ self.config.save()
- ## Colours tab
- # Use system colours
- widget = guiget('use_theme_colors_checkbutton')
- self.config['use_theme_colors'] = widget.get_active()
- # Colour scheme
- widget = guiget('color_scheme_combobox')
- selected = widget.get_active()
- if selected == 0:
- value = 'black_on_yellow'
- elif selected == 1:
- value = 'black_on_white'
- elif selected == 2:
- value = 'grey_on_black'
- elif selected == 3:
- value = 'green_on_black'
- elif selected == 4:
- value = 'white_on_black'
- elif selected == 5:
- value = 'orange_on_black'
- elif selected == 6:
- value = 'ambience'
- elif selected == 7:
- value = 'custom'
- self.config['color_scheme'] = value
- # Foreground colour
- widget = guiget('foreground_colorpicker')
- self.config['foreground_color'] = widget.get_color().to_string()
- # Background colour
- widget = guiget('background_colorpicker')
- self.config['background_color'] = widget.get_color().to_string()
- # Palette
- palette = []
- for i in xrange(1, 17):
- widget = guiget('palette_colorpicker_%d' % i)
- palette.append(widget.get_color().to_string())
- self.config['palette'] = ':'.join(palette)
- # Titlebar colours
- for bit in ['title_transmit_fg_color', 'title_transmit_bg_color',
- 'title_receive_fg_color', 'title_receive_bg_color',
- 'title_inactive_fg_color', 'title_inactive_bg_color']:
- widget = guiget(bit)
- self.config[bit] = widget.get_color().to_string()
-
- ## Background tab
- # Background type
- widget = guiget('solid_radiobutton')
- if widget.get_active() == True:
- value = 'solid'
- widget = guiget('image_radiobutton')
- if widget.get_active() == True:
- value = 'image'
- widget = guiget('transparent_radiobutton')
- if widget.get_active() == True:
- value = 'transparent'
- self.config['background_type'] = value
- # Background image
- widget = guiget('background_image_filechooser')
- self.config['background_image'] = widget.get_filename()
- # Background scrolls
- widget = guiget('scroll_background_checkbutton')
+ def on_scroll_background_checkbutton_toggled(self, widget):
+ """Scroll background setting changed"""
self.config['scroll_background'] = widget.get_active()
- # Background darkness
- widget = guiget('darken_background_scale')
- self.config['background_darkness'] = widget.get_value()
+ self.config.save()
- ## Scrolling tab
- # Scrollbar
- widget = guiget('scrollbar_position_combobox')
- selected = widget.get_active()
- if selected == 0:
- value = 'left'
- elif selected == 1:
- value = 'right'
- elif selected == 2:
- value = 'hidden'
- self.config['scrollbar_position'] = value
- # Scrollback lines
- widget = guiget('scrollback_lines_spinbutton')
- self.config['scrollback_lines'] = int(widget.get_value())
- # Scroll on output
- widget = guiget('scroll_on_output_checkbutton')
- self.config['scroll_on_output'] = widget.get_active()
- # Scroll on keystroke
- widget = guiget('scroll_on_keystroke_checkbutton')
+ def on_scroll_on_keystroke_checkbutton_toggled(self, widget):
+ """Scroll on keystrong setting changed"""
self.config['scroll_on_keystroke'] = widget.get_active()
+ self.config.save()
- ## Compatibility tab
- # Backspace key
- widget = guiget('backspace_binding_combobox')
+ def on_scroll_on_output_checkbutton_toggled(self, widget):
+ """Scroll on output setting changed"""
+ self.config['scroll_on_output'] = widget.get_active()
+ self.config.save()
+
+ def on_delete_binding_combobox_changed(self, widget):
+ """Delete binding setting changed"""
selected = widget.get_active()
- if selected == 0:
- value = 'automatic'
- elif selected == 1:
- value = 'control-h'
- elif selected == 2:
- value = 'ascii-del'
- elif selected == 3:
- value == 'escape-sequence'
- self.config['backspace_binding'] = value
- # Delete key
- widget = guiget('delete_binding_combobox')
- selected = widget.get_active()
- if selected == 0:
- valud = 'automatic'
- elif selected == 1:
+ if selected == 1:
value = 'control-h'
elif selected == 2:
value = 'ascii-del'
elif selected == 3:
value = 'escape-sequence'
+ else:
+ value = 'automatic'
self.config['delete_binding'] = value
+ self.config.save()
- def set_layout(self, layout_name):
- """Set a layout"""
- self.layouteditor.set_layout(layout_name)
+ def on_backspace_binding_combobox_changed(self, widget):
+ """Backspace binding setting changed"""
+ selected = widget.get_active()
+ if selected == 1:
+ value = 'control-h'
+ elif selected == 2:
+ value = 'ascii-del'
+ elif selected == 3:
+ value == 'escape-sequence'
+ else:
+ value = 'automatic'
+ self.config['backspace_binding'] = value
+ self.config.save()
- def store_layout(self, layout):
- """Store a layout"""
+ def on_scrollback_lines_spinbutton_value_changed(self, widget):
+ """Scrollback lines setting changed"""
+ value = widget.get_value_as_int()
+ self.config['scrollback_lines'] = value
+ self.config.save()
+
+ def on_scrollbar_position_combobox_changed(self, widget):
+ """Scrollbar position setting changed"""
+ selected = widget.get_active()
+ if selected == 1:
+ value = 'right'
+ elif selected == 2:
+ value = 'hidden'
+ else:
+ value = 'left'
+ self.config['scrollbar_position'] = value
+ self.config.save()
+
+ def on_darken_background_scale_change_value(self, widget):
+ """Background darkness setting changed"""
+ self.config['background_darkness'] = widget.get_value()
+ self.config.save()
+
+ def on_background_image_filechooser_file_set(self, widget):
+ """Background image setting changed"""
+ self.config['background_image'] = widget.get_filename()
+ self.config.save()
+
+ def on_palette_combobox_changed(self, widget):
+ """Palette selector changed"""
+ # FIXME: This doesn't really exist yet.
pass
+ def on_background_colorpicker_color_set(self, widget):
+ """Background color changed"""
+ self.config['background_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_foreground_colorpicker_color_set(self, widget):
+ """Foreground color changed"""
+ self.config['foreground_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_exit_action_combobox_changed(self, widget):
+ """Exit action changed"""
+ selected = widget.get_active()
+ if selected == 1:
+ value = 'restart'
+ elif selected == 2:
+ value = 'hold'
+ else:
+ value = 'close'
+ self.config['exit_action'] = value
+ self.config.save()
+
+ def on_custom_command_entry_activate(self, widget):
+ """Custom command value changed"""
+ self.config['custom_command'] = widget.get_text()
+ self.config.save()
+
+ def on_cursor_color_color_set(self, widget):
+ """Cursor colour changed"""
+ self.config['cursor_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_cursor_shape_combobox_changed(self, widget):
+ """Cursor shape changed"""
+ selected = widget.get_active()
+ if selected == 1:
+ value = 'underline'
+ elif selected == 2:
+ value = 'ibeam'
+ else:
+ value = 'block'
+ self.config['cursor_shape'] = value
+ self.config.save()
+
+ def on_word_chars_entry_activate(self, widget):
+ """Word characters changed"""
+ self.config['word_chars'] = widget.get_text()
+ self.config.save()
+
+ def on_font_selector_font_set(self, widget):
+ """Font changed"""
+ self.config['font'] = widget.get_font_name()
+ self.config.save()
+
+ def on_title_receive_bg_color_color_set(self, widget):
+ """Title receive background colour changed"""
+ self.config['title_receive_bg_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_title_receive_fg_color_color_set(self, widget):
+ """Title receive foreground colour changed"""
+ self.config['title_receive_fg_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_title_inactive_bg_color_color_set(self, widget):
+ """Title inactive background colour changed"""
+ self.config['title_inactive_bg_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_title_transmit_bg_color_color_set(self, widget):
+ """Title transmit backgruond colour changed"""
+ self.config['title_transmit_bg_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_title_inactive_fg_color_color_set(self, widget):
+ """Title inactive foreground colour changed"""
+ self.config['title_inactive_fg_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_title_transmit_fg_color_color_set(self, widget):
+ """Title transmit foreground colour changed"""
+ self.config['title_transmit_fg_color'] = widget.get_color().to_string()
+ self.config.save()
+
+ def on_handlesize_change_value(self, widget):
+ """Handle size changed"""
+ self.config['handle_size'] = int(widget.get_value())
+ self.config.save()
+
+ def on_focuscombo_changed(self, widget):
+ """Focus type changed"""
+ selected = widget.get_active()
+ if selected == 1:
+ value = 'click'
+ elif selected == 2:
+ value = 'mouse'
+ else:
+ value = 'system'
+ self.config['focus'] = value
+ self.config.save()
+
+ def on_tabposcombo_changed(self, widget):
+ """Tab position changed"""
+ selected = widget.get_active()
+ if selected == 1:
+ value = 'bottom'
+ elif selected == 2:
+ value = 'left'
+ elif selected == 3:
+ value = 'right'
+ else:
+ value = 'top'
+ self.config['tab_position'] = value
+ self.config.save()
+
+ def on_winstatecombo_changed(self, widget):
+ """Window state changed"""
+ selected = widget.get_active()
+ if selected == 1:
+ value = 'hidden'
+ elif selected == 2:
+ value = 'maximise'
+ elif selected == 3:
+ value = 'fullscreen'
+ else:
+ value = 'normal'
+ self.config['window_state'] = value
+ self.config.save()
+
def on_profileaddbutton_clicked(self, _button):
"""Add a new profile to the list"""
guiget = self.builder.get_object
@@ -759,23 +758,23 @@ class PrefsEditor:
"""Toggling the use_custom_command checkbox needs to alter the
sensitivity of the custom_command entrybox"""
guiget = self.builder.get_object
-
widget = guiget('custom_command_entry')
- if checkbox.get_active() == True:
- widget.set_sensitive(True)
- else:
- widget.set_sensitive(False)
+ value = checkbox.get_active()
+
+ widget.set_sensitive(value)
+ self.config['use_custom_command'] = value
+ self.config.save()
def on_system_font_checkbutton_toggled(self, checkbox):
"""Toggling the use_system_font checkbox needs to alter the
sensitivity of the font selector"""
guiget = self.builder.get_object
-
widget = guiget('font_selector')
- if checkbox.get_active() == True:
- widget.set_sensitive(False)
- else:
- widget.set_sensitive(True)
+ value = checkbox.get_active()
+
+ widget.set_sensitive(not value)
+ self.config['use_system_font'] = value
+ self.config.save()
def on_reset_compatibility_clicked(self, widget):
"""Reset the confusing and annoying backspace/delete options to the
@@ -800,29 +799,27 @@ class PrefsEditor:
imagewidget = guiget('image_radiobutton')
transwidget = guiget('transparent_radiobutton')
if transwidget.get_active() == True:
- backtype = 'trans'
+ backtype = 'transparent'
elif imagewidget.get_active() == True:
backtype = 'image'
else:
backtype = 'solid'
+ self.config['background_type'] = backtype
+ self.config.save()
+
if backtype == 'image':
guiget('background_image_filechooser').set_sensitive(True)
guiget('scroll_background_checkbutton').set_sensitive(True)
else:
guiget('background_image_filechooser').set_sensitive(False)
guiget('scroll_background_checkbutton').set_sensitive(False)
- if backtype == 'trans':
+ if backtype == 'transparent':
guiget('darken_background_scale').set_sensitive(True)
else:
guiget('darken_background_scale').set_sensitive(False)
def on_profile_selection_changed(self, selection):
"""A different profile was selected"""
- if self.previous_profile_selection is not None:
- dbg('PrefsEditor::on_profile_selection_changed: Storing: %s' %
- self.previous_profile_selection)
- self.store_profile_values()
-
(listmodel, rowiter) = selection.get_selected()
if not rowiter:
# Something is wrong, just jump to the first item in the list
@@ -848,6 +845,7 @@ class PrefsEditor:
dbg('PrefsEditor::on_profile_name_edited: Changing %s to %s' %
(oldname, newtext))
self.config.rename_profile(oldname, newtext)
+ self.config.save()
widget = self.builder.get_object('profilelist')
model = widget.get_model()
@@ -880,6 +878,7 @@ class PrefsEditor:
return
dbg('Changing %s to %s' % (oldname, newtext))
self.config.rename_layout(oldname, newtext)
+ self.config.save()
widget = self.builder.get_object('layoutlist')
model = widget.get_model()
@@ -894,6 +893,7 @@ class PrefsEditor:
value = None
guiget = self.builder.get_object
active = widget.get_active()
+
for key in self.colorschemevalues.keys():
if self.colorschemevalues[key] == active:
value = key
@@ -936,6 +936,11 @@ class PrefsEditor:
if backcol is not None:
back.set_color(gtk.gdk.Color(backcol))
+ self.config['color_scheme'] = value
+ self.config['foreground_color'] = forecol
+ self.config['background_color'] = backcol
+ self.config.save()
+
def on_use_theme_colors_checkbutton_toggled(self, widget):
"""Update colour pickers"""
guiget = self.builder.get_object
@@ -952,16 +957,28 @@ class PrefsEditor:
scheme.set_sensitive(True)
self.on_color_scheme_combobox_changed(scheme)
+ self.config['use_theme_colors'] = active
+ self.config.save()
+
def on_cellrenderer_accel_edited(self, liststore, path, key, mods, _code):
"""Handle an edited keybinding"""
celliter = liststore.get_iter_from_string(path)
liststore.set(celliter, 2, key, 3, mods)
+ binding = liststore.get_value(liststore.get_iter(path), 0)
+ accel = gtk.accelerator_name(key, mods)
+ self.config['keybindings'][binding] = accel
+ self.config.save()
+
def on_cellrenderer_accel_cleared(self, liststore, path):
"""Handle the clearing of a keybinding accelerator"""
celliter = liststore.get_iter_from_string(path)
liststore.set(celliter, 2, 0, 3, 0)
+ binding = liststore.get_value(liststore.get_iter(path), 0)
+ self.config['keybindings'][binding] = None
+ self.config.save()
+
class LayoutEditor:
profile_ids_to_profile = None
profile_profile_to_ids = None