diff --git a/powerline/__init__.py b/powerline/__init__.py index 0f6373d1..4aa1eeaa 100644 --- a/powerline/__init__.py +++ b/powerline/__init__.py @@ -113,7 +113,12 @@ class Powerline(object): self.find_config_file = lambda cfg_path: find_config_file(config_paths, cfg_path) self.cr_kwargs_lock = Lock() - self.create_renderer_kwargs = {} + self.create_renderer_kwargs = { + 'load_main': True, + 'load_colors': True, + 'load_colorscheme': True, + 'load_theme': True, + } self.shutdown_event = shutdown_event or Event() self.config_loader = config_loader or ConfigLoader(shutdown_event=self.shutdown_event) @@ -123,8 +128,6 @@ class Powerline(object): self.prev_ext_config = None self.pl = None - self.create_renderer(load_main=True, load_colors=True, load_colorscheme=True, load_theme=True) - def create_renderer(self, load_main=False, load_colors=False, load_colorscheme=False, load_theme=False): '''(Re)create renderer object. Can be used after Powerline object was successfully initialized. If any of the below parameters except @@ -342,18 +345,25 @@ class Powerline(object): ''' return None - def render(self, *args, **kwargs): - '''Lock renderer from modifications and pass all arguments further to - ``self.renderer.render()``. - ''' + def update_renderer(self): + '''Updates/creates a renderer if needed.''' + create_renderer_kwargs = None with self.cr_kwargs_lock: if self.create_renderer_kwargs: - try: - self.create_renderer(**self.create_renderer_kwargs) - except Exception as e: - self.pl.exception('Failed to create renderer: {0}', str(e)) - finally: - self.create_renderer_kwargs.clear() + create_renderer_kwargs = self.create_renderer_kwargs.copy() + if create_renderer_kwargs: + try: + self.create_renderer(**create_renderer_kwargs) + except Exception as e: + self.pl.exception('Failed to create renderer: {0}', str(e)) + finally: + self.create_renderer_kwargs.clear() + + def render(self, *args, **kwargs): + '''Update/create renderer if needed and pass all arguments further to + ``self.renderer.render()``. + ''' + self.update_renderer() return self.renderer.render(*args, **kwargs) def shutdown(self): diff --git a/powerline/vim.py b/powerline/vim.py index b0610baf..df89b604 100644 --- a/powerline/vim.py +++ b/powerline/vim.py @@ -46,6 +46,7 @@ class VimPowerline(Powerline): ``True`` if theme was added successfully and ``False`` if theme with the same matcher already exists. ''' + self.update_renderer() key = self.get_matcher(key) try: self.renderer.add_local_theme(key, {'config': config}) diff --git a/tests/test_config_reload.py b/tests/test_config_reload.py index 2dc34011..7565c834 100644 --- a/tests/test_config_reload.py +++ b/tests/test_config_reload.py @@ -128,8 +128,8 @@ class TestConfigReload(TestCase): def test_reload_main(self): with get_powerline(run_once=False) as p: with replace_item(globals(), 'config', deepcopy(config)): - self.assertAccessEvents('config', 'colors', 'colorschemes/test/default', 'themes/test/default') self.assertEqual(p.render(), '<1 2 1> s<2 4 False>>><3 4 4>g<4 False False>>>') + self.assertAccessEvents('config', 'colors', 'colorschemes/test/default', 'themes/test/default') config['config']['common']['spaces'] = 1 add_watcher_events(p, 'config')