5 from collections
import OrderedDict
7 # Regular expression for comments
8 comment_re
= re
.compile(
9 '(^)?[^\S\n]*/(?:\*(.*?)\*/[^\S\n]*|/[^\n]*)($)?',
10 re
.DOTALL | re
.MULTILINE
14 def fixup(adict
, k
, v
):
16 Fix up a key in json format
18 for key
in adict
.keys():
21 elif isinstance(adict
[key
], dict):
22 fixup(adict
[key
], k
, v
)
25 def load_config(filepath
):
27 Load config from filepath
29 with
open(filepath
) as f
:
30 content
= ''.join(f
.readlines())
31 match
= comment_re
.search(content
)
33 content
= content
[:match
.start()] + content
[match
.end():]
34 match
= comment_re
.search(content
)
35 return json
.loads(content
, object_pairs_hook
=OrderedDict
)
42 path
= os
.environ
.get(
46 '')) + os
.sep
+ '.rainbow_config.json'
47 data
= load_config(path
)
48 # Hard to set from prompt
49 data
.pop('ONLY_LIST', None)
50 data
.pop('IGNORE_LIST', None)
54 def get_default_config(key
):
56 Get default value of a config key
58 path
= os
.path
.dirname(
59 __file__
) + '/colorset/config'
60 data
= load_config(path
)
66 Get current value of a config key
71 def set_config(key
, value
):
73 Set a config key with specific value
78 elif value
.lower() == 'True':
80 elif value
.lower() == 'False':
83 path
= os
.environ
.get(
87 '')) + os
.sep
+ '.rainbow_config.json'
88 data
= load_config(path
)
89 fixup(data
, key
, value
)
91 with
open(path
, 'w') as out
:
92 json
.dump(data
, out
, indent
=4)
93 os
.system('chmod 777 ' + path
)
100 rainbow_config
= os
.environ
.get(
104 '')) + os
.sep
+ '.rainbow_config.json'
106 data
= load_config(rainbow_config
)
110 print('It seems that ~/.rainbow_config.json has wrong format :(')
116 # Load the initial config
117 config
= os
.path
.dirname(
118 __file__
) + '/colorset/config'
120 data
= load_config(config
)
127 rainbow_config
= os
.environ
.get(
131 '')) + os
.sep
+ '.rainbow_config.json'
133 data
= load_config(rainbow_config
)
137 print('It seems that ~/.rainbow_config.json has wrong format :(')
140 theme_file
= os
.path
.dirname(
141 __file__
) + '/colorset/' + c
['THEME'] + '.json'
143 data
= load_config(theme_file
)