diff --git a/powerline/renderer.py b/powerline/renderer.py index 1cc5eaa8..75754d4a 100644 --- a/powerline/renderer.py +++ b/powerline/renderer.py @@ -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'') diff --git a/powerline/renderers/bash_prompt.py b/powerline/renderers/bash_prompt.py index dbc30692..82e87dce 100644 --- a/powerline/renderers/bash_prompt.py +++ b/powerline/renderers/bash_prompt.py @@ -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): diff --git a/powerline/renderers/ipython.py b/powerline/renderers/ipython.py index e8122093..8c6e5a54 100644 --- a/powerline/renderers/ipython.py +++ b/powerline/renderers/ipython.py @@ -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' diff --git a/powerline/renderers/pango_markup.py b/powerline/renderers/pango_markup.py index b49cc618..b3c40ab2 100644 --- a/powerline/renderers/pango_markup.py +++ b/powerline/renderers/pango_markup.py @@ -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: diff --git a/powerline/renderers/shell.py b/powerline/renderers/shell.py index d4708b34..deaf2169 100644 --- a/powerline/renderers/shell.py +++ b/powerline/renderers/shell.py @@ -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): diff --git a/powerline/renderers/tmux.py b/powerline/renderers/tmux.py index df232a15..ce9e4ff0 100644 --- a/powerline/renderers/tmux.py +++ b/powerline/renderers/tmux.py @@ -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) + ']' diff --git a/powerline/renderers/vim.py b/powerline/renderers/vim.py index 6548f9b9..86a587b5 100644 --- a/powerline/renderers/vim.py +++ b/powerline/renderers/vim.py @@ -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'] + '#' diff --git a/powerline/renderers/zsh_prompt.py b/powerline/renderers/zsh_prompt.py index 6d292ccd..08e0977b 100644 --- a/powerline/renderers/zsh_prompt.py +++ b/powerline/renderers/zsh_prompt.py @@ -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):