Merge pull request #1348 from ZyX-I/fix-1347

Fix warning when &l:statusline is set to a unicode value
This commit is contained in:
Nikolai Aleksandrovich Pavlov 2015-04-17 23:21:24 +03:00
commit 034b7d529d
2 changed files with 51 additions and 5 deletions

View File

@ -52,7 +52,31 @@ class VimPowerline(Powerline):
super(VimPowerline, self).init('vim', **kwargs)
self.last_window_id = 1
self.pyeval = pyeval
self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')'
self.construct_window_statusline = self.create_window_statusline_constructor()
if sys.version_info < (3,):
def create_window_statusline_constructor(self):
window_statusline = b'%!' + str(self.pyeval) + b'(\'powerline.statusline({0})\')'
return window_statusline.format
else:
def create_window_statusline_constructor(self):
startstr = b'%!' + self.pyeval.encode('ascii') + b'(\'powerline.statusline('
endstr = b')\')'
return lambda idx: (
startstr + str(idx).encode('ascii') + endstr
)
create_window_statusline_constructor.__doc__ = (
'''Create function which returns &l:stl value being given window index
Created function must return :py:class:`bytes` instance because this is
what ``window.options['statusline']`` returns (``window`` is
:py:class:`vim.Window` instance).
:return:
Function with type ``int bytes``.
'''
)
default_log_stream = sys.stdout
@ -174,7 +198,7 @@ class VimPowerline(Powerline):
pyeval = 'PowerlinePyeval'
self.pyeval = pyeval
self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')'
self.construct_window_statusline = self.create_window_statusline_constructor()
self.update_renderer()
__main__.powerline = self
@ -240,14 +264,14 @@ class VimPowerline(Powerline):
curwindow_id = self.last_window_id
self.last_window_id += 1
window.vars['powerline_window_id'] = curwindow_id
statusline = self.window_statusline.format(curwindow_id)
statusline = self.construct_window_statusline(curwindow_id)
if window.options['statusline'] != statusline:
window.options['statusline'] = statusline
if curwindow_id == window_id if window_id else window is vim.current.window:
r = (window, curwindow_id, window.number)
return r
else:
_vim_getwinvar = staticmethod(vim_get_func('getwinvar'))
_vim_getwinvar = staticmethod(vim_get_func('getwinvar', 'bytes'))
_vim_setwinvar = staticmethod(vim_get_func('setwinvar'))
def win_idx(self, window_id):
@ -260,7 +284,7 @@ class VimPowerline(Powerline):
curwindow_id = self.last_window_id
self.last_window_id += 1
self._vim_setwinvar(winnr, 'powerline_window_id', curwindow_id)
statusline = self.window_statusline.format(curwindow_id)
statusline = self.construct_window_statusline(curwindow_id)
if self._vim_getwinvar(winnr, '&statusline') != statusline:
self._vim_setwinvar(winnr, '&statusline', statusline)
if curwindow_id == window_id if window_id else window is vim.current.window:

View File

@ -0,0 +1,22 @@
scriptencoding utf-8
set encoding=utf-8
let g:powerline_config_paths = [expand('<sfile>:p:h:h') . '/powerline/config_files']
set laststatus=2
redir => g:messages
try
source powerline/bindings/vim/plugin/powerline.vim
redrawstatus!
vsplit
redrawstatus!
setlocal statusline=«»
redrawstatus!
catch
call writefile(['Unexpected exception', v:exception], 'message.fail')
cquit
endtry
redir END
if g:messages =~# '\v\S'
call writefile(['Unexpected messages'] + split(g:messages, "\n", 1), 'message.fail')
cquit
endif
qall!