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

View File

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