Merge branch 'master' into themes

# Conflicts:
#	rtv/__main__.py
#	rtv/page.py
#	rtv/submission_page.py
#	rtv/subreddit_page.py
#	rtv/subscription_page.py
#	rtv/terminal.py
#	rtv/theme.py
This commit is contained in:
Michael Lazar
2017-09-10 22:26:06 -04:00
13 changed files with 176 additions and 120 deletions

View File

@@ -1,8 +1,9 @@
import os
import codecs
import configparser
import curses
import logging
import os
import configparser
from contextlib import contextmanager
from .config import THEMES, DEFAULT_THEMES
from .exceptions import ConfigError
@@ -116,6 +117,7 @@ class Theme(object):
self.monochrome = monochrome
self._color_pair_map = None
self._attribute_map = None
self._modifier = None
self.required_color_pairs = 0
self.required_colors = 0
@@ -206,7 +208,7 @@ class Theme(object):
self._attribute_map[element] = attrs
def get(self, val, highlight=False):
def get(self, element, modifier=None):
"""
Returns the curses attribute code for the given element.
"""
@@ -214,10 +216,25 @@ class Theme(object):
raise RuntimeError('Attempted to access theme attribute before '
'calling initialize_curses_theme()')
if highlight:
val = val + '.highlight'
modifier = modifier or self._modifier
if modifier:
modified_element = '{0}.{1}'.format(element, modifier)
if modified_element in self._elements:
return self._elements[modified_element]
return self._attribute_map[val]
return self._attribute_map[element]
@contextmanager
def set_modifier(self, modifier=None):
# This case is undefined if the context manager is nested
assert self._modifier is None
self._modifier = modifier
try:
yield
finally:
self._modifier = None
@classmethod
def list_themes(cls, path=THEMES):