mirror of
https://github.com/powerline/powerline.git
synced 2025-07-27 07:44:36 +02:00
Do not use some features in old Vims as they cause a crash
Fixes #997 Closes #999
This commit is contained in:
parent
f9e525bd9a
commit
8262a0ec44
@ -41,7 +41,12 @@ else:
|
|||||||
vim_get_func = VimFunc
|
vim_get_func = VimFunc
|
||||||
|
|
||||||
|
|
||||||
if hasattr(vim, 'bindeval'):
|
_getbufvar = vim_get_func('getbufvar')
|
||||||
|
|
||||||
|
|
||||||
|
# It may crash on some old vim versions and I do not remember in which patch
|
||||||
|
# I fixed this crash.
|
||||||
|
if hasattr(vim, 'vvars') and vim.vvars['version'] > 703:
|
||||||
_vim_to_python_types = {
|
_vim_to_python_types = {
|
||||||
getattr(vim, 'Dictionary', None) or type(vim.bindeval('{}')):
|
getattr(vim, 'Dictionary', None) or type(vim.bindeval('{}')):
|
||||||
lambda value: dict(((key, _vim_to_python(value[key])) for key in value.keys())),
|
lambda value: dict(((key, _vim_to_python(value[key])) for key in value.keys())),
|
||||||
@ -51,18 +56,6 @@ if hasattr(vim, 'bindeval'):
|
|||||||
lambda _: None,
|
lambda _: None,
|
||||||
}
|
}
|
||||||
|
|
||||||
if sys.version_info >= (3,):
|
|
||||||
_vim_to_python_types[bytes] = lambda value: value.decode('utf-8')
|
|
||||||
|
|
||||||
_id = lambda value: value
|
|
||||||
|
|
||||||
def _vim_to_python(value):
|
|
||||||
return _vim_to_python_types.get(type(value), _id)(value)
|
|
||||||
|
|
||||||
|
|
||||||
# It may crash on some old vim versions and I do not remember in which patch
|
|
||||||
# I fixed this crash.
|
|
||||||
if hasattr(vim, 'vvars') and vim.vvars['version'] > 703:
|
|
||||||
def vim_getvar(varname):
|
def vim_getvar(varname):
|
||||||
return _vim_to_python(vim.vars[str(varname)])
|
return _vim_to_python(vim.vars[str(varname)])
|
||||||
|
|
||||||
@ -73,6 +66,11 @@ if hasattr(vim, 'vvars') and vim.vvars['version'] > 703:
|
|||||||
def vim_getwinvar(segment_info, varname):
|
def vim_getwinvar(segment_info, varname):
|
||||||
return _vim_to_python(segment_info['window'].vars[str(varname)])
|
return _vim_to_python(segment_info['window'].vars[str(varname)])
|
||||||
else:
|
else:
|
||||||
|
_vim_to_python_types = {
|
||||||
|
dict: (lambda value: dict(((k, _vim_to_python(v)) for k, v in value.items()))),
|
||||||
|
list: (lambda value: [_vim_to_python(i) for i in value]),
|
||||||
|
}
|
||||||
|
|
||||||
_vim_exists = vim_get_func('exists', rettype=int)
|
_vim_exists = vim_get_func('exists', rettype=int)
|
||||||
|
|
||||||
def vim_getvar(varname): # NOQA
|
def vim_getvar(varname): # NOQA
|
||||||
@ -97,6 +95,23 @@ else:
|
|||||||
raise KeyError(varname)
|
raise KeyError(varname)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
if sys.version_info < (3,):
|
||||||
|
getbufvar = _getbufvar
|
||||||
|
else:
|
||||||
|
_vim_to_python_types[bytes] = lambda value: value.decode('utf-8')
|
||||||
|
|
||||||
|
def getbufvar(*args):
|
||||||
|
return _vim_to_python(_getbufvar(*args))
|
||||||
|
|
||||||
|
|
||||||
|
_id = lambda value: value
|
||||||
|
|
||||||
|
|
||||||
|
def _vim_to_python(value):
|
||||||
|
return _vim_to_python_types.get(type(value), _id)(value)
|
||||||
|
|
||||||
|
|
||||||
if hasattr(vim, 'options'):
|
if hasattr(vim, 'options'):
|
||||||
def vim_getbufoption(info, option):
|
def vim_getbufoption(info, option):
|
||||||
return info['buffer'].options[str(option)]
|
return info['buffer'].options[str(option)]
|
||||||
@ -191,15 +206,6 @@ else:
|
|||||||
return [Tabpage(nr) for nr in range(1, _last_tab_nr() + 1)]
|
return [Tabpage(nr) for nr in range(1, _last_tab_nr() + 1)]
|
||||||
|
|
||||||
|
|
||||||
if sys.version_info < (3,) or not hasattr(vim, 'bindeval'):
|
|
||||||
getbufvar = vim_get_func('getbufvar')
|
|
||||||
else:
|
|
||||||
_getbufvar = vim_get_func('getbufvar')
|
|
||||||
|
|
||||||
def getbufvar(*args):
|
|
||||||
return _vim_to_python(_getbufvar(*args))
|
|
||||||
|
|
||||||
|
|
||||||
class VimEnviron(object):
|
class VimEnviron(object):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __getitem__(key):
|
def __getitem__(key):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user