summaryrefslogtreecommitdiffstats
path: root/powerline/renderers/ipython/pre_5.py
blob: 9fc8c2119be4cc444a0cab32cbcf8198dfae36bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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