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 # 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.prompts import PromptManager
from IPython.core.hooks import TryNext from IPython.core.hooks import TryNext
@ -35,7 +35,11 @@ class PowerlinePromptManager(PromptManager):
) )
self.txtwidth = len(res_nocolor) self.txtwidth = len(res_nocolor)
self.width = self.txtwidth 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): class ConfigurableIpythonPowerline(IpythonPowerline):

View File

@ -1,5 +1,6 @@
# vim:fileencoding=utf-8:noet # 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.Prompts import BasePrompt
from IPython.ipapi import get as get_ipython from IPython.ipapi import get as get_ipython
from IPython.ipapi import TryNext from IPython.ipapi import TryNext
@ -7,30 +8,6 @@ from IPython.ipapi import TryNext
import re 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): class IpythonInfo(object):
def __init__(self, cache): def __init__(self, cache):
self._cache = cache self._cache = cache

View File

@ -2,6 +2,24 @@
from powerline import Powerline from powerline import Powerline
from powerline.lib import mergedicts 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): class IpythonPowerline(Powerline):

View File

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