diff options
Diffstat (limited to 'ranger/gui/colorscheme.py')
-rw-r--r-- | ranger/gui/colorscheme.py | 196 |
1 files changed, 98 insertions, 98 deletions
diff --git a/ranger/gui/colorscheme.py b/ranger/gui/colorscheme.py index 34e59f55..0a142d52 100644 --- a/ranger/gui/colorscheme.py +++ b/ranger/gui/colorscheme.py @@ -37,103 +37,103 @@ from ranger.ext.cached_function import cached_function from ranger.ext.iter_tools import flatten class ColorScheme(object): - """ - This is the class that colorschemes must inherit from. - - it defines the get() method, which returns the color tuple - which fits to the given keys. - """ - - @cached_function - def get(self, *keys): - """ - Returns the (fg, bg, attr) for the given keys. - - Using this function rather than use() will cache all - colors for faster access. - """ - context = Context(keys) - color = self.use(context) - if len(color) != 3 or not all(isinstance(value, int) \ - for value in color): - raise ValueError("Bad Value from colorscheme. Need " - "a tuple of (foreground_color, background_color, attribute).") - return color - - @cached_function - def get_attr(self, *keys): - """ - Returns the curses attribute for the specified keys - - Ready to use for curses.setattr() - """ - fg, bg, attr = self.get(*flatten(keys)) - return attr | color_pair(get_color(fg, bg)) - - def use(self, context): - """ - Use the colorscheme to determine the (fg, bg, attr) tuple. - - Override this method in your own colorscheme. - """ - return (-1, -1, 0) + """ + This is the class that colorschemes must inherit from. + + it defines the get() method, which returns the color tuple + which fits to the given keys. + """ + + @cached_function + def get(self, *keys): + """ + Returns the (fg, bg, attr) for the given keys. + + Using this function rather than use() will cache all + colors for faster access. + """ + context = Context(keys) + color = self.use(context) + if len(color) != 3 or not all(isinstance(value, int) \ + for value in color): + raise ValueError("Bad Value from colorscheme. Need " + "a tuple of (foreground_color, background_color, attribute).") + return color + + @cached_function + def get_attr(self, *keys): + """ + Returns the curses attribute for the specified keys + + Ready to use for curses.setattr() + """ + fg, bg, attr = self.get(*flatten(keys)) + return attr | color_pair(get_color(fg, bg)) + + def use(self, context): + """ + Use the colorscheme to determine the (fg, bg, attr) tuple. + + Override this method in your own colorscheme. + """ + return (-1, -1, 0) def _colorscheme_name_to_class(signal): - # Find the colorscheme. First look in ~/.config/ranger/colorschemes, - # then at RANGERDIR/colorschemes. If the file contains a class - # named Scheme, it is used. Otherwise, an arbitrary other class - # is picked. - if isinstance(signal.value, ColorScheme): return - - if not signal.value: - signal.value = 'default' - - scheme_name = signal.value - usecustom = not ranger.arg.clean - - def exists(colorscheme): - return os.path.exists(colorscheme + '.py') - - def is_scheme(x): - try: - return issubclass(x, ColorScheme) - except: - return False - - # create ~/.config/ranger/colorschemes/__init__.py if it doesn't exist - if usecustom: - if os.path.exists(signal.fm.confpath('colorschemes')): - initpy = signal.fm.confpath('colorschemes', '__init__.py') - if not os.path.exists(initpy): - open(initpy, 'a').close() - - if usecustom and \ - exists(signal.fm.confpath('colorschemes', scheme_name)): - scheme_supermodule = 'colorschemes' - elif exists(signal.fm.relpath('colorschemes', scheme_name)): - scheme_supermodule = 'ranger.colorschemes' - usecustom = False - else: - scheme_supermodule = None # found no matching file. - - if scheme_supermodule is None: - if signal.previous and isinstance(signal.previous, ColorScheme): - signal.value = signal.previous - else: - signal.value = ColorScheme() - raise Exception("Cannot locate colorscheme `%s'" % scheme_name) - else: - if usecustom: allow_access_to_confdir(ranger.arg.confdir, True) - scheme_module = getattr(__import__(scheme_supermodule, - globals(), locals(), [scheme_name], 0), scheme_name) - if usecustom: allow_access_to_confdir(ranger.arg.confdir, False) - if hasattr(scheme_module, 'Scheme') \ - and is_scheme(scheme_module.Scheme): - signal.value = scheme_module.Scheme() - else: - for var in scheme_module.__dict__.values(): - if var != ColorScheme and is_scheme(var): - signal.value = var() - break - else: - raise Exception("The module contains no valid colorscheme!") + # Find the colorscheme. First look in ~/.config/ranger/colorschemes, + # then at RANGERDIR/colorschemes. If the file contains a class + # named Scheme, it is used. Otherwise, an arbitrary other class + # is picked. + if isinstance(signal.value, ColorScheme): return + + if not signal.value: + signal.value = 'default' + + scheme_name = signal.value + usecustom = not ranger.arg.clean + + def exists(colorscheme): + return os.path.exists(colorscheme + '.py') + + def is_scheme(x): + try: + return issubclass(x, ColorScheme) + except: + return False + + # create ~/.config/ranger/colorschemes/__init__.py if it doesn't exist + if usecustom: + if os.path.exists(signal.fm.confpath('colorschemes')): + initpy = signal.fm.confpath('colorschemes', '__init__.py') + if not os.path.exists(initpy): + open(initpy, 'a').close() + + if usecustom and \ + exists(signal.fm.confpath('colorschemes', scheme_name)): + scheme_supermodule = 'colorschemes' + elif exists(signal.fm.relpath('colorschemes', scheme_name)): + scheme_supermodule = 'ranger.colorschemes' + usecustom = False + else: + scheme_supermodule = None # found no matching file. + + if scheme_supermodule is None: + if signal.previous and isinstance(signal.previous, ColorScheme): + signal.value = signal.previous + else: + signal.value = ColorScheme() + raise Exception("Cannot locate colorscheme `%s'" % scheme_name) + else: + if usecustom: allow_access_to_confdir(ranger.arg.confdir, True) + scheme_module = getattr(__import__(scheme_supermodule, + globals(), locals(), [scheme_name], 0), scheme_name) + if usecustom: allow_access_to_confdir(ranger.arg.confdir, False) + if hasattr(scheme_module, 'Scheme') \ + and is_scheme(scheme_module.Scheme): + signal.value = scheme_module.Scheme() + else: + for var in scheme_module.__dict__.values(): + if var != ColorScheme and is_scheme(var): + signal.value = var() + break + else: + raise Exception("The module contains no valid colorscheme!") |