From a6b3bc93abc5ec01dc057450140a34d2cd7c50c9 Mon Sep 17 00:00:00 2001 From: ZyX Date: Sat, 9 Feb 2013 22:13:09 +0400 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20mess=20with=20hl()+contents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- powerline/renderer.py | 9 ++++++--- powerline/renderers/bash_prompt.py | 4 ++-- powerline/renderers/ipython.py | 4 ++-- powerline/renderers/pango_markup.py | 10 ++++++---- powerline/renderers/shell.py | 4 ++-- powerline/renderers/tmux.py | 4 ++-- powerline/renderers/vim.py | 4 ++-- powerline/renderers/zsh_prompt.py | 4 ++-- 8 files changed, 24 insertions(+), 19 deletions(-) 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):