mirror of
https://github.com/powerline/powerline.git
synced 2025-07-29 08:45:15 +02:00
Encode vim statusline to &encoding before returning
Partially fixes #1072
This commit is contained in:
parent
fdf21feae1
commit
fa217185cf
@ -52,6 +52,23 @@ def powerline_decode_error(e):
|
|||||||
codecs.register_error('powerline_decode_error', powerline_decode_error)
|
codecs.register_error('powerline_decode_error', powerline_decode_error)
|
||||||
|
|
||||||
|
|
||||||
|
last_swe_idx = 0
|
||||||
|
|
||||||
|
|
||||||
|
def register_strwidth_error(strwidth):
|
||||||
|
global last_swe_idx
|
||||||
|
last_swe_idx += 1
|
||||||
|
|
||||||
|
def powerline_encode_strwidth_error(e):
|
||||||
|
if not isinstance(e, UnicodeEncodeError):
|
||||||
|
raise NotImplementedError
|
||||||
|
return ('?' * strwidth(e.object[e.start:e.end]), e.end)
|
||||||
|
|
||||||
|
ename = 'powerline_encode_strwidth_error_{0}'.format(last_swe_idx)
|
||||||
|
codecs.register_error(ename, powerline_encode_strwidth_error)
|
||||||
|
return ename
|
||||||
|
|
||||||
|
|
||||||
def out_u(s):
|
def out_u(s):
|
||||||
'''Return unicode string suitable for displaying
|
'''Return unicode string suitable for displaying
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ from powerline.bindings.vim import vim_get_func, vim_getoption, environ, current
|
|||||||
from powerline.renderer import Renderer
|
from powerline.renderer import Renderer
|
||||||
from powerline.colorscheme import ATTR_BOLD, ATTR_ITALIC, ATTR_UNDERLINE
|
from powerline.colorscheme import ATTR_BOLD, ATTR_ITALIC, ATTR_UNDERLINE
|
||||||
from powerline.theme import Theme
|
from powerline.theme import Theme
|
||||||
from powerline.lib.unicode import unichr
|
from powerline.lib.unicode import unichr, register_strwidth_error
|
||||||
|
|
||||||
|
|
||||||
vim_mode = vim_get_func('mode', rettype=str)
|
vim_mode = vim_get_func('mode', rettype=str)
|
||||||
@ -41,6 +41,7 @@ class VimRenderer(Renderer):
|
|||||||
super(VimRenderer, self).__init__(*args, **kwargs)
|
super(VimRenderer, self).__init__(*args, **kwargs)
|
||||||
self.hl_groups = {}
|
self.hl_groups = {}
|
||||||
self.prev_highlight = None
|
self.prev_highlight = None
|
||||||
|
self.strwidth_error_name = register_strwidth_error(self.strwidth)
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
self.theme.shutdown()
|
self.theme.shutdown()
|
||||||
@ -115,6 +116,7 @@ class VimRenderer(Renderer):
|
|||||||
segment_info=segment_info,
|
segment_info=segment_info,
|
||||||
matcher_info=(None if is_tabline else segment_info),
|
matcher_info=(None if is_tabline else segment_info),
|
||||||
)
|
)
|
||||||
|
statusline = statusline.encode(vim.eval('&encoding'), self.strwidth_error_name)
|
||||||
return statusline
|
return statusline
|
||||||
|
|
||||||
def reset_highlight(self):
|
def reset_highlight(self):
|
||||||
|
@ -653,9 +653,9 @@ class TestVim(TestCase):
|
|||||||
window = vim_module.current.window
|
window = vim_module.current.window
|
||||||
window_id = 1
|
window_id = 1
|
||||||
winnr = window.number
|
winnr = window.number
|
||||||
self.assertEqual(powerline.render(window, window_id, winnr), '%#Pl_3_8404992_4_192_underline#\xa0abc%#Pl_4_192_NONE_None_NONE#>>')
|
self.assertEqual(powerline.render(window, window_id, winnr), b'%#Pl_3_8404992_4_192_underline#\xc2\xa0abc%#Pl_4_192_NONE_None_NONE#>>')
|
||||||
vim_module._environ['TEST'] = 'def'
|
vim_module._environ['TEST'] = 'def'
|
||||||
self.assertEqual(powerline.render(window, window_id, winnr), '%#Pl_3_8404992_4_192_underline#\xa0def%#Pl_4_192_NONE_None_NONE#>>')
|
self.assertEqual(powerline.render(window, window_id, winnr), b'%#Pl_3_8404992_4_192_underline#\xc2\xa0def%#Pl_4_192_NONE_None_NONE#>>')
|
||||||
|
|
||||||
def test_local_themes(self):
|
def test_local_themes(self):
|
||||||
# Regression test: VimPowerline.add_local_theme did not work properly.
|
# Regression test: VimPowerline.add_local_theme did not work properly.
|
||||||
@ -682,7 +682,7 @@ class TestVim(TestCase):
|
|||||||
window = vim_module.current.window
|
window = vim_module.current.window
|
||||||
window_id = 1
|
window_id = 1
|
||||||
winnr = window.number
|
winnr = window.number
|
||||||
self.assertEqual(powerline.render(window, window_id, winnr), '%#Pl_5_12583104_6_32896_NONE#\xa0\u201cbar\u201d%#Pl_6_32896_NONE_None_NONE#>>')
|
self.assertEqual(powerline.render(window, window_id, winnr), b'%#Pl_5_12583104_6_32896_NONE#\xc2\xa0\xe2\x80\x9cbar\xe2\x80\x9d%#Pl_6_32896_NONE_None_NONE#>>')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user