Add output_raw argument to Renderer.render() method

Update all ipython modules to use it to get unhighlighted prompt

Conflicts:
	powerline/renderers/ipython.py
This commit is contained in:
Kim Silkebækken 2013-01-28 06:36:52 +01:00
parent 0b251425da
commit a42f9b6e2f
4 changed files with 21 additions and 17 deletions

View File

@ -10,10 +10,13 @@ class PowerlinePromptManager(PromptManager):
self.powerline = powerline self.powerline = powerline
super(PowerlinePromptManager, self).__init__(**kwargs) super(PowerlinePromptManager, self).__init__(**kwargs)
def _render(self, name, color=True, *args, **kwargs): def render(self, name, color=True, *args, **kwargs):
if name != 'in': if name != 'in':
return super(PowerlinePromptManager, self)._render(name, color, *args, **kwargs) return super(PowerlinePromptManager, self).render(name, color, *args, **kwargs)
return self.powerline.renderer.render(color=color) res, res_nocolor = self.powerline.renderer.render(output_raw=True)
self.txtwidth = len(res_nocolor)
self.width = self.txtwidth
return res if color else res_nocolor
def load_ipython_extension(ip): def load_ipython_extension(ip):

View File

@ -9,8 +9,7 @@ class PowerlinePrompt(BasePrompt):
super(PowerlinePrompt, self).__init__(*args, **kwargs) super(PowerlinePrompt, self).__init__(*args, **kwargs)
def set_p_str(self): def set_p_str(self):
self.p_str = self.powerline.renderer.render() self.p_str, self.p_str_nocolor = self.powerline.renderer.render(output_raw=True)
self.p_str_nocolor = self.powerline.renderer.render(color=False)
def setup(prompt='1'): def setup(prompt='1'):

View File

@ -32,7 +32,14 @@ class Renderer(object):
else: else:
return self.theme return self.theme
def render(self, mode=None, width=None, theme=None, segments=None, side=None): @staticmethod
def _returned_value(rendered_highlighted, segments, output_raw):
if output_raw:
return rendered_highlighted, ''.join((segment['rendered_raw'] for segment in segments))
else:
return rendered_highlighted
def render(self, mode=None, width=None, theme=None, segments=None, side=None, output_raw=False):
'''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
@ -50,7 +57,7 @@ class Renderer(object):
rendered_highlighted = self._render_segments(mode, theme, segments) rendered_highlighted = self._render_segments(mode, theme, segments)
if not width: if not width:
# No width specified, so we don't need to crop or pad anything # No width specified, so we don't need to crop or pad anything
return rendered_highlighted return self._returned_value(rendered_highlighted, segments, output_raw)
# Create an ordered list of segments that can be dropped # 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] segments_priority = [segment for segment in sorted(segments, key=lambda segment: segment['priority'], reverse=True) if segment['priority'] > 0]
@ -70,7 +77,8 @@ class Renderer(object):
segment['contents'] = segments_fillers_contents segment['contents'] = segments_fillers_contents
# Add remainder whitespace to the first filler segment # Add remainder whitespace to the first filler segment
segments_fillers[0]['contents'] += ' ' * segments_fillers_remainder segments_fillers[0]['contents'] += ' ' * segments_fillers_remainder
return self._render_segments(mode, theme, segments)
return self._returned_value(self._render_segments(mode, theme, segments), segments, output_raw)
def _render_segments(self, mode, theme, segments, render_highlighted=True): def _render_segments(self, mode, theme, segments, render_highlighted=True):
'''Internal segment rendering method. '''Internal segment rendering method.
@ -133,7 +141,8 @@ class Renderer(object):
rendered_highlighted += self.hl() rendered_highlighted += self.hl()
return rendered_highlighted return rendered_highlighted
def _total_len(self, segments): @staticmethod
def _total_len(segments):
'''Return total/rendered length of all segments. '''Return total/rendered length of all segments.
This method uses the rendered_raw property of the segments and requires This method uses the rendered_raw property of the segments and requires

View File

@ -5,12 +5,5 @@ from powerline.renderers.shell import ShellRenderer
class IpythonRenderer(ShellRenderer): class IpythonRenderer(ShellRenderer):
'''Powerline ipython segment renderer.''' '''Powerline ipython segment renderer.'''
def render(self, color=True, *args, **kwargs):
self.color = color
return super(IpythonRenderer, self).render(*args, **kwargs)
def hl(self, *args, **kwargs): def hl(self, *args, **kwargs):
if not self.color: return '\x01' + super(IpythonRenderer, self).hl(*args, **kwargs) + '\x02'
return ''
else:
return '\x01' + super(IpythonRenderer, self).hl(*args, **kwargs) + '\x02'