Merge pull request #896 from ZyX-I/fix-vim-environment

Fix typo in VimRenderer.render

Ref jmcantrell/vim-virtualenv#26.
This commit is contained in:
ZyX-I 2014-06-25 20:15:04 +04:00
commit 1dd5f42b9d
5 changed files with 72 additions and 11 deletions

View File

@ -30,6 +30,9 @@ class VimRenderer(Renderer):
character_translations = Renderer.character_translations.copy() character_translations = Renderer.character_translations.copy()
character_translations[ord('%')] = '%%' character_translations[ord('%')] = '%%'
segment_info = Renderer.segment_info.copy()
segment_info.update(environ=environ)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
if not hasattr(vim, 'strwidth'): if not hasattr(vim, 'strwidth'):
# Hope nobody want to change this at runtime # Hope nobody want to change this at runtime
@ -84,16 +87,15 @@ class VimRenderer(Renderer):
mode = mode_translations.get(mode, mode) mode = mode_translations.get(mode, mode)
else: else:
mode = 'nc' mode = 'nc'
segment_info = { segment_info = self.segment_info.copy()
segment_info.update({
'window': window, 'window': window,
'mode': mode, 'mode': mode,
'window_id': window_id, 'window_id': window_id,
'winnr': winnr, 'winnr': winnr,
'environ': environ, })
}
segment_info['buffer'] = segment_info['window'].buffer segment_info['buffer'] = segment_info['window'].buffer
segment_info['bufnr'] = segment_info['buffer'].number segment_info['bufnr'] = segment_info['buffer'].number
segment_info.update(self.segment_info)
winwidth = segment_info['window'].width winwidth = segment_info['window'].width
statusline = super(VimRenderer, self).render( statusline = super(VimRenderer, self).render(
mode=mode, mode=mode,

View File

@ -23,8 +23,8 @@ def _override_from(config, override_varname):
class VimPowerline(Powerline): class VimPowerline(Powerline):
def __init__(self, pyeval='PowerlinePyeval'): def __init__(self, pyeval='PowerlinePyeval', **kwargs):
super(VimPowerline, self).__init__('vim') super(VimPowerline, self).__init__('vim', **kwargs)
self.last_window_id = 1 self.last_window_id = 1
self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')' self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')'

View File

@ -121,16 +121,23 @@ renderer = SimpleRenderer
def get_powerline(**kwargs): def get_powerline(**kwargs):
return get_powerline_raw(
TestPowerline,
ext='test',
renderer_module='tests.lib.config_mock',
logger=Logger(),
**kwargs
)
def get_powerline_raw(PowerlineClass, **kwargs):
global renderer global renderer
watcher = Watcher() watcher = Watcher()
if kwargs.pop('simpler_renderer', False): if kwargs.pop('simpler_renderer', False):
renderer = EvenSimplerRenderer renderer = EvenSimplerRenderer
else: else:
renderer = SimpleRenderer renderer = SimpleRenderer
pl = TestPowerline( pl = PowerlineClass(
ext='test',
renderer_module='tests.lib.config_mock',
logger=Logger(),
config_loader=ConfigLoader(load=load_json_config, watcher=watcher, run_once=kwargs.get('run_once')), config_loader=ConfigLoader(load=load_json_config, watcher=watcher, run_once=kwargs.get('run_once')),
**kwargs **kwargs
) )

View File

@ -1,11 +1,15 @@
# vim:fileencoding=utf-8:noet # vim:fileencoding=utf-8:noet
from __future__ import unicode_literals, absolute_import, division from __future__ import unicode_literals, absolute_import, division
import tests.vim as vim_module
import powerline as powerline_module import powerline as powerline_module
from tests import TestCase from tests import TestCase
from tests.lib import replace_item from tests.lib import replace_item
from tests.lib.config_mock import swap_attributes, get_powerline, pop_events from tests.lib.config_mock import swap_attributes, get_powerline, pop_events
from tests.lib.config_mock import get_powerline_raw
from functools import wraps from functools import wraps
from copy import deepcopy from copy import deepcopy
import sys
import os
config = { config = {
@ -29,6 +33,10 @@ config = {
'theme': 'default', 'theme': 'default',
'colorscheme': 'default', 'colorscheme': 'default',
}, },
'vim': {
'theme': 'default',
'colorscheme': 'default',
},
}, },
}, },
'colors': { 'colors': {
@ -47,6 +55,11 @@ config = {
'str2': {'fg': 'col3', 'bg': 'col4', 'attr': ['underline']}, 'str2': {'fg': 'col3', 'bg': 'col4', 'attr': ['underline']},
}, },
}, },
'colorschemes/vim/default': {
'groups': {
'environment': {'fg': 'col3', 'bg': 'col4', 'attr': ['underline']},
},
},
'themes/test/default': { 'themes/test/default': {
'segments': { 'segments': {
'left': [ 'left': [
@ -73,6 +86,19 @@ config = {
], ],
}, },
}, },
'themes/vim/default': {
'default_module': 'powerline.segments.common',
'segments': {
'left': [
{
'name': 'environment',
'args': {
'variable': 'TEST',
},
},
],
},
},
} }
@ -122,15 +148,34 @@ class TestSingleLine(TestCase):
], width=10) ], width=10)
class TestVim(TestCase):
def test_environ_update(self):
# Regression test: test that segment obtains environment from vim, not
# from os.environ.
from powerline.vim import VimPowerline
with vim_module._with('environ', TEST='abc'):
with get_powerline_raw(VimPowerline) as powerline:
window = vim_module.current.window
window_id = 1
winnr = window.number
self.assertEqual(powerline.render(window, window_id, winnr), '%#Pl_3_8404992_4_192_underline#\xa0abc%#Pl_4_192_NONE_None_NONE#>>')
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#>>')
replaces = {} replaces = {}
def setUpModule(): def setUpModule():
global replaces global replaces
replaces = swap_attributes(globals(), powerline_module, replaces) replaces = swap_attributes(globals(), powerline_module, replaces)
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'path')))
tearDownModule = setUpModule def tearDownModule():
global replaces
replaces = swap_attributes(globals(), powerline_module, replaces)
sys.path.pop(0)
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -11,6 +11,9 @@ options = {
} }
_last_bufnr = 0 _last_bufnr = 0
_highlights = {} _highlights = {}
from collections import defaultdict as _defaultdict
_environ = _defaultdict(lambda: '')
del _defaultdict
_thread_id = None _thread_id = None
@ -169,6 +172,8 @@ def eval(expr):
return vars[expr[2:]] return vars[expr[2:]]
elif expr.startswith('&'): elif expr.startswith('&'):
return options[expr[1:]] return options[expr[1:]]
elif expr.startswith('$'):
return _environ[expr[1:]]
elif expr.startswith('PowerlineRegisterCachePurgerEvent'): elif expr.startswith('PowerlineRegisterCachePurgerEvent'):
_buf_purge_events.add(expr[expr.find('"') + 1:expr.rfind('"') - 1]) _buf_purge_events.add(expr[expr.find('"') + 1:expr.rfind('"') - 1])
return '0' return '0'
@ -708,6 +713,8 @@ def _with(key, *args, **kwargs):
return _WithDict(options, **kwargs) return _WithDict(options, **kwargs)
elif key == 'globals': elif key == 'globals':
return _WithDict(vars, **kwargs) return _WithDict(vars, **kwargs)
elif key == 'environ':
return _WithDict(_environ, **kwargs)
elif key == 'split': elif key == 'split':
return _WithSplit() return _WithSplit()