Make sure ConfigBase() only uses a copy of DEFAULTS so we never change DEFAULTS, allowing us to add dict_diff() so we can avoid including things in the config file that aren't default
This commit is contained in:
parent
71fcada828
commit
5bd1b3f9af
|
@ -19,12 +19,16 @@
|
||||||
|
|
||||||
Classes relating to configuration
|
Classes relating to configuration
|
||||||
|
|
||||||
|
>>> DEFAULTS['global_config']['focus']
|
||||||
|
'click'
|
||||||
>>> config = Config()
|
>>> config = Config()
|
||||||
>>> config['focus']
|
>>> config['focus']
|
||||||
'click'
|
'click'
|
||||||
>>> config['focus'] = 'sloppy'
|
>>> config['focus'] = 'sloppy'
|
||||||
>>> config['focus']
|
>>> config['focus']
|
||||||
'sloppy'
|
'sloppy'
|
||||||
|
>>> DEFAULTS['global_config']['focus']
|
||||||
|
'click'
|
||||||
>>> config2 = Config()
|
>>> config2 = Config()
|
||||||
>>> config2['focus']
|
>>> config2['focus']
|
||||||
'sloppy'
|
'sloppy'
|
||||||
|
@ -40,12 +44,13 @@ Classes relating to configuration
|
||||||
import platform
|
import platform
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from copy import copy
|
||||||
from configobj import ConfigObj
|
from configobj import ConfigObj
|
||||||
from borg import Borg
|
from borg import Borg
|
||||||
from util import dbg, get_config_dir
|
from util import dbg, get_config_dir, dict_diff
|
||||||
|
|
||||||
DEFAULTS = {
|
DEFAULTS = {
|
||||||
'global': {
|
'global_config': {
|
||||||
'focus' : 'click',
|
'focus' : 'click',
|
||||||
'enable_real_transparency' : True,
|
'enable_real_transparency' : True,
|
||||||
'handle_size' : -1,
|
'handle_size' : -1,
|
||||||
|
@ -218,12 +223,12 @@ class ConfigBase(Borg):
|
||||||
def prepare_attributes(self):
|
def prepare_attributes(self):
|
||||||
"""Set up our borg environment"""
|
"""Set up our borg environment"""
|
||||||
if self.global_config is None:
|
if self.global_config is None:
|
||||||
self.global_config = DEFAULTS['global']
|
self.global_config = copy(DEFAULTS['global_config'])
|
||||||
if self.profiles is None:
|
if self.profiles is None:
|
||||||
self.profiles = {}
|
self.profiles = {}
|
||||||
self.profiles['default'] = DEFAULTS['profiles']['default']
|
self.profiles['default'] = copy(DEFAULTS['profiles']['default'])
|
||||||
if self.keybindings is None:
|
if self.keybindings is None:
|
||||||
self.keybindings = DEFAULTS['keybindings']
|
self.keybindings = copy(DEFAULTS['keybindings'])
|
||||||
if self.plugins is None:
|
if self.plugins is None:
|
||||||
self.plugins = {}
|
self.plugins = {}
|
||||||
|
|
||||||
|
@ -278,9 +283,7 @@ class ConfigBase(Borg):
|
||||||
parser.indent_type = ' '
|
parser.indent_type = ' '
|
||||||
for section_name in sections:
|
for section_name in sections:
|
||||||
section = getattr(self, section_name)
|
section = getattr(self, section_name)
|
||||||
# FIXME: Instead of just writing out the whole section we should
|
parser[section_name] = dict_diff(DEFAULTS[section_name], section)
|
||||||
# only write out things that aren't defaults
|
|
||||||
parser[section_name] = section
|
|
||||||
|
|
||||||
parser.write(open(os.path.join(get_config_dir(), 'epic-config'), 'w'))
|
parser.write(open(os.path.join(get_config_dir(), 'epic-config'), 'w'))
|
||||||
|
|
||||||
|
|
|
@ -133,3 +133,16 @@ def get_config_dir():
|
||||||
|
|
||||||
return(os.path.join(configdir, 'terminator'))
|
return(os.path.join(configdir, 'terminator'))
|
||||||
|
|
||||||
|
def dict_diff(reference, working):
|
||||||
|
"""Examine the values in the supplied working set and return a new dict
|
||||||
|
that only contains those values which are different from those in the
|
||||||
|
reference dictionary"""
|
||||||
|
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
for key in reference:
|
||||||
|
if reference[key] != working[key]:
|
||||||
|
result[key] = working[key]
|
||||||
|
|
||||||
|
return(result)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue