Add side argument in renderer.render() method

This commit is contained in:
Kim Silkebækken 2013-01-22 09:03:34 +01:00
parent 3ee6e55025
commit 2159814076
2 changed files with 29 additions and 25 deletions

View File

@ -29,7 +29,7 @@ class Renderer(object):
else:
return self.theme
def render(self, mode, width=None, theme=None, segments=None):
def render(self, mode, width=None, theme=None, segments=None, side=None):
'''Render all segments.
When a width is provided, low-priority segments are dropped one at
@ -39,7 +39,7 @@ class Renderer(object):
reached.
'''
theme = theme or self.get_theme()
segments = segments or theme.get_segments()
segments = segments or theme.get_segments(side)
# Handle excluded/included segments for the current mode
segments = [segment for segment in segments\

View File

@ -15,43 +15,47 @@ class Theme(object):
def __init__(self, ext, colorscheme, theme_config, common_config):
self.colorscheme = colorscheme
self.dividers = theme_config.get('dividers', common_config['dividers'])
self.segments = []
self.segments = {
'left': [],
'right': [],
}
self.EMPTY_SEGMENT = {
'contents': None,
'highlight': defaultdict(lambda: {'fg': False, 'bg': False, 'attr': 0})
}
get_segment = Segment(ext, common_config['paths'], colorscheme, theme_config.get('default_module')).get
for side in ['left', 'right']:
self.segments.extend((get_segment(segment, side) for segment in theme_config['segments'].get(side, [])))
self.segments[side].extend((get_segment(segment, side) for segment in theme_config['segments'].get(side, [])))
def get_divider(self, side='left', type='soft'):
'''Return segment divider.'''
return self.dividers[side][type]
def get_segments(self):
def get_segments(self, side=None):
'''Return all segments.
Function segments are called, and all segments get their before/after
and ljust/rjust properties applied.
'''
for segment in self.segments:
if segment['type'] == 'function':
contents = segment['contents_func'](**segment['args'])
if contents is None:
for side in [side] if side else ['left', 'right']:
for segment in self.segments[side]:
if segment['type'] == 'function':
contents = segment['contents_func'](**segment['args'])
if contents is None:
continue
try:
segment['highlight'] = self.colorscheme.get_group_highlighting(contents['highlight'])
segment['contents'] = contents['contents']
except TypeError:
segment['contents'] = contents
elif segment['type'] == 'filler' or (segment['type'] == 'string' and segment['contents'] is not None):
pass
else:
continue
try:
segment['highlight'] = self.colorscheme.get_group_highlighting(contents['highlight'])
segment['contents'] = contents['contents']
except TypeError:
segment['contents'] = contents
elif segment['type'] == 'filler' or (segment['type'] == 'string' and segment['contents'] is not None):
pass
else:
continue
segment['contents'] = (segment['before'] + unicode(segment['contents']) + segment['after'])\
.ljust(segment['ljust'])\
.rjust(segment['rjust'])
# We need to yield a copy of the segment, or else mode-dependent
# segment contents can't be cached correctly e.g. when caching
# non-current window contents for vim statuslines
yield copy.copy(segment)
segment['contents'] = (segment['before'] + unicode(segment['contents']) + segment['after'])\
.ljust(segment['ljust'])\
.rjust(segment['rjust'])
# We need to yield a copy of the segment, or else mode-dependent
# segment contents can't be cached correctly e.g. when caching
# non-current window contents for vim statuslines
yield copy.copy(segment)