Create theme loading class

This class loads all segments from the theme, initializes the highlight
group, assigns all necessary properties based on the JSON theme
configuration, etc. By doing this we basically move the mksegment()
functionality into the theme loader, so this function can be removed at
the cost of making it more complicated to use Powerline without its
theme functionality.
This commit is contained in:
Kim Silkebækken 2012-12-10 14:23:53 +01:00
parent 417f9a6909
commit 039526f720
1 changed files with 39 additions and 1 deletions

View File

@ -1,6 +1,44 @@
# -*- coding: utf-8 -*-
import importlib
class Theme(object):
def __init__(self, ext, theme):
self.segments = []
for side in ['left', 'right']:
for segment in theme['segments'].get(side, []):
contents = None
segment_type = segment.get('type', 'function')
if segment_type == 'function':
# Import segment function and assign it to the contents
function_module = 'powerline.ext.{0}.segments'.format(ext)
function_name = segment['name']
contents = getattr(importlib.import_module(function_module), function_name)
elif segment_type == 'string':
contents = segment.get('contents')
elif segment_type == 'filler':
pass
else:
raise TypeError('Unknown segment type: {0}'.format(segment_type))
self.segments.append({
'type': segment_type,
'highlight': segment.get('highlight', segment.get('name')),
'before': segment.get('before'),
'after': segment.get('after'),
'contents': contents,
'args': segment.get('args', {}),
'ljust': segment.get('ljust', False),
'rjust': segment.get('rjust', False),
'priority': segment.get('priority', -1),
'draw_divider': segment.get('draw_divider', True),
'side': side,
'exclude_modes': segment.get('exclude_modes', []),
'include_modes': segment.get('include_modes', []),
})
def get_segments(self):
return self.segments