Use the same hack for post_0_11 rewrite prompt

IPython again tries to leave us without unicode in rewrite prompt. But in 
Python, one needs to be more serious than that to be actually able to do this.
This commit is contained in:
ZyX 2014-08-06 16:56:20 +04:00
parent ac6b9af246
commit ea6e28a037
4 changed files with 33 additions and 27 deletions

View File

@ -1,5 +1,5 @@
# vim:fileencoding=utf-8:noet
from powerline.ipython import IpythonPowerline
from powerline.ipython import IpythonPowerline, RewriteResult
from IPython.core.prompts import PromptManager
from IPython.core.hooks import TryNext
@ -35,7 +35,11 @@ class PowerlinePromptManager(PromptManager):
)
self.txtwidth = len(res_nocolor)
self.width = self.txtwidth
return res if color else res_nocolor
ret = res if color else res_nocolor
if name == 'rewrite':
return RewriteResult(ret)
else:
return ret
class ConfigurableIpythonPowerline(IpythonPowerline):

View File

@ -1,5 +1,6 @@
# vim:fileencoding=utf-8:noet
from powerline.ipython import IpythonPowerline
from powerline.ipython import IpythonPowerline, RewriteResult
from powerline.lib.unicode import string
from IPython.Prompts import BasePrompt
from IPython.ipapi import get as get_ipython
from IPython.ipapi import TryNext
@ -7,30 +8,6 @@ from IPython.ipapi import TryNext
import re
def string(s):
if type(s) is not str:
return s.encode('utf-8')
else:
return s
# 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 IpythonInfo(object):
def __init__(self, cache):
self._cache = cache

View File

@ -2,6 +2,24 @@
from powerline import Powerline
from powerline.lib import mergedicts
from powerline.lib.unicode import string
# 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):

View File

@ -56,3 +56,10 @@ class FailedUnicode(unicode):
FailedUnicode.
'''
pass
def string(s):
if type(s) is not str:
return s.encode('utf-8')
else:
return s