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:
parent
0b251425da
commit
a42f9b6e2f
|
@ -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):
|
||||||
|
|
|
@ -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'):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ''
|
|
||||||
else:
|
|
||||||
return '\x01' + super(IpythonRenderer, self).hl(*args, **kwargs) + '\x02'
|
return '\x01' + super(IpythonRenderer, self).hl(*args, **kwargs) + '\x02'
|
||||||
|
|
Loading…
Reference in New Issue