diff --git a/powerline/__init__.py b/powerline/__init__.py index 78aa9bb0..1d01d5d5 100644 --- a/powerline/__init__.py +++ b/powerline/__init__.py @@ -103,7 +103,7 @@ class PowerlineLogger(object): _fallback_logger = None -def get_fallback_logger(): +def get_fallback_logger(stream=None): global _fallback_logger if _fallback_logger: return _fallback_logger @@ -112,7 +112,7 @@ def get_fallback_logger(): formatter = logging.Formatter(log_format) level = logging.WARNING - handler = logging.StreamHandler() + handler = logging.StreamHandler(stream) handler.setLevel(level) handler.setFormatter(formatter) @@ -195,7 +195,7 @@ def load_config(cfg_path, find_config_files, config_loader, loader_callback=None return ret -def _get_log_handler(common_config): +def _get_log_handler(common_config, stream=None): '''Get log handler. :param dict common_config: @@ -211,17 +211,17 @@ def _get_log_handler(common_config): os.mkdir(log_dir) return logging.FileHandler(log_file) else: - return logging.StreamHandler() + return logging.StreamHandler(stream) -def create_logger(common_config): +def create_logger(common_config, stream=None): '''Create logger according to provided configuration ''' log_format = common_config['log_format'] formatter = logging.Formatter(log_format) level = getattr(logging, common_config['log_level']) - handler = _get_log_handler(common_config) + handler = _get_log_handler(common_config, stream) handler.setLevel(level) handler.setFormatter(formatter) @@ -456,7 +456,7 @@ class Powerline(object): self.import_paths = self.common_config['paths'] if not self.logger: - self.logger = create_logger(self.common_config) + self.logger = create_logger(self.common_config, self.default_log_stream) if not self.pl: self.pl = PowerlineLogger(self.use_daemon_threads, self.logger, self.ext) @@ -562,6 +562,14 @@ class Powerline(object): else: self.renderer = renderer + default_log_stream = sys.stdout + '''Default stream for default log handler + + Usually it is ``sys.stderr``, but there is sometimes a reason to prefer + ``sys.stdout`` or a custom file-like object. It is not supposed to be used + to write to some file. + ''' + def setup_components(self, components): '''Run component-specific setup @@ -847,7 +855,7 @@ class Powerline(object): if 'prefix' not in kwargs: kwargs['prefix'] = 'powerline' exception = kwargs.pop('exception', None) - pl = getattr(self, 'pl', None) or get_fallback_logger() + pl = getattr(self, 'pl', None) or get_fallback_logger(self.default_log_stream) if exception: try: reraise(exception) diff --git a/powerline/bindings/vim/plugin/powerline.vim b/powerline/bindings/vim/plugin/powerline.vim index 8f839236..5ec007c0 100644 --- a/powerline/bindings/vim/plugin/powerline.vim +++ b/powerline/bindings/vim/plugin/powerline.vim @@ -99,6 +99,7 @@ finally echohl None call s:rcmd("def powerline_troubleshoot():") call s:rcmd(" import sys") + call s:rcmd(" import vim") call s:rcmd(" if sys.version_info < (2, 6):") call s:rcmd(" print('Too old python version: ' + sys.version + ' (first supported is 2.6)')") call s:rcmd(" elif sys.version_info[0] == 3 and sys.version_info[1] < 2:") @@ -123,10 +124,12 @@ finally call s:rcmd(" print('neither it is installed system-wide')") call s:rcmd(" real_powerline_dir = os.path.realpath(powerline_dir)") call s:rcmd(" real_this_dir = os.path.realpath(this_dir)") - call s:rcmd(" if powerline_appended_path is not None and real_this_dir != powerline_appended_path:") + call s:rcmd(" this_dir_par = os.path.dirname(real_this_dir)") + call s:rcmd(" powerline_appended_path = globals().get('powerline_appended_path')") + call s:rcmd(" if powerline_appended_path is not None and this_dir_par != powerline_appended_path:") call s:rcmd(" print('Check your installation: this script is symlinked somewhere')") call s:rcmd(" print('where powerline is not present: {0!r} != {1!r}.'.format(") - call s:rcmd(" real_this_dir, sys.path[-1]))") + call s:rcmd(" real_this_dir, powerline_appended_path))") call s:rcmd(" elif real_powerline_dir != real_this_dir:") call s:rcmd(" print('It appears that you have two powerline versions installed:')") call s:rcmd(" print('one in ' + real_powerline_dir + ', other in ' + real_this_dir + '.')") diff --git a/powerline/vim.py b/powerline/vim.py index a443b74c..ec754107 100644 --- a/powerline/vim.py +++ b/powerline/vim.py @@ -31,6 +31,8 @@ class VimPowerline(Powerline): self.pyeval = pyeval self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')' + default_log_stream = sys.stdout + def add_local_theme(self, key, config): '''Add local themes at runtime (during vim session). diff --git a/tests/test_local_overrides.vim b/tests/test_local_overrides.vim index 050e393e..ec902856 100755 --- a/tests/test_local_overrides.vim +++ b/tests/test_local_overrides.vim @@ -3,6 +3,9 @@ set encoding=utf-8 let g:powerline_config_path = expand(':p:h:h') . '/powerline/config_files' let g:powerline_config_overrides = {'common': {'default_top_theme': 'ascii'}} let g:powerline_theme_overrides__default = {'segment_data': {'line_current_symbol': {'contents': 'LN '}, 'branch': {'before': 'B '}}} + +redir => g:messages + try python import powerline.vim let pycmd = 'python' @@ -36,4 +39,10 @@ if result isnot# '%#Pl_22_24320_148_11523840_bold# NORMAL %#Pl_148_11523840_236_ cquit endif +redir END +if g:messages =~ '\S' + call writefile(['Non-empty messages:', g:messages], 'message.fail') + cquit +endif + qall! diff --git a/tests/test_tabline.vim b/tests/test_tabline.vim index 00c807a7..9d829ea6 100755 --- a/tests/test_tabline.vim +++ b/tests/test_tabline.vim @@ -6,6 +6,8 @@ edit abc tabedit def tabedit ghi +redir => g:messages + try let &columns = 80 let result = eval(&tabline[2:]) @@ -45,4 +47,10 @@ if result isnot# '%#Pl_240_5789784_235_2500134_NONE# 1 %#Pl_240_5789784_235_25 cquit endif +redir END +if g:messages =~ '\S' + call writefile(['Non-empty messages:', g:messages], 'message.fail') + cquit +endif + qall!