diff --git a/powerline/colorscheme.py b/powerline/colorscheme.py index cb345904..62997a91 100644 --- a/powerline/colorscheme.py +++ b/powerline/colorscheme.py @@ -1,5 +1,10 @@ # -*- coding: utf-8 -*- + +class Colorscheme(object): + def __init__(self, colorscheme): + pass + cterm_to_hex = { 16: 0x000000, 17: 0x00005f, 18: 0x000087, 19: 0x0000af, 20: 0x0000d7, 21: 0x0000ff, 22: 0x005f00, 23: 0x005f5f, 24: 0x005f87, 25: 0x005faf, 26: 0x005fd7, 27: 0x005fff, diff --git a/powerline/core.py b/powerline/core.py index 6b7c7d04..db39bdb5 100644 --- a/powerline/core.py +++ b/powerline/core.py @@ -1,17 +1,50 @@ # -*- coding: utf-8 -*- +import importlib +import json +import os +import sys + +from colorscheme import Colorscheme +from theme import Theme + class Powerline(object): - def __init__(self, segments): - '''Create a new Powerline. + def __init__(self, ext): + try: + config_home = os.environ['XDG_CONFIG_HOME'] + except KeyError: + config_home = os.path.expanduser('~/.config') - Segments that aren't filler segments and whose contents aren't None are - dropped from the segment array. - ''' - self.renderer = None # FIXME This should be assigned here based on the current configuration - self.segments = [segment for segment in segments if segment['contents'] is not None or segment['filler']] + config_path = os.path.join(config_home, 'powerline') + plugin_path = os.path.realpath(os.path.dirname(__file__)) + self.search_paths = [config_path, plugin_path] - def render(self, renderer, width=None): - self.renderer = renderer(self.segments) + sys.path[:0] = self.search_paths - return self.renderer.render(width) + # Load main config file, limited to the current extension + self.config = self._load_json_config('config')[ext] + + # Load and initialize colorscheme + colorscheme_config = self._load_json_config(os.path.join('colorschemes', self.config['colorscheme'])) + self.colorscheme = Colorscheme(colorscheme_config) + + # Load and initialize extension theme + theme_config = self._load_json_config(os.path.join('themes', ext, self.config['theme'])) + self.theme = Theme(ext, theme_config) + + # Load and initialize extension renderer + renderer_module_name = 'powerline.ext.{0}.renderer'.format(ext) + renderer_class_name = '{0}Renderer'.format(ext.capitalize()) + renderer_class = getattr(importlib.import_module(renderer_module_name), renderer_class_name) + self.renderer = renderer_class(self.colorscheme, self.theme) + + def _load_json_config(self, config_file): + config_file += '.json' + for path in self.search_paths: + config_file_path = os.path.join(path, config_file) + if os.path.isfile(config_file_path): + with open(config_file_path, 'rb') as config_file_fp: + return json.load(config_file_fp) + + raise IOError('Config file not found in search path: {0}'.format(config_file)) diff --git a/powerline/ext/vim/renderer.py b/powerline/ext/vim/renderer.py index dc64f2d1..2716d466 100644 --- a/powerline/ext/vim/renderer.py +++ b/powerline/ext/vim/renderer.py @@ -6,8 +6,8 @@ from powerline.renderer import Renderer class VimRenderer(Renderer): '''Powerline vim segment renderer. ''' - def __init__(self, segments): - super(VimRenderer, self).__init__(segments) + def __init__(self, colorscheme, theme): + super(VimRenderer, self).__init__(colorscheme, theme) self.hl_groups = {} def hl(self, fg=None, bg=None, attr=None): diff --git a/powerline/renderer.py b/powerline/renderer.py index eb06e135..ec06a6a0 100644 --- a/powerline/renderer.py +++ b/powerline/renderer.py @@ -19,11 +19,11 @@ class Renderer(object): }, } - def __init__(self, segments): - self.segments = segments - self._hl = {} - def render(self, width=None): + def __init__(self, colorscheme, theme): + pass + + def render(self, mode, width=None): '''Render all the segments with the specified renderer. This method loops through the segment array and compares the diff --git a/powerline/theme.py b/powerline/theme.py index 40a96afc..aad09bdb 100644 --- a/powerline/theme.py +++ b/powerline/theme.py @@ -1 +1,6 @@ # -*- coding: utf-8 -*- + + +class Theme(object): + def __init__(self, ext, theme): + pass