summaryrefslogtreecommitdiffstats
path: root/powerline/renderers/ipython/pre_5.py
diff options
context:
space:
mode:
Diffstat (limited to 'powerline/renderers/ipython/pre_5.py')
-rw-r--r--powerline/renderers/ipython/pre_5.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/powerline/renderers/ipython/pre_5.py b/powerline/renderers/ipython/pre_5.py
new file mode 100644
index 0000000..9fc8c21
--- /dev/null
+++ b/powerline/renderers/ipython/pre_5.py
@@ -0,0 +1,56 @@
+# vim:fileencoding=utf-8:noet
+from __future__ import (unicode_literals, division, absolute_import, print_function)
+
+from powerline.renderers.shell import ShellRenderer
+from powerline.renderers.shell.readline import ReadlineRenderer
+from powerline.renderers.ipython import IPythonRenderer
+
+
+class IPythonPre50Renderer(IPythonRenderer, ShellRenderer):
+ '''Powerline ipython segment renderer for pre-5.0 IPython versions.'''
+ def render(self, **kwargs):
+ # XXX super(ShellRenderer), *not* super(IPythonPre50Renderer)
+ return super(ShellRenderer, self).render(**kwargs)
+
+ def do_render(self, segment_info, **kwargs):
+ segment_info.update(client_id='ipython')
+ return super(IPythonPre50Renderer, self).do_render(
+ segment_info=segment_info,
+ **kwargs
+ )
+
+
+class IPythonPromptRenderer(IPythonPre50Renderer, ReadlineRenderer):
+ '''Powerline ipython prompt (in and in2) renderer'''
+ pass
+
+
+class IPythonNonPromptRenderer(IPythonPre50Renderer):
+ '''Powerline ipython non-prompt (out and rewrite) renderer'''
+ pass
+
+
+class RendererProxy(object):
+ '''Powerline IPython renderer proxy which chooses appropriate renderer
+
+ Instantiates two renderer objects: one will be used for prompts and the
+ other for non-prompts.
+ '''
+ def __init__(self, **kwargs):
+ old_widths = {}
+ self.non_prompt_renderer = IPythonNonPromptRenderer(old_widths=old_widths, **kwargs)
+ self.prompt_renderer = IPythonPromptRenderer(old_widths=old_widths, **kwargs)
+
+ def render_above_lines(self, *args, **kwargs):
+ return self.non_prompt_renderer.render_above_lines(*args, **kwargs)
+
+ def render(self, is_prompt, *args, **kwargs):
+ return (self.prompt_renderer if is_prompt else self.non_prompt_renderer).render(
+ *args, **kwargs)
+
+ def shutdown(self, *args, **kwargs):
+ self.prompt_renderer.shutdown(*args, **kwargs)
+ self.non_prompt_renderer.shutdown(*args, **kwargs)
+
+
+renderer = RendererProxy