Don’t mess with hl()+contents

What does hl() mean? It looks like “highlight an empty string”, but is actually
“reset highlight style”. In addition if you are writing “hl()” function for new
renderer you need to care about “contents” variable (in two places!: None for
super() call and (contents or u'') after super() call) though function is
actually doing nothing with it. It is just inconvenient.
This commit is contained in:
ZyX 2013-02-09 22:13:09 +04:00 committed by Kim Silkebækken
parent 2caa136f26
commit a6b3bc93ab
8 changed files with 24 additions and 19 deletions

View File

@ -52,7 +52,7 @@ class Renderer(object):
if not width:
# No width specified, so we don't need to crop or pad anything
return self._returned_value(u''.join([segment['_rendered_hl'] for segment in segments]) + self.hl(), segments, output_raw)
return self._returned_value(u''.join([segment['_rendered_hl'] for segment in segments]) + self.hlstyle(), segments, output_raw)
# Create an ordered list of segments that can be dropped
segments_priority = [segment for segment in sorted(segments, key=lambda segment: segment['priority'], reverse=True) if segment['priority'] > 0]
@ -75,7 +75,7 @@ class Renderer(object):
segment['_space_right'] += space_side
segments_spacers[0]['_space_right'] += distribute_len_remainder
rendered_highlighted = u''.join([segment['_rendered_hl'] for segment in self._render_segments(mode, theme, segments)]) + self.hl()
rendered_highlighted = u''.join([segment['_rendered_hl'] for segment in self._render_segments(mode, theme, segments)]) + self.hlstyle()
return self._returned_value(rendered_highlighted, segments, output_raw)
@ -177,5 +177,8 @@ class Renderer(object):
b = int & 0xff
return r, g, b
def hl(self, contents=None, fg=None, bg=None, attr=None):
def hlstyle(fg=None, bg=None, attr=None):
raise NotImplementedError
def hl(self, contents, fg=None, bg=None, attr=None):
return self.hlstyle(fg, bg, attr) + (contents or u'')

View File

@ -5,13 +5,13 @@ from powerline.renderers.shell import ShellRenderer
class BashPromptRenderer(ShellRenderer):
'''Powerline bash prompt segment renderer.'''
def hl(self, contents=None, fg=None, bg=None, attr=None):
def hlstyle(self, fg=None, bg=None, attr=None):
'''Highlight a segment.
Returns the default ShellRenderer escape sequence with \[...\] wrapped
around it (required in bash prompts).
'''
return '\[' + super(BashPromptRenderer, self).hl(None, fg, bg, attr) + '\]' + (contents or u'')
return '\[' + super(BashPromptRenderer, self).hlstyle(fg, bg, attr) + '\]'
@staticmethod
def escape(string):

View File

@ -5,5 +5,5 @@ from powerline.renderers.shell import ShellRenderer
class IpythonRenderer(ShellRenderer):
'''Powerline ipython segment renderer.'''
def hl(self, *args, **kwargs):
return '\x01' + super(IpythonRenderer, self).hl(*args, **kwargs) + '\x02'
def hlstyle(self, *args, **kwargs):
return '\x01' + super(IpythonRenderer, self).hlstyle(*args, **kwargs) + '\x02'

View File

@ -6,11 +6,13 @@ from powerline.renderer import Renderer
class PangoMarkupRenderer(Renderer):
'''Powerline Pango markup segment renderer.'''
def hl(self, contents=None, fg=None, bg=None, attr=None):
'''Highlight a segment.'''
@staticmethod
def hlstyle(*args, **kwargs):
# We don't need to explicitly reset attributes, so skip those calls
if not contents or (not attr and not bg and not fg):
return ''
return ''
def hl(self, contents, fg=None, bg=None, attr=None):
'''Highlight a segment.'''
awesome_attr = []
if fg is not None:
if fg is not False and fg[1] is not False:

View File

@ -5,7 +5,7 @@ from powerline.renderer import Renderer
class ShellRenderer(Renderer):
'''Powerline shell segment renderer.'''
def hl(self, contents=None, fg=None, bg=None, attr=None):
def hlstyle(self, fg=None, bg=None, attr=None):
'''Highlight a segment.
If an argument is None, the argument is ignored. If an argument is
@ -35,7 +35,7 @@ class ShellRenderer(Renderer):
else:
if attr & Renderer.ATTR_BOLD:
ansi += [1]
return '[{0}m'.format(';'.join(str(attr) for attr in ansi)) + (contents or u'')
return '[{0}m'.format(';'.join(str(attr) for attr in ansi))
@staticmethod
def escape(string):

View File

@ -5,7 +5,7 @@ from powerline.renderer import Renderer
class TmuxRenderer(Renderer):
'''Powerline tmux segment renderer.'''
def hl(self, contents=None, fg=None, bg=None, attr=None):
def hlstyle(self, fg=None, bg=None, attr=None):
'''Highlight a segment.'''
# We don't need to explicitly reset attributes, so skip those calls
if not attr and not bg and not fg:
@ -37,4 +37,4 @@ class TmuxRenderer(Renderer):
tmux_attr += ['underscore']
else:
tmux_attr += ['nounderscore']
return '#[' + ','.join(tmux_attr) + ']' + (contents or u'')
return '#[' + ','.join(tmux_attr) + ']'

View File

@ -48,7 +48,7 @@ class VimRenderer(Renderer):
def escape(string):
return string.replace('%', '%%')
def hl(self, contents=None, fg=None, bg=None, attr=None):
def hlstyle(self, fg=None, bg=None, attr=None):
'''Highlight a segment.
If an argument is None, the argument is ignored. If an argument is
@ -97,4 +97,4 @@ class VimRenderer(Renderer):
guibg='#{0:06x}'.format(hl_group['guibg']) if hl_group['guibg'] != 'NONE' else 'NONE',
attr=','.join(hl_group['attr']),
))
return '%#' + self.hl_groups[(fg, bg, attr)]['name'] + '#' + (contents or u'')
return '%#' + self.hl_groups[(fg, bg, attr)]['name'] + '#'

View File

@ -5,13 +5,13 @@ from powerline.renderers.shell import ShellRenderer
class ZshPromptRenderer(ShellRenderer):
'''Powerline zsh prompt segment renderer.'''
def hl(self, contents=None, fg=None, bg=None, attr=None):
def hlstyle(self, fg=None, bg=None, attr=None):
'''Highlight a segment.
Returns the default ShellRenderer escape sequence with %{...%} wrapped
around it (required in zsh prompts).
'''
return '%{' + super(ZshPromptRenderer, self).hl(None, fg, bg, attr) + '%}' + (contents or u'')
return '%{' + super(ZshPromptRenderer, self).hlstyle(None, fg, bg, attr) + '%}'
@staticmethod
def escape(string):