69 lines
1.6 KiB
Python
69 lines
1.6 KiB
Python
# vim:fileencoding=utf-8:noet
|
|
from __future__ import (unicode_literals, division, absolute_import, print_function)
|
|
|
|
from powerline import Powerline
|
|
from powerline.lib.dict import mergedicts
|
|
from powerline.lib.unicode import string
|
|
|
|
|
|
class IPythonInfo(object):
|
|
def __init__(self, shell):
|
|
self._shell = shell
|
|
|
|
@property
|
|
def prompt_count(self):
|
|
return self._shell.execution_count
|
|
|
|
|
|
# HACK: ipython tries to only leave us with plain ASCII
|
|
class RewriteResult(object):
|
|
def __init__(self, prompt):
|
|
self.prompt = string(prompt)
|
|
|
|
def __str__(self):
|
|
return self.prompt
|
|
|
|
def __add__(self, s):
|
|
if type(s) is not str:
|
|
try:
|
|
s = s.encode('utf-8')
|
|
except AttributeError:
|
|
raise NotImplementedError
|
|
return RewriteResult(self.prompt + s)
|
|
|
|
|
|
class IPythonPowerline(Powerline):
|
|
def init(self, **kwargs):
|
|
super(IPythonPowerline, self).init(
|
|
'ipython',
|
|
use_daemon_threads=True,
|
|
**kwargs
|
|
)
|
|
|
|
def get_config_paths(self):
|
|
if self.config_paths:
|
|
return self.config_paths
|
|
else:
|
|
return super(IPythonPowerline, self).get_config_paths()
|
|
|
|
def get_local_themes(self, local_themes):
|
|
return dict(((type, {'config': self.load_theme_config(name)}) for type, name in local_themes.items()))
|
|
|
|
def load_main_config(self):
|
|
r = super(IPythonPowerline, self).load_main_config()
|
|
if self.config_overrides:
|
|
mergedicts(r, self.config_overrides)
|
|
return r
|
|
|
|
def load_theme_config(self, name):
|
|
r = super(IPythonPowerline, self).load_theme_config(name)
|
|
if name in self.theme_overrides:
|
|
mergedicts(r, self.theme_overrides[name])
|
|
return r
|
|
|
|
def do_setup(self, wrefs):
|
|
for wref in wrefs:
|
|
obj = wref()
|
|
if obj is not None:
|
|
setattr(obj, 'powerline', self)
|