Refactoring and adding some new themes
This commit is contained in:
@@ -217,6 +217,7 @@ class Content(object):
|
||||
data['title'] = sub.title
|
||||
data['text'] = sub.selftext
|
||||
data['created'] = cls.humanize_timestamp(sub.created_utc)
|
||||
data['created_long'] = cls.humanize_timestamp(sub.created_utc, True)
|
||||
data['comments'] = '{0} comments'.format(sub.num_comments)
|
||||
data['score'] = '{0} pts'.format('-' if sub.hide_score else sub.score)
|
||||
data['author'] = name
|
||||
|
||||
23
rtv/page.py
23
rtv/page.py
@@ -11,7 +11,7 @@ import six
|
||||
from kitchen.text.display import textual_width
|
||||
|
||||
from . import docs
|
||||
from .theme import ThemeList
|
||||
from .theme import get_next_theme, get_previous_theme
|
||||
from .objects import Controller, Command
|
||||
from .clipboard import copy
|
||||
from .exceptions import TemporaryFileError, ProgramError
|
||||
@@ -52,9 +52,6 @@ class Page(object):
|
||||
self.controller = None
|
||||
self.copy_to_clipboard = copy
|
||||
|
||||
# TODO: does this need to be a global?
|
||||
self.theme_list = ThemeList(term.theme)
|
||||
|
||||
self.active = True
|
||||
self._row = 0
|
||||
self._subwindows = None
|
||||
@@ -101,7 +98,7 @@ class Page(object):
|
||||
|
||||
@PageController.register(Command('PREVIOUS_THEME'))
|
||||
def previous_theme(self):
|
||||
theme = self.theme_list.previous()
|
||||
theme = get_previous_theme(self.term.theme)
|
||||
self.term.set_theme(theme)
|
||||
self.draw()
|
||||
message = self.term.theme.display_string
|
||||
@@ -109,7 +106,7 @@ class Page(object):
|
||||
|
||||
@PageController.register(Command('NEXT_THEME'))
|
||||
def next_theme(self):
|
||||
theme = self.theme_list.next()
|
||||
theme = get_next_theme(self.term.theme)
|
||||
self.term.set_theme(theme)
|
||||
self.draw()
|
||||
message = self.term.theme.display_string
|
||||
@@ -367,7 +364,7 @@ class Page(object):
|
||||
window = self.term.stdscr.derwin(1, n_cols, self._row, 0)
|
||||
window.erase()
|
||||
# curses.bkgd expects bytes in py2 and unicode in py3
|
||||
window.bkgd(str(' '), self.term.attr('PageTitle'))
|
||||
window.bkgd(str(' '), self.term.attr('TitleBar'))
|
||||
|
||||
sub_name = self.content.name
|
||||
sub_name = sub_name.replace('/r/front', 'Front Page')
|
||||
@@ -420,7 +417,7 @@ class Page(object):
|
||||
n_rows, n_cols = self.term.stdscr.getmaxyx()
|
||||
window = self.term.stdscr.derwin(1, n_cols, self._row, 0)
|
||||
window.erase()
|
||||
window.bkgd(str(' '), self.term.attr('PageOrder'))
|
||||
window.bkgd(str(' '), self.term.attr('OrderBar'))
|
||||
|
||||
banner = docs.BANNER_SEARCH if self.content.query else docs.BANNER
|
||||
items = banner.strip().split(' ')
|
||||
@@ -432,7 +429,7 @@ class Page(object):
|
||||
if self.content.order is not None:
|
||||
order = self.content.order.split('-')[0]
|
||||
col = text.find(order) - 3
|
||||
attr = self.term.attr('PageOrderHighlight')
|
||||
attr = self.term.attr('OrderBarHighlight')
|
||||
window.chgat(0, col, 3, attr)
|
||||
|
||||
self._row += 1
|
||||
@@ -499,12 +496,10 @@ class Page(object):
|
||||
# pushed out of bounds
|
||||
self.nav.cursor_index = len(self._subwindows) - 1
|
||||
|
||||
# TODO: Don't highlight the submission box
|
||||
|
||||
# Now that the windows are setup, we can take a second pass through
|
||||
# to draw the content
|
||||
# to draw the text onto each subwindow
|
||||
for index, (win, data, inverted) in enumerate(self._subwindows):
|
||||
if index == self.nav.cursor_index:
|
||||
if self.nav.absolute_index >= 0 and index == self.nav.cursor_index:
|
||||
win.bkgd(str(' '), self.term.attr('Selected'))
|
||||
with self.term.theme.turn_on_selected():
|
||||
self._draw_item(win, data, inverted)
|
||||
@@ -519,7 +514,7 @@ class Page(object):
|
||||
n_rows, n_cols = self.term.stdscr.getmaxyx()
|
||||
window = self.term.stdscr.derwin(1, n_cols, self._row, 0)
|
||||
window.erase()
|
||||
window.bkgd(str(' '), self.term.attr('Help'))
|
||||
window.bkgd(str(' '), self.term.attr('HelpBar'))
|
||||
|
||||
text = self.FOOTER.strip()
|
||||
self.term.add_line(window, text, 0, 0)
|
||||
|
||||
@@ -400,14 +400,14 @@ class SubmissionPage(Page):
|
||||
self.term.add_space(win)
|
||||
self.term.add_line(win, '{flair}'.format(**data), attr=attr)
|
||||
|
||||
attr = self.term.attr('Created')
|
||||
self.term.add_space(win)
|
||||
self.term.add_line(win, '{created}'.format(**data), attr=attr)
|
||||
|
||||
attr = self.term.attr('SubmissionSubreddit')
|
||||
self.term.add_space(win)
|
||||
self.term.add_line(win, '/r/{subreddit}'.format(**data), attr=attr)
|
||||
|
||||
attr = self.term.attr('Created')
|
||||
self.term.add_space(win)
|
||||
self.term.add_line(win, '{created_long}'.format(**data), attr=attr)
|
||||
|
||||
row = len(data['split_title']) + 2
|
||||
if data['url_full'] in self.config.history:
|
||||
attr = self.term.attr('LinkSeen')
|
||||
|
||||
156
rtv/theme.py
156
rtv/theme.py
@@ -50,31 +50,37 @@ class Theme(object):
|
||||
for i in range(256):
|
||||
COLOR_CODES['ansi_{0}'.format(i)] = i
|
||||
|
||||
# TODO: Do another pass through these names
|
||||
# TODO: Apply selected on top of items, not underneath them
|
||||
|
||||
# For compatibility with as many terminals as possible, the default theme
|
||||
# can only use the 8 basic colors with the default color as the background
|
||||
DEFAULT_THEME = {
|
||||
'modifiers': {
|
||||
'Normal': (None, None, None),
|
||||
'Selected': (None, None, None),
|
||||
'SelectedCursor': (None, None, curses.A_REVERSE),
|
||||
|
||||
'PageTitle': (curses.COLOR_CYAN, None, curses.A_BOLD | curses.A_REVERSE),
|
||||
'PageOrder': (curses.COLOR_YELLOW, None, curses.A_BOLD),
|
||||
'PageOrderHighlight': (curses.COLOR_YELLOW, None, curses.A_BOLD | curses.A_REVERSE),
|
||||
'Help': (curses.COLOR_CYAN, None, curses.A_BOLD | curses.A_REVERSE),
|
||||
},
|
||||
'page': {
|
||||
'TitleBar': (curses.COLOR_CYAN, None, curses.A_BOLD | curses.A_REVERSE),
|
||||
'OrderBar': (curses.COLOR_YELLOW, None, curses.A_BOLD),
|
||||
'OrderBarHighlight': (curses.COLOR_YELLOW, None, curses.A_BOLD | curses.A_REVERSE),
|
||||
'HelpBar': (curses.COLOR_CYAN, None, curses.A_BOLD | curses.A_REVERSE),
|
||||
'Prompt': (curses.COLOR_CYAN, None, curses.A_BOLD | curses.A_REVERSE),
|
||||
'NoticeInfo': (None, None, curses.A_BOLD),
|
||||
'NoticeLoading': (None, None, curses.A_BOLD),
|
||||
'NoticeError': (None, None, curses.A_BOLD),
|
||||
'NoticeSuccess': (None, None, curses.A_BOLD),
|
||||
|
||||
},
|
||||
# Fields that might be highlighted by the "SelectedCursor" element
|
||||
'cursor': {
|
||||
'CursorBlock': (None, None, None),
|
||||
'CursorBar1': (curses.COLOR_MAGENTA, None, None),
|
||||
'CursorBar2': (curses.COLOR_CYAN, None, None),
|
||||
'CursorBar3': (curses.COLOR_GREEN, None, None),
|
||||
'CursorBar4': (curses.COLOR_YELLOW, None, None),
|
||||
|
||||
},
|
||||
# Fields that might be highlighted by the "Selected" element
|
||||
'normal': {
|
||||
'CommentAuthor': (curses.COLOR_BLUE, None, curses.A_BOLD),
|
||||
'CommentAuthorSelf': (curses.COLOR_GREEN, None, curses.A_BOLD),
|
||||
'CommentCount': (None, None, None),
|
||||
@@ -104,60 +110,10 @@ class Theme(object):
|
||||
'LinkSeen': (curses.COLOR_MAGENTA, None, curses.A_UNDERLINE),
|
||||
'UserFlair': (curses.COLOR_YELLOW, None, curses.A_BOLD)
|
||||
}
|
||||
}
|
||||
|
||||
# List of elements that might be highlighted by the "Selected" row
|
||||
SELECTED_ELEMENTS = [
|
||||
'CommentAuthor',
|
||||
'CommentAuthorSelf',
|
||||
'CommentCount',
|
||||
'CommentText',
|
||||
'Created',
|
||||
'Downvote',
|
||||
'Gold',
|
||||
'HiddenCommentExpand',
|
||||
'HiddenCommentText',
|
||||
'MultiredditName',
|
||||
'MultiredditText',
|
||||
'NeutralVote',
|
||||
'NSFW',
|
||||
'Saved',
|
||||
'Score',
|
||||
'Separator',
|
||||
'Stickied',
|
||||
'SubscriptionName',
|
||||
'SubscriptionText',
|
||||
'SubmissionAuthor',
|
||||
'SubmissionFlair',
|
||||
'SubmissionSubreddit',
|
||||
'SubmissionText',
|
||||
'SubmissionTitle',
|
||||
'Upvote',
|
||||
'Link',
|
||||
'LinkSeen',
|
||||
'UserFlair'
|
||||
]
|
||||
|
||||
# List of elements that might be highlighted by the "SelectedCursor" row
|
||||
SELECTED_CURSOR_ELEMENTS = [
|
||||
'CursorBlock',
|
||||
'CursorBar1',
|
||||
'CursorBar2',
|
||||
'CursorBar3',
|
||||
'CursorBar4'
|
||||
]
|
||||
|
||||
# List of page elements that cannot be selected
|
||||
PAGE_ELEMENTS = [
|
||||
'PageOrder',
|
||||
'PageOrderHighlight',
|
||||
'PageTitle',
|
||||
'Help',
|
||||
'Prompt',
|
||||
'NoticeInfo',
|
||||
'NoticeLoading',
|
||||
'NoticeError',
|
||||
'NoticeSuccess',
|
||||
]
|
||||
DEFAULT_ELEMENTS = {k: v for group in DEFAULT_THEME.values()
|
||||
for k, v in group.items()}
|
||||
|
||||
# The SubmissionPage uses this to determine which color bar to use
|
||||
CURSOR_BARS = ['CursorBar1', 'CursorBar2', 'CursorBar3', 'CursorBar4']
|
||||
@@ -194,11 +150,11 @@ class Theme(object):
|
||||
self.required_colors = 0
|
||||
|
||||
if elements is None:
|
||||
elements = self.DEFAULT_THEME.copy()
|
||||
elements = self.DEFAULT_ELEMENTS.copy()
|
||||
|
||||
# Set any elements that weren't defined by the config to fallback to
|
||||
# the default color and attributes
|
||||
for key in self.DEFAULT_THEME.keys():
|
||||
for key in self.DEFAULT_ELEMENTS.keys():
|
||||
if key not in elements:
|
||||
elements[key] = (None, None, None)
|
||||
|
||||
@@ -210,17 +166,17 @@ class Theme(object):
|
||||
# 1. The default state - inherits from "Normal"
|
||||
# 2. The selected state - inherits from "Selected" and is
|
||||
# prefixed by the "@" sign.
|
||||
for name in self.SELECTED_ELEMENTS:
|
||||
for name in self.DEFAULT_THEME['normal']:
|
||||
dest = '@{0}'.format(name)
|
||||
self._set_fallback(elements, name, 'Selected', dest)
|
||||
self._set_fallback(elements, name, 'Normal')
|
||||
|
||||
for name in self.SELECTED_CURSOR_ELEMENTS:
|
||||
for name in self.DEFAULT_THEME['cursor']:
|
||||
dest = '@{0}'.format(name)
|
||||
self._set_fallback(elements, name, 'SelectedCursor', dest)
|
||||
self._set_fallback(elements, name, 'Normal')
|
||||
|
||||
for name in self.PAGE_ELEMENTS:
|
||||
for name in self.DEFAULT_THEME['page']:
|
||||
self._set_fallback(elements, name, 'Normal')
|
||||
|
||||
self.elements = elements
|
||||
@@ -233,14 +189,15 @@ class Theme(object):
|
||||
colors.add(bg)
|
||||
color_pairs.add((fg, bg))
|
||||
|
||||
# Don't count the default (-1, -1) as a color pair because it doesn't
|
||||
# need to be initialized by curses.init_pair().
|
||||
# Don't count the default (-1, -1) as a color pair because it
|
||||
# doesn't need to be initialized by curses.init_pair().
|
||||
color_pairs.discard((-1, -1))
|
||||
self.required_color_pairs = len(color_pairs)
|
||||
|
||||
# Determine how many colors the terminal needs to support in order to
|
||||
# be able to use the theme. This uses the common breakpoints that 99%
|
||||
# of terminals follow and doesn't take into account 88 color themes.
|
||||
# Determine how many colors the terminal needs to support in order
|
||||
# to be able to use the theme. This uses the common breakpoints
|
||||
# that 99% of terminals follow and doesn't take into account
|
||||
# 88 color themes.
|
||||
self.required_colors = None
|
||||
for marker in [0, 8, 16, 256]:
|
||||
if max(colors) < marker:
|
||||
@@ -353,7 +310,7 @@ class Theme(object):
|
||||
@classmethod
|
||||
def print_themes(cls, path=THEMES):
|
||||
"""
|
||||
Prints a human-readable summary of all of the installed themes to stdout.
|
||||
Prints a human-readable summary of the installed themes to stdout.
|
||||
|
||||
This is intended to be used as a command-line utility, outside of the
|
||||
main curses display loop.
|
||||
@@ -436,7 +393,7 @@ class Theme(object):
|
||||
|
||||
elements = {}
|
||||
for element, line in config.items('theme'):
|
||||
if element not in cls.DEFAULT_THEME:
|
||||
if element not in cls.DEFAULT_ELEMENTS:
|
||||
# Could happen if using a new config with an older version
|
||||
# of the software
|
||||
_logger.info('Skipping element %s', element)
|
||||
@@ -550,52 +507,47 @@ class ThemeList(object):
|
||||
to cycle through all of the available themes.
|
||||
"""
|
||||
|
||||
def __init__(self, current_theme=None):
|
||||
|
||||
self.index = 0
|
||||
self.current_theme = current_theme
|
||||
def __init__(self):
|
||||
self.themes = None
|
||||
self.errors = None
|
||||
|
||||
def load(self):
|
||||
def reload(self):
|
||||
"""
|
||||
This acts as a lazy load, it won't read all of the theme files from
|
||||
disk until the first time somebody tries to access the theme list.
|
||||
"""
|
||||
self.themes, self.errors = Theme.list_themes()
|
||||
|
||||
if self.current_theme is not None:
|
||||
def _step(self, theme, direction):
|
||||
"""
|
||||
Traverse the list in the given direction and return the next theme
|
||||
"""
|
||||
if not self.themes:
|
||||
self.reload()
|
||||
|
||||
# Try to find the starting index
|
||||
key = (self.current_theme.source, self.current_theme.name)
|
||||
key = (theme.source, theme.name)
|
||||
for i, theme in enumerate(self.themes):
|
||||
if (theme.source, theme.name) == key:
|
||||
self.index = i
|
||||
index = i
|
||||
break
|
||||
else:
|
||||
# If the current_theme was set from a custom source it might
|
||||
# If the theme was set from a custom source it might
|
||||
# not be a part of the list returned by list_themes().
|
||||
self.themes.insert(0, self.current_theme)
|
||||
self.themes.insert(0, theme)
|
||||
index = 0
|
||||
|
||||
self.current_theme = self.themes[self.index]
|
||||
index = (index + direction) % len(self.themes)
|
||||
new_theme = self.themes[index]
|
||||
return new_theme
|
||||
|
||||
def next(self):
|
||||
"""
|
||||
Retrieve the next theme in the list
|
||||
"""
|
||||
if not self.themes:
|
||||
self.load()
|
||||
def next(self, theme):
|
||||
return self._step(theme, 1)
|
||||
|
||||
self.index = (self.index + 1) % len(self.themes)
|
||||
self.current_theme = self.themes[self.index]
|
||||
return self.current_theme
|
||||
def previous(self, theme):
|
||||
return self._step(theme, -1)
|
||||
|
||||
def previous(self):
|
||||
"""
|
||||
Retrieve the previous theme in the list
|
||||
"""
|
||||
if not self.themes:
|
||||
self.load()
|
||||
|
||||
self.index = (self.index - 1) % len(self.themes)
|
||||
self.current_theme = self.themes[self.index]
|
||||
return self.current_theme
|
||||
theme_list = ThemeList()
|
||||
get_next_theme = theme_list.next
|
||||
get_previous_theme = theme_list.previous
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
# http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
|
||||
# https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
|
||||
|
||||
[theme]
|
||||
;<element> = <foreground> <background> <attributes>
|
||||
Normal = default default -
|
||||
Selected = - - -
|
||||
SelectedCursor = - - reverse
|
||||
|
||||
PageTitle = cyan - bold+reverse
|
||||
PageOrder = yellow - bold
|
||||
PageOrderHighlight = yellow - bold+reverse
|
||||
Help = cyan - bold+reverse
|
||||
TitleBar = cyan - bold+reverse
|
||||
OrderBar = yellow - bold
|
||||
OrderBarHighlight = yellow - bold+reverse
|
||||
HelpBar = cyan - bold+reverse
|
||||
Prompt = cyan - bold+reverse
|
||||
NoticeInfo = - - bold
|
||||
NoticeLoading = - - bold
|
||||
|
||||
50
rtv/themes/high_contrast.cfg
Normal file
50
rtv/themes/high_contrast.cfg
Normal file
@@ -0,0 +1,50 @@
|
||||
[theme]
|
||||
;<element> = <foreground> <background> <attributes>
|
||||
Normal = default default -
|
||||
Selected = - - -
|
||||
SelectedCursor = - - reverse
|
||||
|
||||
TitleBar = cyan - bold+reverse
|
||||
OrderBar = yellow - bold
|
||||
OrderBarHighlight = yellow - bold+reverse
|
||||
HelpBar = cyan - bold+reverse
|
||||
Prompt = cyan - bold+reverse
|
||||
NoticeInfo = - - bold
|
||||
NoticeLoading = - - bold
|
||||
NoticeError = - - bold
|
||||
NoticeSuccess = - - bold
|
||||
|
||||
CursorBlock = - - -
|
||||
CursorBar1 = magenta - -
|
||||
CursorBar2 = cyan - -
|
||||
CursorBar3 = green - -
|
||||
CursorBar4 = yellow - -
|
||||
|
||||
CommentAuthor = cyan - bold
|
||||
CommentAuthorSelf = green - bold
|
||||
CommentCount = - - -
|
||||
CommentText = - - -
|
||||
Created = - - -
|
||||
Downvote = red - bold
|
||||
Gold = yellow - bold
|
||||
HiddenCommentExpand = - - bold
|
||||
HiddenCommentText = - - -
|
||||
MultiredditName = yellow - bold
|
||||
MultiredditText = - - -
|
||||
NeutralVote = - - bold
|
||||
NSFW = red - bold+reverse
|
||||
Saved = green - -
|
||||
Score = - - -
|
||||
Separator = - - bold
|
||||
Stickied = green - -
|
||||
SubscriptionName = yellow - bold
|
||||
SubscriptionText = - - -
|
||||
SubmissionAuthor = green - bold
|
||||
SubmissionFlair = red - -
|
||||
SubmissionSubreddit = yellow - -
|
||||
SubmissionText = - - -
|
||||
SubmissionTitle = - - bold
|
||||
Upvote = green - bold
|
||||
Link = cyan - underline
|
||||
LinkSeen = magenta - underline
|
||||
UserFlair = yellow - bold
|
||||
73
rtv/themes/molokai.cfg
Normal file
73
rtv/themes/molokai.cfg
Normal file
@@ -0,0 +1,73 @@
|
||||
# https://github.com/tomasr/molokai
|
||||
|
||||
# normal ansi_252, ansi_234
|
||||
# line number ansi_239, ansi_235
|
||||
# cursor ansi_252, ansi_236
|
||||
# pmenusel ansi_255, ansi_242
|
||||
|
||||
# text - normal ansi_252
|
||||
# text - dim ansi_244
|
||||
# text - ultra dim ansi_241
|
||||
|
||||
# purple ansi_141
|
||||
# green ansi_154
|
||||
# magenta ansi_199, ansi_16
|
||||
# gold ansi_222, ansi_233
|
||||
# red ansi_197
|
||||
# red - dim ansi_203
|
||||
# orange ansi_208
|
||||
# blue ansi_81
|
||||
# blue - dim ansi_67, ansi_16
|
||||
|
||||
|
||||
|
||||
[theme]
|
||||
;<element> = <foreground> <background> <attributes>
|
||||
Normal = ansi_252 ansi_234 -
|
||||
Selected = - ansi_236 -
|
||||
SelectedCursor = - - bold+reverse
|
||||
|
||||
TitleBar = ansi_81 - bold+reverse
|
||||
OrderBar = ansi_244 ansi_235 -
|
||||
OrderBarHighlight = ansi_244 ansi_235 bold+reverse
|
||||
HelpBar = ansi_81 - bold+reverse
|
||||
Prompt = ansi_208 - bold+reverse
|
||||
NoticeInfo = - - bold
|
||||
NoticeLoading = - - bold
|
||||
NoticeError = ansi_199 - bold
|
||||
NoticeSuccess = ansi_154 - bold
|
||||
|
||||
CursorBlock = ansi_252 - -
|
||||
CursorBar1 = ansi_141 - -
|
||||
CursorBar2 = ansi_197 - -
|
||||
CursorBar3 = ansi_154 - -
|
||||
CursorBar4 = ansi_208 - -
|
||||
|
||||
CommentAuthor = ansi_81 - -
|
||||
CommentAuthorSelf = ansi_154 - -
|
||||
CommentCount = - - -
|
||||
CommentText = - - -
|
||||
Created = - - -
|
||||
Downvote = ansi_197 - bold
|
||||
Gold = ansi_222 - bold
|
||||
HiddenCommentExpand = ansi_244 - bold
|
||||
HiddenCommentText = ansi_244 - -
|
||||
MultiredditName = - - bold
|
||||
MultiredditText = ansi_244 - -
|
||||
NeutralVote = - - bold
|
||||
NSFW = ansi_197 - bold+reverse
|
||||
Saved = ansi_199 - -
|
||||
Score = - - bold
|
||||
Separator = ansi_241 - bold
|
||||
Stickied = ansi_208 - -
|
||||
SubscriptionName = - - bold
|
||||
SubscriptionText = ansi_244 - -
|
||||
SubmissionAuthor = ansi_154 - -
|
||||
SubmissionFlair = ansi_197 - -
|
||||
SubmissionSubreddit = ansi_222 - -
|
||||
SubmissionText = - - -
|
||||
SubmissionTitle = - - bold
|
||||
Upvote = ansi_154 - bold
|
||||
Link = ansi_67 - underline
|
||||
LinkSeen = ansi_141 - underline
|
||||
UserFlair = ansi_222 - bold
|
||||
71
rtv/themes/papercolor.cfg
Normal file
71
rtv/themes/papercolor.cfg
Normal file
@@ -0,0 +1,71 @@
|
||||
# https://github.com/NLKNguyen/papercolor-theme
|
||||
|
||||
# background ansi_255
|
||||
# negative ansi_124
|
||||
# positive ansi_28
|
||||
# olive ansi_64
|
||||
# neutral ansi_31
|
||||
# comment ansi_102
|
||||
# navy ansi_24
|
||||
# foreground ansi_238
|
||||
# nontext ansi_250
|
||||
# red ansi_160
|
||||
# pink ansi_162
|
||||
# purple ansi_91
|
||||
# accent ansi_166
|
||||
# orange ansi_166
|
||||
# blue ansi_25
|
||||
# highlight ansi_24
|
||||
# aqua ansi_31
|
||||
# green ansi_28
|
||||
|
||||
[theme]
|
||||
;<element> = <foreground> <background> <attributes>
|
||||
Normal = ansi_238 ansi_255 -
|
||||
Selected = - ansi_254 -
|
||||
SelectedCursor = - - bold+reverse
|
||||
|
||||
TitleBar = ansi_24 - bold+reverse
|
||||
OrderBar = ansi_25 - bold
|
||||
OrderBarHighlight = ansi_25 - bold+reverse
|
||||
HelpBar = ansi_24 - bold+reverse
|
||||
Prompt = ansi_31 - bold+reverse
|
||||
NoticeInfo = ansi_238 ansi_252 bold
|
||||
NoticeLoading = ansi_238 ansi_252 bold
|
||||
NoticeError = ansi_124 ansi_225 bold
|
||||
NoticeSuccess = ansi_28 ansi_157 bold
|
||||
|
||||
CursorBlock = ansi_102 - -
|
||||
CursorBar1 = ansi_162 - -
|
||||
CursorBar2 = ansi_166 - -
|
||||
CursorBar3 = ansi_25 - -
|
||||
CursorBar4 = ansi_91 - -
|
||||
|
||||
CommentAuthor = ansi_25 - bold
|
||||
CommentAuthorSelf = ansi_64 - bold
|
||||
CommentCount = - - -
|
||||
CommentText = - - -
|
||||
Created = - - -
|
||||
Downvote = ansi_124 - bold
|
||||
Gold = ansi_166 - bold
|
||||
HiddenCommentExpand = ansi_102 - bold
|
||||
HiddenCommentText = ansi_102 - -
|
||||
MultiredditName = - - bold
|
||||
MultiredditText = ansi_102 - -
|
||||
NeutralVote = - - bold
|
||||
NSFW = ansi_160 - bold+reverse
|
||||
Saved = ansi_31 - bold
|
||||
Score = - - bold
|
||||
Separator = - - bold
|
||||
Stickied = ansi_166 - bold
|
||||
SubscriptionName = - - bold
|
||||
SubscriptionText = ansi_102 - -
|
||||
SubmissionAuthor = ansi_64 - bold
|
||||
SubmissionFlair = ansi_162 - bold
|
||||
SubmissionSubreddit = ansi_166 - bold
|
||||
SubmissionText = - - -
|
||||
SubmissionTitle = - - bold
|
||||
Upvote = ansi_28 - bold
|
||||
Link = ansi_24 - underline
|
||||
LinkSeen = ansi_91 - underline
|
||||
UserFlair = ansi_162 - bold
|
||||
@@ -23,10 +23,10 @@ Normal = ansi_244 ansi_234 -
|
||||
Selected = ansi_244 ansi_235 -
|
||||
SelectedCursor = ansi_244 ansi_235 bold+reverse
|
||||
|
||||
PageTitle = ansi_37 - bold+reverse
|
||||
PageOrder = ansi_240 - bold
|
||||
PageOrderHighlight = ansi_240 - bold+reverse
|
||||
Help = ansi_37 - bold+reverse
|
||||
TitleBar = ansi_37 - bold+reverse
|
||||
OrderBar = ansi_245 - bold
|
||||
OrderBarHighlight = ansi_245 - bold+reverse
|
||||
HelpBar = ansi_37 - bold+reverse
|
||||
Prompt = ansi_33 - bold+reverse
|
||||
NoticeInfo = - - bold
|
||||
NoticeLoading = - - bold
|
||||
@@ -46,18 +46,18 @@ CommentText = - - -
|
||||
Created = - - -
|
||||
Downvote = ansi_160 - bold
|
||||
Gold = ansi_136 - bold
|
||||
HiddenCommentExpand = ansi_245 - bold
|
||||
HiddenCommentText = ansi_245 - -
|
||||
MultiredditName = ansi_240 - bold
|
||||
MultiredditText = ansi_245 - -
|
||||
HiddenCommentExpand = ansi_240 - bold
|
||||
HiddenCommentText = ansi_240 - -
|
||||
MultiredditName = ansi_245 - bold
|
||||
MultiredditText = ansi_240 - -
|
||||
NeutralVote = - - bold
|
||||
NSFW = ansi_125 - bold+reverse
|
||||
NSFW = ansi_160 - bold+reverse
|
||||
Saved = ansi_125 - -
|
||||
Score = - - -
|
||||
Separator = - - bold
|
||||
Stickied = ansi_136 - -
|
||||
SubscriptionName = ansi_240 - bold
|
||||
SubscriptionText = ansi_245 - -
|
||||
SubscriptionName = ansi_245 - bold
|
||||
SubscriptionText = ansi_240 - -
|
||||
SubmissionAuthor = ansi_64 - bold
|
||||
SubmissionFlair = ansi_160 - -
|
||||
SubmissionSubreddit = ansi_166 - -
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
;<element> = <foreground> <background> <attributes>
|
||||
Normal = ansi_241 ansi_230 -
|
||||
Selected = ansi_241 ansi_254 -
|
||||
SelectedCursor = ansi_241 ansi_254 reverse
|
||||
SelectedCursor = ansi_241 ansi_254 bold+reverse
|
||||
|
||||
PageTitle = ansi_37 - bold+reverse
|
||||
PageOrder = ansi_245 - bold
|
||||
PageOrderHighlight = ansi_245 - bold+reverse
|
||||
Help = ansi_37 - bold+reverse
|
||||
TitleBar = ansi_37 - bold+reverse
|
||||
OrderBar = ansi_245 - bold
|
||||
OrderBarHighlight = ansi_245 - bold+reverse
|
||||
HelpBar = ansi_37 - bold+reverse
|
||||
Prompt = ansi_33 - bold+reverse
|
||||
NoticeInfo = - - bold
|
||||
NoticeLoading = - - bold
|
||||
@@ -34,10 +34,10 @@ NoticeError = ansi_160 - bold
|
||||
NoticeSuccess = ansi_64 - bold
|
||||
|
||||
CursorBlock = ansi_245 - -
|
||||
CursorBar1 = ansi_125 - -
|
||||
CursorBar2 = ansi_160 - -
|
||||
CursorBar3 = ansi_61 - -
|
||||
CursorBar4 = ansi_37 - -
|
||||
CursorBar1 = ansi_125 - bold
|
||||
CursorBar2 = ansi_160 - bold
|
||||
CursorBar3 = ansi_61 - bold
|
||||
CursorBar4 = ansi_37 - bold
|
||||
|
||||
CommentAuthor = ansi_33 - bold
|
||||
CommentAuthorSelf = ansi_64 - bold
|
||||
@@ -51,16 +51,16 @@ HiddenCommentText = ansi_245 - -
|
||||
MultiredditName = ansi_240 - bold
|
||||
MultiredditText = ansi_245 - -
|
||||
NeutralVote = - - bold
|
||||
NSFW = ansi_125 - bold+reverse
|
||||
Saved = ansi_125 - -
|
||||
NSFW = ansi_160 - bold+reverse
|
||||
Saved = ansi_125 - bold
|
||||
Score = - - -
|
||||
Separator = - - bold
|
||||
Stickied = ansi_136 - -
|
||||
Stickied = ansi_136 - bold
|
||||
SubscriptionName = ansi_240 - bold
|
||||
SubscriptionText = ansi_245 - -
|
||||
SubmissionAuthor = ansi_64 - bold
|
||||
SubmissionFlair = ansi_160 - -
|
||||
SubmissionSubreddit = ansi_166 - -
|
||||
SubmissionFlair = ansi_160 - bold
|
||||
SubmissionSubreddit = ansi_166 - bold
|
||||
SubmissionText = - - -
|
||||
SubmissionTitle = ansi_240 - bold
|
||||
Upvote = ansi_64 - bold
|
||||
|
||||
@@ -7,6 +7,7 @@ import os
|
||||
import sys
|
||||
import time
|
||||
import curses
|
||||
import locale
|
||||
import threading
|
||||
from types import MethodType
|
||||
from collections import Counter
|
||||
@@ -14,7 +15,7 @@ from collections import Counter
|
||||
from vcr import VCR
|
||||
from six.moves.urllib.parse import urlparse, parse_qs
|
||||
|
||||
from rtv.theme import ThemeList
|
||||
from rtv.theme import Theme, get_next_theme, get_previous_theme, theme_list
|
||||
from rtv.config import Config
|
||||
from rtv.packages import praw
|
||||
from rtv.oauth import OAuthHelper
|
||||
@@ -151,7 +152,7 @@ def draw_screen(stdscr, reddit, config, theme, oauth):
|
||||
term.getch = MethodType(notification_getch, term)
|
||||
thread = threading.Thread(target=term.show_notification,
|
||||
args=('Success',),
|
||||
kwargs={'style': 'success'})
|
||||
kwargs={'style': 'Success'})
|
||||
thread.start()
|
||||
threads.append((thread, term))
|
||||
|
||||
@@ -172,7 +173,7 @@ def draw_screen(stdscr, reddit, config, theme, oauth):
|
||||
term.getch = MethodType(notification_getch, term)
|
||||
thread = threading.Thread(target=term.show_notification,
|
||||
args=('Error',),
|
||||
kwargs={'style': 'error'})
|
||||
kwargs={'style': 'Error'})
|
||||
thread.start()
|
||||
threads.append((thread, term))
|
||||
|
||||
@@ -193,7 +194,7 @@ def draw_screen(stdscr, reddit, config, theme, oauth):
|
||||
term.getch = MethodType(notification_getch, term)
|
||||
thread = threading.Thread(target=term.show_notification,
|
||||
args=('Info',),
|
||||
kwargs={'style': 'info'})
|
||||
kwargs={'style': 'Info'})
|
||||
thread.start()
|
||||
threads.append((thread, term))
|
||||
|
||||
@@ -212,14 +213,12 @@ def draw_screen(stdscr, reddit, config, theme, oauth):
|
||||
|
||||
def main():
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
current_theme = sys.argv[1]
|
||||
else:
|
||||
current_theme = None
|
||||
locale.setlocale(locale.LC_ALL, '')
|
||||
|
||||
theme_list = ThemeList(current_theme)
|
||||
theme_list.load()
|
||||
theme = theme_list.current_theme
|
||||
if len(sys.argv) > 1:
|
||||
theme = Theme.from_name(sys.argv[1])
|
||||
else:
|
||||
theme = Theme()
|
||||
|
||||
vcr = initialize_vcr()
|
||||
with vcr.use_cassette('demo_theme.yaml') as cassette, \
|
||||
@@ -234,6 +233,7 @@ def main():
|
||||
reddit = praw.Reddit(user_agent='RTV Theme Demo',
|
||||
decode_html_entities=False,
|
||||
disable_update_check=True)
|
||||
reddit.config.api_request_delay = 0
|
||||
|
||||
config.history.add('https://api.reddit.com/comments/6llvsl/_/djutc3s')
|
||||
config.history.add('http://i.imgur.com/Z9iGKWv.gifv')
|
||||
@@ -245,7 +245,6 @@ def main():
|
||||
oauth.authorize()
|
||||
|
||||
while True:
|
||||
|
||||
term = Terminal(stdscr, config)
|
||||
term.set_theme(theme)
|
||||
threads = draw_screen(stdscr, reddit, config, theme, oauth)
|
||||
@@ -264,12 +263,17 @@ def main():
|
||||
else:
|
||||
cassette.play_counts = Counter()
|
||||
|
||||
theme_list.reload()
|
||||
|
||||
if ch == curses.KEY_RIGHT:
|
||||
theme = theme_list.next()
|
||||
theme = get_next_theme(theme)
|
||||
elif ch == curses.KEY_LEFT:
|
||||
theme = theme_list.previous()
|
||||
theme = get_previous_theme(theme)
|
||||
elif ch == Terminal.ESCAPE:
|
||||
break
|
||||
|
||||
else:
|
||||
# Force the theme to reload
|
||||
theme = get_next_theme(theme)
|
||||
theme = get_previous_theme(theme)
|
||||
|
||||
sys.exit(main())
|
||||
|
||||
Reference in New Issue
Block a user