Allow overriding segment contents when rendering
This commit is contained in:
parent
c2dfabdb8d
commit
00f749c959
|
@ -12,7 +12,7 @@ class Renderer(object):
|
|||
self.segments = []
|
||||
self.theme = theme
|
||||
|
||||
def render(self, mode, width=None):
|
||||
def render(self, mode, width=None, contents_override=None):
|
||||
'''Render all segments.
|
||||
|
||||
When a width is provided, low-priority segments are dropped one at
|
||||
|
@ -21,7 +21,7 @@ class Renderer(object):
|
|||
provided they will fill the remaining space until the desired width is
|
||||
reached.
|
||||
'''
|
||||
self.segments = self.theme.get_segments(mode)
|
||||
self.segments = self.theme.get_segments(mode, contents_override)
|
||||
rendered_highlighted = self._render_segments(mode)
|
||||
|
||||
if not width:
|
||||
|
|
|
@ -31,6 +31,7 @@ class Theme(object):
|
|||
highlighting_group = segment.get('highlight', segment.get('name'))
|
||||
|
||||
self.segments.append({
|
||||
'key': None if segment_type != 'function' else '{0}.{1}'.format(segment_module, function_name),
|
||||
'type': segment_type,
|
||||
'highlight': self.colorscheme.get_group_highlighting(highlighting_group),
|
||||
'before': segment.get('before', ''),
|
||||
|
@ -52,36 +53,39 @@ class Theme(object):
|
|||
'''
|
||||
return self.dividers[side][type]
|
||||
|
||||
def get_segments(self, mode):
|
||||
def get_segments(self, mode, contents_override=None):
|
||||
'''Return all segments.
|
||||
|
||||
Function segments are called, and all segments get their before/after
|
||||
and ljust/rjust properties applied.
|
||||
'''
|
||||
contents_override = contents_override or {}
|
||||
return_segments = []
|
||||
for segment in self.segments:
|
||||
if mode in segment['exclude_modes'] or (segment['include_modes'] and segment not in segment['include_modes']):
|
||||
continue
|
||||
|
||||
if segment['type'] == 'function':
|
||||
contents_func_ret = segment['contents_func'](**segment['args'])
|
||||
contents = contents_override.get(segment['key'], segment['contents_func'](**segment['args']))
|
||||
|
||||
if contents_func_ret is None:
|
||||
if contents is None:
|
||||
continue
|
||||
|
||||
try:
|
||||
segment['highlight'] = self.colorscheme.get_group_highlighting(contents_func_ret['highlight'])
|
||||
segment['contents'] = contents_func_ret['contents']
|
||||
segment['highlight'] = self.colorscheme.get_group_highlighting(contents['highlight'])
|
||||
segment['contents'] = contents['contents']
|
||||
except TypeError:
|
||||
segment['contents'] = contents_func_ret
|
||||
segment['contents'] = contents
|
||||
elif segment['type'] == 'filler' or (segment['type'] == 'string' and segment['contents'] is not None):
|
||||
pass
|
||||
else:
|
||||
continue
|
||||
|
||||
segment['contents'] = unicode(segment['before'] + unicode(segment['contents']) + segment['after'])\
|
||||
.ljust(segment['ljust'])\
|
||||
.rjust(segment['rjust'])
|
||||
if not segment['key'] in contents_override:
|
||||
# Only apply before/after/just to non-overridden segments
|
||||
segment['contents'] = unicode(segment['before'] + unicode(segment['contents']) + segment['after'])\
|
||||
.ljust(segment['ljust'])\
|
||||
.rjust(segment['rjust'])
|
||||
|
||||
return_segments.append(segment)
|
||||
|
||||
|
|
Loading…
Reference in New Issue