From 26fe54f20c2c6dcdbc3d2e2c0cb6b449b7218f54 Mon Sep 17 00:00:00 2001
From: deepend
Date: Fri, 8 Mar 2024 16:51:35 +0000
Subject: [PATCH] first commit
---
.coveragerc | 5 +
.gitattributes | 1 +
.gitignore | 14 +
.pylintrc | 378 ++
AUTHORS.rst | 68 +
CHANGELOG.rst | 783 +++
CONTRIBUTING.rst | 108 +
CONTROLS.md | 103 +
LICENSE | 22 +
MANIFEST.in | 8 +
README.md | 228 +
THEMES.md | 215 +
requirements.txt | 10 +
resources/demo.gif | Bin 0 -> 624028 bytes
resources/iterm_preferences.png | Bin 0 -> 113966 bytes
resources/keyboard.png | Bin 0 -> 54529 bytes
resources/logo.png | Bin 0 -> 7627 bytes
resources/logo_black.png | Bin 0 -> 12717 bytes
resources/mailcap.gif | Bin 0 -> 2538001 bytes
resources/retro_term.png | Bin 0 -> 969920 bytes
resources/terminal_colors.png | Bin 0 -> 33418 bytes
resources/theme_default.png | Bin 0 -> 84331 bytes
resources/theme_modifiers.png | Bin 0 -> 56599 bytes
resources/theme_modifiers_2.png | Bin 0 -> 56467 bytes
resources/theme_molokai.png | Bin 0 -> 88064 bytes
resources/theme_monochrome.png | Bin 0 -> 80068 bytes
resources/theme_papercolor.png | Bin 0 -> 89157 bytes
resources/theme_solarized_dark.png | Bin 0 -> 81507 bytes
resources/theme_solarized_light.png | Bin 0 -> 86842 bytes
resources/title_image.png | Bin 0 -> 172050 bytes
scripts/build_authors.py | 59 +
scripts/build_manpage.py | 84 +
scripts/cassettes/demo_theme.yaml | 6363 +++++++++++++++++++++++
scripts/count_lines.sh | 15 +
scripts/demo_theme.py | 283 +
scripts/initialize_session.py | 30 +
scripts/inspect_webbrowser.py | 31 +
scripts/pip_clean.sh | 9 +
scripts/ttrv.1.template | 47 +
scripts/update_packages.py | 49 +
setup.cfg | 2 +
setup.py | 86 +
test | 1 +
ttrv.1 | 119 +
ttrv.egg-info/PKG-INFO | 258 +
ttrv.egg-info/SOURCES.txt | 54 +
ttrv.egg-info/dependency_links.txt | 1 +
ttrv.egg-info/entry_points.txt | 3 +
ttrv.egg-info/requires.txt | 16 +
ttrv.egg-info/top_level.txt | 1 +
ttrv/__init__.py | 33 +
ttrv/__main__.py | 280 +
ttrv/__version__.py | 4 +
ttrv/clipboard.py | 51 +
ttrv/config.py | 303 ++
ttrv/content.py | 1189 +++++
ttrv/docs.py | 229 +
ttrv/exceptions.py | 63 +
ttrv/inbox_page.py | 204 +
ttrv/mime_parsers.py | 505 ++
ttrv/oauth.py | 248 +
ttrv/objects.py | 709 +++
ttrv/packages/__init__.py | 26 +
ttrv/packages/praw/__init__.py | 2813 ++++++++++
ttrv/packages/praw/decorator_helpers.py | 38 +
ttrv/packages/praw/decorators.py | 294 ++
ttrv/packages/praw/errors.py | 475 ++
ttrv/packages/praw/handlers.py | 243 +
ttrv/packages/praw/helpers.py | 481 ++
ttrv/packages/praw/internal.py | 271 +
ttrv/packages/praw/multiprocess.py | 102 +
ttrv/packages/praw/objects.py | 2026 ++++++++
ttrv/packages/praw/praw.ini | 79 +
ttrv/packages/praw/settings.py | 45 +
ttrv/page.py | 913 ++++
ttrv/submission_page.py | 415 ++
ttrv/subreddit_page.py | 329 ++
ttrv/subscription_page.py | 97 +
ttrv/templates/index.html | 31 +
ttrv/templates/mailcap | 70 +
ttrv/templates/ttrv.cfg | 182 +
ttrv/terminal.py | 1015 ++++
ttrv/theme.py | 567 ++
ttrv/themes/colorblind-dark.cfg | 70 +
ttrv/themes/default.cfg.example | 59 +
ttrv/themes/molokai.cfg | 82 +
ttrv/themes/papercolor.cfg | 80 +
ttrv/themes/solarized-dark.cfg | 78 +
ttrv/themes/solarized-light.cfg | 78 +
version.py | 1 +
90 files changed, 24232 insertions(+)
create mode 100644 .coveragerc
create mode 100644 .gitattributes
create mode 100644 .gitignore
create mode 100644 .pylintrc
create mode 100644 AUTHORS.rst
create mode 100644 CHANGELOG.rst
create mode 100644 CONTRIBUTING.rst
create mode 100644 CONTROLS.md
create mode 100644 LICENSE
create mode 100644 MANIFEST.in
create mode 100644 README.md
create mode 100644 THEMES.md
create mode 100644 requirements.txt
create mode 100644 resources/demo.gif
create mode 100644 resources/iterm_preferences.png
create mode 100644 resources/keyboard.png
create mode 100644 resources/logo.png
create mode 100644 resources/logo_black.png
create mode 100644 resources/mailcap.gif
create mode 100644 resources/retro_term.png
create mode 100644 resources/terminal_colors.png
create mode 100644 resources/theme_default.png
create mode 100644 resources/theme_modifiers.png
create mode 100644 resources/theme_modifiers_2.png
create mode 100644 resources/theme_molokai.png
create mode 100644 resources/theme_monochrome.png
create mode 100644 resources/theme_papercolor.png
create mode 100644 resources/theme_solarized_dark.png
create mode 100644 resources/theme_solarized_light.png
create mode 100644 resources/title_image.png
create mode 100755 scripts/build_authors.py
create mode 100755 scripts/build_manpage.py
create mode 100644 scripts/cassettes/demo_theme.yaml
create mode 100755 scripts/count_lines.sh
create mode 100755 scripts/demo_theme.py
create mode 100644 scripts/initialize_session.py
create mode 100755 scripts/inspect_webbrowser.py
create mode 100755 scripts/pip_clean.sh
create mode 100644 scripts/ttrv.1.template
create mode 100755 scripts/update_packages.py
create mode 100644 setup.cfg
create mode 100644 setup.py
create mode 100644 test
create mode 100644 ttrv.1
create mode 100644 ttrv.egg-info/PKG-INFO
create mode 100644 ttrv.egg-info/SOURCES.txt
create mode 100644 ttrv.egg-info/dependency_links.txt
create mode 100644 ttrv.egg-info/entry_points.txt
create mode 100644 ttrv.egg-info/requires.txt
create mode 100644 ttrv.egg-info/top_level.txt
create mode 100644 ttrv/__init__.py
create mode 100755 ttrv/__main__.py
create mode 100644 ttrv/__version__.py
create mode 100644 ttrv/clipboard.py
create mode 100644 ttrv/config.py
create mode 100644 ttrv/content.py
create mode 100644 ttrv/docs.py
create mode 100644 ttrv/exceptions.py
create mode 100644 ttrv/inbox_page.py
create mode 100644 ttrv/mime_parsers.py
create mode 100644 ttrv/oauth.py
create mode 100644 ttrv/objects.py
create mode 100644 ttrv/packages/__init__.py
create mode 100644 ttrv/packages/praw/__init__.py
create mode 100644 ttrv/packages/praw/decorator_helpers.py
create mode 100644 ttrv/packages/praw/decorators.py
create mode 100644 ttrv/packages/praw/errors.py
create mode 100644 ttrv/packages/praw/handlers.py
create mode 100644 ttrv/packages/praw/helpers.py
create mode 100644 ttrv/packages/praw/internal.py
create mode 100644 ttrv/packages/praw/multiprocess.py
create mode 100644 ttrv/packages/praw/objects.py
create mode 100644 ttrv/packages/praw/praw.ini
create mode 100644 ttrv/packages/praw/settings.py
create mode 100644 ttrv/page.py
create mode 100644 ttrv/submission_page.py
create mode 100644 ttrv/subreddit_page.py
create mode 100644 ttrv/subscription_page.py
create mode 100644 ttrv/templates/index.html
create mode 100644 ttrv/templates/mailcap
create mode 100644 ttrv/templates/ttrv.cfg
create mode 100644 ttrv/terminal.py
create mode 100644 ttrv/theme.py
create mode 100644 ttrv/themes/colorblind-dark.cfg
create mode 100644 ttrv/themes/default.cfg.example
create mode 100644 ttrv/themes/molokai.cfg
create mode 100644 ttrv/themes/papercolor.cfg
create mode 100644 ttrv/themes/solarized-dark.cfg
create mode 100644 ttrv/themes/solarized-light.cfg
create mode 120000 version.py
diff --git a/.coveragerc b/.coveragerc
new file mode 100644
index 0000000..19e2d07
--- /dev/null
+++ b/.coveragerc
@@ -0,0 +1,5 @@
+[run]
+source = tvr
+omit =
+ */__main__.py
+ */packages/praw/*
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..91b671f
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+tests/cassettes/* binary
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1035dd7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+.*
+!.travis.yml
+!.pylintrc
+!.gitignore
+!.gitattributes
+!.coveragerc
+*~
+*.pyc
+*.log
+build
+dist
+rtv.egg-info
+tests/refresh-token
+venv/
diff --git a/.pylintrc b/.pylintrc
new file mode 100644
index 0000000..7c635bb
--- /dev/null
+++ b/.pylintrc
@@ -0,0 +1,378 @@
+[MASTER]
+
+# Specify a configuration file.
+#rcfile=
+
+# Python code to execute, usually for sys.path manipulation such as
+# pygtk.require().
+#init-hook=
+
+# Add files or directories to the blacklist. They should be base names, not
+# paths.
+ignore=praw
+
+# Pickle collected data for later comparisons.
+persistent=yes
+
+# List of plugins (as comma separated values of python modules names) to load,
+# usually to register additional checkers.
+load-plugins=
+
+# Use multiple processes to speed up Pylint.
+jobs=1
+
+# Allow loading of arbitrary C extensions. Extensions are imported into the
+# active Python interpreter and may run arbitrary code.
+unsafe-load-any-extension=no
+
+# A comma-separated list of package or module names from where C extensions may
+# be loaded. Extensions are loading into the active Python interpreter and may
+# run arbitrary code
+extension-pkg-whitelist=
+
+# Allow optimization of some AST trees. This will activate a peephole AST
+# optimizer, which will apply various small optimizations. For instance, it can
+# be used to obtain the result of joining multiple strings with the addition
+# operator. Joining a lot of strings can lead to a maximum recursion error in
+# Pylint and this flag can prevent that. It has one side effect, the resulting
+# AST will be different than the one from reality.
+optimize-ast=no
+
+
+[MESSAGES CONTROL]
+
+# Only show warnings with the listed confidence levels. Leave empty to show
+# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
+confidence=
+
+# Enable the message, report, category or checker with the given id(s). You can
+# either give multiple identifier separated by comma (,) or put this option
+# multiple time. See also the "--disable" option for examples.
+#enable=
+
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifiers separated by comma (,) or put this
+# option multiple times (only on the command line, not in the configuration
+# file where it should appear only once).You can also use "--disable=all" to
+# disable everything first and then reenable specific checks. For example, if
+# you want to run only the similarities checker, you can use "--disable=all
+# --enable=similarities". If you want to run only the classes checker, but have
+# no Warning level messages displayed, use"--disable=all --enable=classes
+# --disable=W"
+disable=execfile-builtin,zip-builtin-not-iterating,range-builtin-not-iterating,hex-method,old-division,file-builtin,long-builtin,input-builtin,no-absolute-import,invalid-name,delslice-method,suppressed-message,coerce-builtin,buffer-builtin,import-star-module-level,round-builtin,old-ne-operator,apply-builtin,missing-final-newline,basestring-builtin,xrange-builtin,getslice-method,filter-builtin-not-iterating,map-builtin-not-iterating,raw_input-builtin,indexing-exception,dict-iter-method,metaclass-assignment,setslice-method,next-method-called,intern-builtin,using-cmp-argument,missing-docstring,oct-method,backtick,print-statement,reload-builtin,long-suffix,old-raise-syntax,unicode-builtin,nonzero-method,old-octal-literal,cmp-method,useless-suppression,dict-view-method,parameter-unpacking,unpacking-in-except,coerce-method,unichr-builtin,raising-string,cmp-builtin,reduce-builtin,standarderror-builtin,no-else-return,too-many-locals,too-many-statements,too-few-public-methods,too-many-public-methods,too-many-instance-attributes
+
+
+[REPORTS]
+
+# Set the output format. Available formats are text, parseable, colorized, msvs
+# (visual studio) and html. You can also give a reporter class, eg
+# mypackage.mymodule.MyReporterClass.
+output-format=text
+
+# Put messages in a separate file for each module / package specified on the
+# command line instead of printing them on stdout. Reports (if any) will be
+# written in a file name "pylint_global.[txt|html]".
+files-output=no
+
+# Tells whether to display a full report or only the messages
+reports=yes
+
+# Python expression which should return a note less than 10 (10 is the highest
+# note). You have access to the variables errors warning, statement which
+# respectively contain the number of errors / warnings messages and the total
+# number of statements analyzed. This is used by the global evaluation report
+# (RP0004).
+evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
+
+# Template used to display messages. This is a python new-style format string
+# used to format the message information. See doc for all details
+#msg-template=
+
+
+[SIMILARITIES]
+
+# Minimum lines number of a similarity.
+min-similarity-lines=5
+
+# Ignore comments when computing similarities.
+ignore-comments=yes
+
+# Ignore docstrings when computing similarities.
+ignore-docstrings=yes
+
+# Ignore imports when computing similarities.
+ignore-imports=no
+
+
+[MISCELLANEOUS]
+
+# List of note tags to take in consideration, separated by a comma.
+notes=FIXME,XXX,TODO
+
+
+[VARIABLES]
+
+# Tells whether we should check for unused import in __init__ files.
+init-import=no
+
+# A regular expression matching the name of dummy variables (i.e. expectedly
+# not used).
+dummy-variables-rgx=_$|dummy
+
+# List of additional names supposed to be defined in builtins. Remember that
+# you should avoid to define new builtins when possible.
+additional-builtins=
+
+# List of strings which can identify a callback function by name. A callback
+# name must start or end with one of those strings.
+callbacks=cb_,_cb
+
+
+[LOGGING]
+
+# Logging modules to check that the string format arguments are in logging
+# function parameter format
+logging-modules=logging
+
+
+[SPELLING]
+
+# Spelling dictionary name. Available dictionaries: none. To make it working
+# install python-enchant package.
+spelling-dict=
+
+# List of comma separated words that should not be checked.
+spelling-ignore-words=
+
+# A path to a file that contains private dictionary; one word per line.
+spelling-private-dict-file=
+
+# Tells whether to store unknown words to indicated private dictionary in
+# --spelling-private-dict-file option instead of raising a message.
+spelling-store-unknown-words=no
+
+
+[TYPECHECK]
+
+# Tells whether missing members accessed in mixin class should be ignored. A
+# mixin class is detected if its name ends with "mixin" (case insensitive).
+ignore-mixin-members=yes
+
+# List of module names for which member attributes should not be checked
+# (useful for modules/projects where namespaces are manipulated during runtime
+# and thus existing member attributes cannot be deduced by static analysis. It
+# supports qualified module names, as well as Unix pattern matching.
+ignored-modules=
+
+# List of classes names for which member attributes should not be checked
+# (useful for classes with attributes dynamically set). This supports can work
+# with qualified names.
+ignored-classes=SQLObject
+
+# List of members which are set dynamically and missed by pylint inference
+# system, and so shouldn't trigger E1101 when accessed. Python regular
+# expressions are accepted.
+generated-members=REQUEST,acl_users,aq_parent
+
+
+[FORMAT]
+
+# Maximum number of characters on a single line.
+max-line-length=100
+
+# Regexp for a line that is allowed to be longer than the limit.
+ignore-long-lines=^\s*(# )??$
+
+# Allow the body of an if to be on the same line as the test if there is no
+# else.
+single-line-if-stmt=no
+
+# List of optional constructs for which whitespace checking is disabled. `dict-
+# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
+# `trailing-comma` allows a space between comma and closing bracket: (a, ).
+# `empty-line` allows space-only lines.
+no-space-check=trailing-comma,dict-separator
+
+# Maximum number of lines in a module
+max-module-lines=1000
+
+# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
+# tab).
+indent-string=' '
+
+# Number of spaces of indent required inside a hanging or continued line.
+indent-after-paren=4
+
+# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
+expected-line-ending-format=
+
+
+[BASIC]
+
+# List of builtins function names that should not be used, separated by a comma
+bad-functions=map,filter
+
+# Good variable names which should always be accepted, separated by a comma
+good-names=i,j,k,ex,Run,_
+
+# Bad variable names which should always be refused, separated by a comma
+bad-names=foo,bar,baz,toto,tutu,tata
+
+# Colon-delimited sets of names that determine each other's naming style when
+# the name regexes allow several styles.
+name-group=
+
+# Include a hint for the correct naming format with invalid-name
+include-naming-hint=no
+
+# Regular expression matching correct module names
+module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
+
+# Naming hint for module names
+module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
+
+# Regular expression matching correct variable names
+variable-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Naming hint for variable names
+variable-name-hint=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression matching correct class names
+class-rgx=[A-Z_][a-zA-Z0-9]+$
+
+# Naming hint for class names
+class-name-hint=[A-Z_][a-zA-Z0-9]+$
+
+# Regular expression matching correct attribute names
+attr-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Naming hint for attribute names
+attr-name-hint=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression matching correct constant names
+const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
+
+# Naming hint for constant names
+const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$
+
+# Regular expression matching correct class attribute names
+class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
+
+# Naming hint for class attribute names
+class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
+
+# Regular expression matching correct argument names
+argument-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Naming hint for argument names
+argument-name-hint=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression matching correct function names
+function-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Naming hint for function names
+function-name-hint=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression matching correct method names
+method-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Naming hint for method names
+method-name-hint=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression matching correct inline iteration names
+inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
+
+# Naming hint for inline iteration names
+inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$
+
+# Regular expression which should only match function or class names that do
+# not require a docstring.
+no-docstring-rgx=__.*__
+
+# Minimum line length for functions/classes that require docstrings, shorter
+# ones are exempt.
+docstring-min-length=-1
+
+
+[ELIF]
+
+# Maximum number of nested blocks for function / method body
+max-nested-blocks=5
+
+
+[IMPORTS]
+
+# Deprecated modules which should not be used, separated by a comma
+deprecated-modules=stringprep,optparse
+
+# Create a graph of every (i.e. internal and external) dependencies in the
+# given file (report RP0402 must not be disabled)
+import-graph=
+
+# Create a graph of external dependencies in the given file (report RP0402 must
+# not be disabled)
+ext-import-graph=
+
+# Create a graph of internal dependencies in the given file (report RP0402 must
+# not be disabled)
+int-import-graph=
+
+
+[CLASSES]
+
+# List of method names used to declare (i.e. assign) instance attributes.
+defining-attr-methods=__init__,__new__,setUp
+
+# List of valid names for the first argument in a class method.
+valid-classmethod-first-arg=cls
+
+# List of valid names for the first argument in a metaclass class method.
+valid-metaclass-classmethod-first-arg=mcs
+
+# List of member names, which should be excluded from the protected access
+# warning.
+exclude-protected=_asdict,_fields,_replace,_source,_make
+
+
+[DESIGN]
+
+# Maximum number of arguments for function / method
+max-args=7
+
+# Argument names that match this expression will be ignored. Default to name
+# with leading underscore
+ignored-argument-names=_.*
+
+# Maximum number of locals for function / method body
+max-locals=15
+
+# Maximum number of return / yield for function / method body
+max-returns=6
+
+# Maximum number of branch for function / method body
+max-branches=12
+
+# Maximum number of statements in function / method body
+max-statements=50
+
+# Maximum number of parents for a class (see R0901).
+max-parents=7
+
+# Maximum number of attributes for a class (see R0902).
+max-attributes=7
+
+# Minimum number of public methods for a class (see R0903).
+min-public-methods=2
+
+# Maximum number of public methods for a class (see R0904).
+max-public-methods=20
+
+# Maximum number of boolean expressions in a if statement
+max-bool-expr=5
+
+
+[EXCEPTIONS]
+
+# Exceptions that will emit a warning when being caught. Defaults to
+# "Exception"
+overgeneral-exceptions=Exception
diff --git a/AUTHORS.rst b/AUTHORS.rst
new file mode 100644
index 0000000..a8c84db
--- /dev/null
+++ b/AUTHORS.rst
@@ -0,0 +1,68 @@
+================
+TTRV Contributors
+================
+* `deepend `_
+
+
+================
+RTV Contributors
+================
+
+Thanks to the following people for their contributions to this project.
+
+* `Michael Lazar `_
+* `Tobin Brown `_
+* `woorst `_
+* `Théo Piboubès `_
+* `Yusuke Sakamoto `_
+* `Johnathan Jenkins `_
+* `tyjak `_
+* `Edridge D'Souza `_
+* `Josue Ortega `_
+* `mekhami `_
+* `Nemanja Nedeljković `_
+* `obosob `_
+* `codesoap `_
+* `Toby Hughes `_
+* `Noah Morrison `_
+* `Mardigon Toler `_
+* `5225225 `_
+* `Shawn Hind `_
+* `Antoine Nguyen `_
+* `JuanPablo `_
+* `Pablo Arias `_
+* `Robert Greener `_
+* `mac1202 `_
+* `Iqbal Singh `_
+* `Lorenz Leitner `_
+* `Markus Pettersson `_
+* `Reshef Elisha `_
+* `Ryan Reno `_
+* `Sam Tebbs `_
+* `Justin Partain `_
+* `afloofloo `_
+* `0xflotus `_
+* `Caleb Perkins `_
+* `Charles Saracco `_
+* `Corey McCandless `_
+* `Crestwave `_
+* `Danilo G. Baio `_
+* `Donovan Glover `_
+* `Fabio Alessandro Locati `_
+* `Gabriel Le Breton `_
+* `Hans Roman `_
+* `micronn `_
+* `Ivan Klishch `_
+* `Joe MacDonald `_
+* `Marc Abramowitz `_
+* `Matt `_
+* `Matthew Smith `_
+* `Michael Kwon `_
+* `Michael Wei `_
+* `Ram-Z `_
+* `Vivek Anand `_
+* `Wieland Hoffmann `_
+* `Adam Talsma `_
+* `geheimnisse `_
+* `Alexander Terry `_
+* `peterpans01 `_
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
new file mode 100644
index 0000000..f71ef6a
--- /dev/null
+++ b/CHANGELOG.rst
@@ -0,0 +1,783 @@
+=============
+TTVR Changelog
+=============
+
+.. _1.27.0: https://github.com/tildeclub/ttrv/releases/tag/v1.27.0
+.. _1.26.0: https://github.com/tildeclub/ttrv/releases/tag/v1.26.0
+.. _1.25.1: https://github.com/tildeclub/ttrv/releases/tag/v1.25.1
+.. _1.25.0: https://github.com/tildeclub/ttrv/releases/tag/v1.25.0
+.. _1.24.0: https://github.com/tildeclub/ttrv/releases/tag/v1.24.0
+.. _1.23.0: https://github.com/tildeclub/ttrv/releases/tag/v1.23.0
+.. _1.22.1: https://github.com/tildeclub/ttrv/releases/tag/v1.22.1
+.. _1.22.0: https://github.com/tildeclub/ttrv/releases/tag/v1.22.0
+.. _1.21.0: https://github.com/tildeclub/ttrv/releases/tag/v1.21.0
+.. _1.20.0: https://github.com/tildeclub/ttrv/releases/tag/v1.20.0
+.. _1.19.0: https://github.com/tildeclub/ttrv/releases/tag/v1.19.0
+.. _1.18.0: https://github.com/tildeclub/ttrv/releases/tag/v1.18.0
+.. _1.17.1: https://github.com/tildeclub/ttrv/releases/tag/v1.17.1
+.. _1.17.0: https://github.com/tildeclub/ttrv/releases/tag/v1.17.0
+.. _1.16.0: https://github.com/tildeclub/ttrv/releases/tag/v1.16.0
+.. _1.15.1: https://github.com/tildeclub/ttrv/releases/tag/v1.15.1
+.. _1.15.0: https://github.com/tildeclub/ttrv/releases/tag/v1.15.0
+.. _1.14.1: https://github.com/tildeclub/ttrv/releases/tag/v1.14.1
+.. _1.13.0: https://github.com/tildeclub/ttrv/releases/tag/v1.13.0
+.. _1.12.1: https://github.com/tildeclub/ttrv/releases/tag/v1.12.1
+.. _1.12.0: https://github.com/tildeclub/ttrv/releases/tag/v1.12.0
+.. _1.11.0: https://github.com/tildeclub/ttrv/releases/tag/v1.11.0
+.. _1.10.0: https://github.com/tildeclub/ttrv/releases/tag/v1.10.0
+.. _1.9.1: https://github.com/tildeclub/ttrv/releases/tag/v1.9.1
+.. _1.9.0: https://github.com/tildeclub/ttrv/releases/tag/v1.9.0
+.. _1.8.1: https://github.com/tildeclub/ttrv/releases/tag/v1.8.1
+.. _1.8.0: https://github.com/tildeclub/ttrv/releases/tag/v1.8.0
+.. _1.7.0: https://github.com/tildeclub/ttrv/releases/tag/v1.7.0
+.. _1.6.1: https://github.com/tildeclub/ttrv/releases/tag/v1.6.1
+.. _1.6: https://github.com/tildeclub/ttrv/releases/tag/v1.6
+.. _1.5: https://github.com/tildeclub/ttrv/releases/tag/v1.5
+.. _1.4.2: https://github.com/tildeclub/ttrv/releases/tag/v1.4.2
+.. _1.4.1: https://github.com/tildeclub/ttrv/releases/tag/v1.4.1
+.. _1.4: https://github.com/tildeclub/ttrv/releases/tag/v1.4
+.. _1.3: https://github.com/tildeclub/ttrv/releases/tag/v1.3
+.. _1.2.2: https://github.com/tildeclub/ttrv/releases/tag/v1.2.2
+.. _1.2.1: https://github.com/tildeclub/ttrv/releases/tag/v1.2.1
+.. _1.2: https://github.com/tildeclub/ttrv/releases/tag/v1.2
+
+--------------------
+1.27.0_ (2019-06-02)
+--------------------
+
+This is the final release of RTV. See here for more information:
+
+https://github.com/michael-lazar/rtv/issues/696
+
+Features
+
+* Added a configuration option to toggle whether to open web browser links in a
+ new tab or a new window.
+
+Documentation
+
+* Improved the mailcap example for the ``feh`` command.
+* Fixed the the descriptions for the ``j`` & ``k`` keys (they were swapped).
+
+--------------------
+1.26.0_ (2019-03-03)
+--------------------
+
+Features
+
+* Added a brand new inbox page for viewing private messages and comment replies.
+ The inbox is accessible with the ``i`` key. Supported actions include viewing
+ message chains and replying to messages, marking messages as read/unread, and
+ opening the context of a comment.
+* Added the ability to compose new private messages with the ``C`` key.
+* Updated the inline help ``?`` document to contain a more comprehensive list
+ of commands.
+* Opening a link from the command line is now faster at startup because the
+ default subreddit will not be loaded beforehand.
+* Added a new ``--debug-info`` command to display useful system information.
+
+Bugfixes
+
+* Fixed opening comments with the prompt ``/`` from the subscription window.
+* The subscription and multireddit ``s``/``S`` keys now work from all pages.
+* Relative time strings are now correctly pluralized.
+* Fixed an unclosed file handler when opening the web browser.
+* Fixed the application not starting if the user has an empty front page.
+
+Configuration Changes
+
+* Renamed the following keybindings to better represent their usage:
+
+ * ``SORT_HOT`` -> ``SORT_1``
+ * ``SORT_TOP`` -> ``SORT_2``
+ * ``SORT_RISING`` -> ``SORT_3``
+ * ``SORT_NEW`` -> ``SORT_4``
+ * ``SORT_CONTROVERSIAL`` -> ``SORT_5``
+ * ``SORT_GILDED`` -> ``SORT_6``
+ * ``SUBREDDIT_OPEN_SUBSCRIPTIONS`` -> ``SUBSCRIPTIONS``
+ * ``SUBREDDIT_OPEN_MULTIREDDITS`` -> ``MULTIREDDITS``
+
+
+* Added new keybindings to support the inbox page:
+
+ * ``SORT_7``
+ * ``PRIVATE_MESSAGE``
+ * ``INBOX_VIEW_CONTEXT``
+ * ``INBOX_OPEN_SUBMISSION``
+ * ``INBOX_REPLY``
+ * ``INBOX_MARK_READ``
+ * ``INBOX_EXIT``
+
+* Added new theme elements to support the inbox page:
+
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+
+--------------------
+1.25.1_ (2019-02-13)
+--------------------
+
+Bugfixes
+
+* Fixed a bug that was causing newlines to be stripped when posting comments
+ and submissions.
+
+
+--------------------
+1.25.0_ (2019-02-03)
+--------------------
+
+Features
+
+* You can now open HTML links that are embedded inside of comments and
+ submissions by pressing the ``ENTER`` key and selecting a link from the list.
+ This also works when copying links to the clipboard using ``Y``.
+* Added the ``--no-autologin`` command line argument to disable automatically
+ logging in at startup.
+* Added the ``max_pager_cols`` configuration option to limit the text width
+ when sending text to the system ``PAGER``.
+* Additional filtering options have been added when viewing user pages.
+* The gilded flair now displays the number of times a submission has been
+ gilded.
+* Submissions/comments now display the time that they were most recently edited.
+
+Bugfixes
+
+* Fixed the MIME parser for gfycat, and gfycat videos are now downloaded as mp4.
+* Fixed formatting when composing posts with leading whitespace.
+* Fixed crash when attempting to display a long terminal title.
+
+Documentation
+
+* RTV has been moved to the Arch Community Repository and installation
+ instructions for Arch have been updated accordingly.
+
+
+--------------------
+1.24.0_ (2018-08-12)
+--------------------
+
+Features
+
+* Python 3.7 is now officially supported.
+* Lines that start with the hash symbol (#) are no longer ignored when
+ composing posts in your editor. This allows # to be used with Reddit's
+ markdown parser to denote headers.
+* Added a new *dark colorblind* theme.
+* Added support for the ``$RTV_PAGER`` environment variable, which can be
+ used to set a unique PAGER for rtv.
+* Added the ability to sort submissions by **guilded**.
+
+Bugfixes
+
+* Fixed a crash when setting the ``$BROWSER`` with python 3.7.
+* Improved the error message when attempting to vote on an archived post.
+* Cleaned up several outdated MIME parsers. Removed the vidme, twitch,
+ oddshot, and imgtc parsers. Fixed the liveleak and reddit video parsers.
+
+
+--------------------
+1.23.0_ (2018-06-24)
+--------------------
+
+Features
+
+* Submissions can now be marked as *[hidden]* using the ``space`` key. Hidden
+ submissions will be removed from the feed when the page is reloaded.
+* New MIME parsers have been added for vimeo.com and streamja.com.
+* Added support for opening links with **qutebrowser**.
+
+Bugfixes
+
+* Fixed unhandled OAuth server log messages being dumped to stdout.
+* Fixed the application crashing when performing rate-limited requests.
+* Fixed crash when displaying posts that contain null byte characters.
+
+Documentation
+
+* Added README badge for *saythanks.io*.
+* Updated the mailcap template to support *v.redd.it* links.
+
+
+--------------------
+1.22.1_ (2018-03-11)
+--------------------
+
+I forgot to check in a commit before publishing the 1.22.0 release (whoops!)
+
+Bugfixes
+
+* Updated the ``__version__.py`` file to report the current version.
+* Added the missing v1.22.0 entry to the CHANGELOG.
+
+--------------------
+1.22.0_ (2018-03-07)
+--------------------
+
+Features
+
+* Added the ``--no-flash`` option to disable terminal flashing.
+
+Bugfixes
+
+* Fixed automatically exiting on launch when trying to open an invalid
+ subreddit with the ``-s`` flag.
+* Fixed error handling for HTTP request timeouts when checking for new
+ messages in the inbox.
+* Fixed a typo in the sample theme config.
+
+Documentation
+
+* Added the FreeBSD package to the README.
+
+--------------------
+1.21.0_ (2017-12-30)
+--------------------
+
+Features
+
+* Full support for customizable themes has been added. For more information,
+ see the new section on themes in the README, and the ``THEMES.md`` file.
+
+Bugfixes
+
+* Fixed incorrect URL strings being sent to the **opera** web browser.
+* Fixed timeout messages for the **surf** and **vimb** web browsers.
+* Switched to using ``XDG_DATA_HOME`` to store the rtv browser history and
+ credentials file.
+
+--------------------
+1.20.0_ (2017-12-05)
+--------------------
+
+Features
+
+* Text piped to the ``$PAGER`` will now wrap on word / sentence breaks.
+* New MIME parsers have been added for liveleak.com and worldstarhiphop.com.
+
+Bugfixes
+
+* Fixed a regression where text from the web browser's stdout/stderr was
+ being sent to the terminal window.
+* Fixed crashing on startup when the terminal doesn't support colors.
+* Fixed broken text formatting when running inside of emacs ``term``.
+
+Codebase
+
+* Dropped support for python 3.3 because it's no longer supported upstream
+ by **pytest**. The application will still install through pip but will no
+ longer be tested.
+* Added a text logo to the README.
+
+--------------------
+1.19.0_ (2017-10-24)
+--------------------
+
+Features
+
+* Greatly improved loading times by using smarter rate limiting and page caching.
+* The logout prompt is now visible as a popup notification.
+* New MIME parsers have been added for gifs.com, giphy.com, imgtc.com,
+ imgflip.com, livememe.com, makeameme.org and flickr.com
+* Improved mailcap examples for parsing video links with mpv.
+
+Bugfixes
+
+* Patched a backwards-incompatible Reddit API change with the comment
+ permalink now being returned in the response JSON.
+* Fixed crashing when a comment contained exotic unicode characters like emojis.
+* Removed the option to select custom sorting ranges for controversial and
+ top comments.
+* Fixed MIME parsing for single image Imgur galleries.
+
+Codebase
+
+* Preliminary refactoring for the upcoming theme support.
+* Created some utility scripts for project maintenance.
+* Created a release checklist document.
+* Updated the README gif images and document layout.
+
+--------------------
+1.18.0_ (2017-09-06)
+--------------------
+
+Features
+
+* The ``rtv -l`` flag has been deprecated and replaced with a positional
+ argument, in order to match the syntax of other command line web browsers.
+* NSFW content is now filtered according to the user's reddit profile
+ settings.
+* ``$RTV_BROWSER`` has been added as a way to set the preferred web browser.
+* Sorting options for **relevance** and **comments** are now displayed on
+ the search results page.
+* An **[S]** badge is now displayed next to the submission author.
+* The gfycat MIME parser has been expanded to support more URLs.
+* New MIME parsers have been added for oddshot.tv, clips.twitch.tv,
+ clippituser.tv, and Reddit's beta hosted videos.
+
+Bugfixes
+
+* Users can now use the prompt to navigate to "/comments/..." pages from
+ inside of a submission.
+* Users can now navigate to multireddits using the "/u/me/" prefix.
+* Fixed the ``$BROWSER`` behavior on macOS to support the **chrome**,
+ **firefox**, **safari**, and **default** keywords.
+
+Codebase
+
+* Travis CI tests have been moved to the trusty environment.
+* Added more detailed logging of the environment and settings at startup.
+
+--------------------
+1.17.1_ (2017-08-06)
+--------------------
+
+Bugfixes
+
+* ``J``/``K`` commands are now restricted to the submission page.
+
+--------------------
+1.17.0_ (2017-08-03)
+--------------------
+
+Features
+
+* Added the ``J`` command to jump to the next sibling comment.
+* Added the ``K`` command to jump to the parent comment.
+* Search results can now be sorted, and the title bar has been updated
+ to display the current search query.
+* Imgur URLs are now resolved via the Imgur API.
+ This enables the loading of large albums with over 10 images.
+ An ``imgur_client_id`` option has been added to the RTV configuration.
+* A MIME parser has been added for www.liveleak.com.
+* RTV now respects the ``$VISUAL`` environment variable.
+
+Bugfixes
+
+* Fixed a screen refresh bug on urxvt terminals.
+* New key bindings will now attempt to fallback to their default key if not
+ defined in the user's configuration file.
+
+Documentation
+
+* Added additional mailcap examples for framebuffer videos and iTerm2.
+* Python version information is now captured in the log at startup.
+
+
+--------------------
+1.16.0_ (2017-06-08)
+--------------------
+
+Features
+
+* Added the ability to copy links to the OS clipboad with ``y`` and ``Y``.
+* Both submissions and comments can now be viewed on **/user/** pages.
+* A MIME parser has been added for www.streamable.com.
+* A MIME parser has been added for www.vidme.com.
+* Submission URLs can now be opened while viewing the comments page.
+
+Bugfixes
+
+* More graceful handling for the invalid LOCALE error on MacOS.
+* A fatal error is now raised when trying to run on Windows without curses.
+* Fixed an error when trying to view saved comments.
+* Invalid refresh-tokens are now automatically deleted.
+* Users who are signed up for Reddit's beta profiles can now launch RTV.
+
+--------------------
+1.15.1_ (2017-04-09)
+--------------------
+Codebase
+
+* Removed the mailcap-fix dependency for python versions >= 3.6.0.
+* Enabled installing test dependencies with ``pip install rtv[test]``.
+
+--------------------
+1.15.0_ (2017-03-30)
+--------------------
+Features
+
+* Added the ability to open comment threads using the submission's
+ permalink. E.g. **/comments/30rwj2**
+
+Bugfixes
+
+* Updated ``requests`` requirement to fix a bug in version 2.3.0.
+* Fixed an edge case where comment trees were unfolding out of order.
+
+Codebase
+
+* Removed dependency on the PyPI ``praw`` package. A version of PRAW 3
+ is now bundled with rtv. This should make installation easier because
+ users are no longer required to maintain a legacy version of praw in
+ their python dependencies.
+* Removed ``update-checker`` dependency.
+
+--------------------
+1.14.1_ (2017-01-12)
+--------------------
+Features
+
+* The order-by option menu now triggers after a single '2' or '5' keystroke
+ instead of needing to double press.
+
+Bugfixes
+
+* Mailcap now handles multi-part shell commands correctly, e.g. "emacs -nw"
+* OS X no longer relies on $DISPLAY to check if there is a display available.
+* Added error handling for terminals that don't support hiding the cursor.
+* Fixed a bug on tmux that prevented scrolling when $TERM was set to
+ "xterm-256color" instead of screen.
+
+Documentation
+
+* Added section to FAQ about garbled characters output by curses.
+
+--------------------
+1.13.0_ (2016-10-17)
+--------------------
+Features
+
+* Pressing `2` or `5` twice now opens a menu to select the time frame.
+* Added the `hide_username` config option.
+* Added the `max_comment_cols` config option.
+
+Bugfixes
+
+* Fixed the terminal title from displaying b'' in py3.
+* Flipped j and k in the documentation.
+* Fixed bug when selecting post order for the front page.
+* Added more descriptive error messages for invalid subreddits.
+
+--------------------
+1.12.1_ (2016-09-27)
+--------------------
+Bugfixes
+
+* Fixed security vulnerability where malicious URLs could inject python code.
+* No longer hangs when using mpv on long videos.
+* Now falls back to ascii mode when the system locale is not utf-8.
+
+--------------------
+1.12.0_ (2016-08-25)
+--------------------
+Features
+
+* Added a help banner with common key bindings.
+* Added `gg` and `G` bindings to jump to the top and bottom the the page.
+* Updated help screen now opens with the system PAGER.
+* The `/` prompt now works from inside of submissions.
+* Added an Instagram parser to extract images and videos from urls.
+
+Bugixes
+
+* Shortened reddit links (https://redd.it/) will now work with ``-s``.
+
+Codebase
+
+* Removed the Tornado dependency from the project.
+* Added a requirements.txt file.
+* Fixed a bunch of tests where cassettes were not being generated.
+* Added compatability for pytest-xdist.
+
+
+--------------------
+1.11.0_ (2016-08-02)
+--------------------
+Features
+
+* Added the ability to open image and video urls with the user's mailcap file.
+* New ``--enable-media`` and ``copy-mailcap`` commands to support mailcap.
+* New command `w` to save submissions and comments.
+* New command `p` to toggle between the front page and the last visited subreddit.
+* New command `S` to view subscribed multireddits.
+* Extended ``/`` prompt to work with users, multireddits, and domains.
+* New page ``/u/saved`` to view saved submissions.
+* You can now specify the sort period by appending **-(period)**,
+ E.g. **/r/python/top-week**.
+
+Bugfixes
+
+* Terminal title is now only set when $DISPLAY is present.
+* Urlview now works on the submission as well as comments.
+* Fixed text encoding when using urlview.
+* Removed `futures` dependency from the python 3 wheel.
+* Unhandled resource warnings on exit are now ignored.
+
+Documentation
+
+* Various README updates.
+* Updated asciinema demo video.
+* Added script to update the AUTHORS.rst file.
+
+--------------------
+1.10.0_ (2016-07-11)
+--------------------
+Features
+
+* New command, `b` extracts urls from comments using urlviewer.
+* Comment files will no longer be destroyed if RTV encounters an error while posting.
+* The terminal title now displays the subreddit name/url.
+
+Bugfixes
+
+* Fixed crash when entering empty or invalid subreddit name.
+* Fixed crash when opening x-posts linked to subreddits.
+* Fixed a bug where the terminal title wasn't getting set.
+* **/r/me** is now displayed as *My Submissions* in the header.
+
+-------------------
+1.9.1_ (2016-06-13)
+-------------------
+Features
+
+* Better support for */r/random*.
+* Added a ``monochrome`` config setting to disable all color.
+* Improved cursor positioning when expanding/hiding comments.
+* Show ``(not enough space)`` when comments are too large.
+
+Bugfixes
+
+* Fixed permissions when copying the config file.
+* Fixed bug where submission indicies were duplicated when paging.
+* Specify praw v3.4.0 to avoid installing praw 4.
+
+Documentation
+
+* Added section to the readme on Arch Linux installation.
+* Updated a few argument descriptions.
+* Added a proper ascii logo.
+
+-------------------
+1.9.0_ (2016-04-05)
+-------------------
+Features
+
+* You can now open long posts/comments with the $PAGER by pressing `l`.
+* Changed a couple of visual separators.
+
+Documentation
+
+* Added testing instructions to the FAQ.
+
+-------------------
+1.8.1_ (2016-03-01)
+-------------------
+Features
+
+* All keys are now rebindable through the config.
+* New bindings - ctrl-d and ctrl-u for page up / page down.
+* Added tag for stickied posts and comments.
+* Added bullet between timestamp and comment count.
+
+Bugfixes
+
+* Links starting with np.reddit.com no longer return `Forbidden`.
+
+Documentation
+
+* Updated README.
+
+-------------------
+1.8.0_ (2015-12-20)
+-------------------
+Features
+
+* A banner on the top of the page now displays the selected page sort order.
+* Hidden scores now show up as "- pts".
+* Oauth settings are now accesible through the config file.
+* New argument `--config` specifies the config file to use.
+* New argument `--copy-config` generates a default config file.
+
+Documentation
+
+* Added a keyboard reference from keyboardlayouteditor.com
+* Added a link to an asciinema demo video
+
+-------------------
+1.7.0_ (2015-12-08)
+-------------------
+
+**Note**
+This version comes with a large change in the internal structure of the project,
+but does not break backwards compatibility. This includes adding a new test
+suite that will hopefully improve the stability of future releases.
+
+Continuous Integration additions
+
+* Travis-CI https://travis-ci.org/michael-lazar/rtv
+* Coveralls https://coveralls.io/github/michael-lazar/rtv
+* Gitter (chat) https://gitter.im/michael-lazar/rtv
+* Added a tox config for local testing
+* Added a pylint config for static code and style analysis
+* The project now uses VCR.py to record HTTP interactions for testing.
+
+Features
+
+* Added a wider utilization of the loading screen for functions that make
+ reddit API calls.
+* In-progress loading screens can now be cancelled by pressing the `Esc` key.
+
+Bugfixes
+
+* OSX users should now be able to login using OAuth.
+* Comments now return the correct nested level when loading "More Comments".
+* Several unicode fixes, the project is now much more consistent in the way
+ that unicode is handled.
+* Several undocumented bug fixes as a result of the code restructure.
+
+
+-------------------
+1.6.1_ (2015-10-19)
+-------------------
+Bugfixes
+
+* Fixed authentication checking for */r/me*.
+* Added force quit option with the `Q` key.
+* Removed option to sort subscriptions.
+* Fixed crash with pressing `i` when not logged in.
+* Removed futures requirement from the python 3 distribution.
+
+Documentation
+
+* Updated screenshot in README.
+* Added section to the FAQ on installation.
+
+-----------------
+1.6_ (2015-10-14)
+-----------------
+Features
+
+* Switched all authentication to OAuth.
+* Can now list the version with `rtv --version`.
+* Added a man page.
+* Added confirmation prompt when quitting.
+* Submissions now display the index in front of their title.
+
+Bugfixes
+
+* Streamlined error logging.
+
+Documentation
+
+* Added missing docs for the `i` key.
+* New documentation for OAuth.
+* New FAQ section.
+
+-----------------
+1.5_ (2015-08-26)
+-----------------
+Features
+
+* New page to view and open subscribed subreddits with `s`.
+* Sorting method can now be toggled with the `1` - `5` keys.
+* Links to x-posts are now opened inside of RTV.
+
+Bugfixes
+
+* Added */r/* to subreddit names in the subreddit view.
+
+-------------------
+1.4.2_ (2015-08-01)
+-------------------
+Features
+
+* Pressing the `o` key now opens selfposts directly inside of rtv.
+
+Bugfixes
+
+* Fixed invalid subreddits from throwing unexpected errors.
+
+-------------------
+1.4.1_ (2015-07-11)
+-------------------
+Features
+
+* Added the ability to check for unread messages with the `i` key.
+* Upped required PRAW version to 3.
+
+Bugfixes
+
+* Fixed crash caused by downvoting.
+* Missing flairs now display properly.
+* Fixed ResourceWarning on Python 3.2+.
+
+-----------------
+1.4_ (2015-05-16)
+-----------------
+Features
+
+* Unicode support has been vastly improved and is now turned on by default.
+ Ascii only mode can be toggled with the `--ascii` command line flag.
+* Added pageup and pagedown with the `m` and `n` keys.
+* Support for terminal based webbrowsers such as links and w3m.
+* Browsing history is now persistent and stored in `$XDG_CACHE_HOME`.
+
+Bugfixes
+
+* Several improvements for handling unicode.
+* Fixed crash caused by resizing the window and exiting a submission.
+
+-----------------
+1.3_ (2015-04-22)
+-----------------
+Features
+
+* Added edit `e` and delete `d` for comments and submissions.
+* Added *nsfw* tags.
+
+Bugfixes
+
+* Upvote/downvote icon now displays in the submission selfpost.
+* Loading large *MoreComment* blocks no longer hangs the program.
+* Improved logging and error handling with praw interactions.
+
+-------------------
+1.2.2_ (2015-04-07)
+-------------------
+Bugfixes
+
+* Fixed default subreddit not being set.
+
+Documentation
+
+* Added changelog and contributor links to the README.
+
+-------------------
+1.2.1_ (2015-04-06)
+-------------------
+Bugfixes
+
+* Fixed crashing on invalid subreddit names
+
+-----------------
+1.2_ (2015-04-06)
+-----------------
+Features
+
+* Added user login / logout with the `u` key.
+* Added subreddit searching with the `f` key.
+* Added submission posting with the `p` key.
+* Added viewing of user submissions with `/r/me`.
+* Program title now displays in the terminal window.
+* Gold symbols now display on guilded comments and posts.
+* Moved default config location to XDG_CONFIG_HOME.
+
+Bugfixes
+
+* Improved error handling for submission / comment posts.
+* Fixed handling of unicode flairs.
+* Improved displaying of the help message and selfposts on small terminal windows.
+* The author's name now correctly highlights in submissions
+* Corrected user agent formatting.
+* Various minor bugfixes.
+
+------------------
+1.1.1 (2015-03-30)
+------------------
+* Post comments using your text editor.
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
new file mode 100644
index 0000000..e10969b
--- /dev/null
+++ b/CONTRIBUTING.rst
@@ -0,0 +1,108 @@
+----------------------
+Contributor Guidelines
+----------------------
+
+Before you start
+================
+
+- Post an issue on the `tracker `_ describing the bug or feature you would like to add
+- If an issue already exists, leave a comment to let others know that you intend to work on it
+
+Considerations
+==============
+
+- One of the project's goals is to maintain compatibility with as many terminal emulators as possible.
+ Please be mindful of this when designing a new feature
+
+ - Is it compatible with both Linux and OS X?
+ - Is it compatible with both Python 2 and Python 3
+ - Will it work over ssh (without X11)?
+ - What about terminals that don't support color? Or in those with limited (8/256) colors?
+ - Will it work in tmux/screen?
+ - Will is fail gracefully if unicode is not supported?
+
+- If you're adding a new feature, try to include a few test cases.
+ See the section below on setting up your test environment
+- If you tried, but you can't get the tests running in your environment, it's ok
+- If you are unsure about anything, ask!
+
+Submitting a pull request
+=========================
+
+- Reference the issue # that the pull request is related to
+- Make sure you have merged in the latest changes from the ``master`` branch
+- After you submit, make sure that the Travis-CI build passes
+- Be prepared to have your code reviewed.
+ For non-trivial additions, it's normal for this process to take a few iterations
+
+Style guide
+===========
+
+- All code should follow `PEP 8 `_
+- Try to keep lines under 80 characters, but don't sacrifice readability to do it!
+
+ **Ugly**
+
+ .. code-block:: python
+
+ text = ''.join(
+ line for line in fp2 if not line.startswith('#'))
+
+ **Better**
+
+ .. code-block:: python
+
+ text = ''.join(line for line in fp2 if not line.startswith('#'))
+
+- Use the existing codebase as a reference when writing docstrings (adopted from the `Google Style Guide `_)
+- Add an encoding header ``# -*- coding: utf-8 -*-`` to all new files
+- **Please don't submit pull requests for style-only code changes**
+
+Running the tests
+=================
+
+This project uses `pytest `_ and `VCR.py `_
+
+VCR is a tool that records HTTP requests made during the test run and stores them in *tests/cassettes* for subsequent runs.
+This both speeds up the tests and helps to maintain consistency across runs.
+
+1. Install the test dependencies
+
+ .. code-block:: bash
+
+ $ pip install ttrv[test]
+
+2. Set your ``$PYTHONPATH`` to point to the directory of your ttrv repository.
+
+ .. code-block:: bash
+
+ $ export PYTHONPATH=~/code/ttrv/
+
+3. Run the tests using the existing cassettes
+
+ .. code-block:: bash
+
+ $ python -m pytest ~/code/ttrv/tests/
+ ================================ test session starts ================================
+ platform linux -- Python 3.4.0, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
+ rootdir: ~/code/ttrv/, inifile:
+ plugins: xdist-1.14, cov-2.2.0
+ collected 113 items
+
+4. By default, the cassettes will act as read-only.
+ If you have written a new test and would like to record a cassette, you must provide your own refresh token.
+ The easiest thing to do is to use the token generated by ttrv when you log in.
+ This is usually stored as *~/.local/share/ttrv/refresh-token*.
+
+ .. code-block:: bash
+
+ $ python -m pytest ~/code/ttrv/tests/ --record-mode once --refresh-token ~/.local/share/ttrv/refresh-token
+ ================================ test session starts ================================
+ platform linux -- Python 3.4.0, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
+ rootdir: ~/code/ttrv/, inifile:
+ plugins: xdist-1.14, cov-2.2.0
+ collected 113 items
+
+ Note that all sensitive information will automatically be stripped from the cassette when it's saved.
+
+5. Once you have generated a new cassette, go ahead and commit it to your branch along with your test case
diff --git a/CONTROLS.md b/CONTROLS.md
new file mode 100644
index 0000000..fd661e9
--- /dev/null
+++ b/CONTROLS.md
@@ -0,0 +1,103 @@
+# Controls
+
+## Basic Commands
+
+- j or ▼ - Move the cursor down
+- k or ▲ - Move the cursor up
+- l or ► - View the currently selected item
+- h or ◄ - Return to the previous view
+- m or PgUp - Move the cursor up one page
+- n or PgDn - Move the cursor down one page
+- gg - Jump to the top of the page
+- G - Jump to the bottom of the page
+- 1 to 7 - Sort submissions by category
+- r or F5 - Refresh the content on the current page
+- u - Login to your reddit account
+- q - Quit
+- Q - Force quit
+- y - Copy submission permalink to clipboard
+- Y - Copy submission link to clipboard
+- F2 - Cycle to the previous color theme
+- F3 - Cycle to the next color theme
+- ? - Show the help screen
+- / - Open a prompt to select a subreddit
+
+The / key opens a text prompt at the bottom of the screen. You can use
+this to type in the name of the subreddit that you want to open. The following text
+formats are recognized:
+
+- ``/python`` - Open a subreddit, shorthand
+- ``/r/python`` - Open a subreddit
+- ``/r/python/new`` - Open a subreddit, sorted by category
+- ``/r/python/controversial-year`` - Open a subreddit, sorted by category and time
+- ``/r/python+linux+commandline`` - Open multiple subreddits merged together
+- ``/comments/30rwj2`` - Open a submission, shorthand
+- ``/r/python/comments/30rwj2`` - Open a submission
+- ``/r/front`` - Open your front page
+- ``/u/me`` - View your submissions
+- ``/u/me/saved`` - View your saved content
+- ``/u/me/hidden`` - View your hidden content
+- ``/u/me/upvoted`` - View your upvoted content
+- ``/u/me/downvoted`` - View your downvoted content
+- ``/u/spez`` - View a user's submissions and comments
+- ``/u/spez/submitted`` - View a user's submissions
+- ``/u/spez/comments`` - View a user's comments
+- ``/u/multi-mod/m/android`` - Open a user's curated multireddit
+- ``/domain/python.org`` - Search for links for the given domain
+
+## Authenticated Commands
+
+Some actions require that you be logged in to your reddit account. You can login
+by pressing the u key. Once you are logged in, your username will
+appear in the top-right corner of the screen.
+
+- a - Upvote
+- z - Downvote
+- c - Compose a new submission or comment
+- C - Compose a new private message
+- e - Edit the selected submission or comment
+- d - Delete the selected submission or comment
+- i - View your inbox (see [inbox mode](#inbox-mode))
+- s - View your subscribed subreddits (see [subscription mode](#subscription-mode))
+- S - View your subscribed multireddits (see [subscription mode](#subscription-mode))
+- u - Logout of your reddit account
+- w - Save the selected submission or comment
+
+## Subreddit Mode
+
+The following actions can be performed when viewing a subreddit:
+
+- l or ► - View the comments for the selected submission (see [submission mode](#submission-mode))
+- o or ENTER - Open the selected submission link using your web browser or ``.mailcap`` config
+- SPACE - Mark the selected submission as *hidden*
+- p - Toggle between the currently viewed subreddit and ``/r/front``
+- f - Open a prompt to search the current subreddit for a text string
+
+## Submission Mode
+
+The following actions can be performed when viewing a submission:
+
+- h or ◄ - Close the submission and return to the previous page
+- l or ► - View the selected comment using the system's pager
+- o or ENTER - Open a link in the comment using your web browser or ``.mailcap`` config
+- SPACE - Fold or expand the selected comment and its children
+- b - Send the comment text to the system's urlviewer application
+- J - Move the cursor down the the next comment at the same indentation
+- K - Move the cursor up to the parent comment
+
+## Subscription Mode
+
+The following actions can be performed when viewing your subscriptions or multireddits:
+
+- h or ◄ - Close your subscriptions and return to the previous page
+- l or ► - Open the selected subreddit or multireddit
+
+## Inbox Mode
+
+The following actions can be performed when viewing your inbox:
+
+- h or ◄ - Close your inbox and return to the previous page
+- l or ► - View the context of the selected comment
+- o or Enter - Open the submission of the selected comment
+- c - Reply to the selected comment or message
+- w - Mark the selected comment or message as seen
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..c058a6a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 michael-lazar
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..16bf6a9
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,8 @@
+include version.py
+include CHANGELOG.rst
+include AUTHORS.rst
+include README.md
+include LICENSE
+include ttrv.1
+include ttrv/templates/*
+include ttrv/themes/*
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5d046b8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,228 @@
+Tilde Terminal Reddit Viewer (TTRV)
+Forked from Original source/development at: RTV
+
+
+A text-based interface (TUI) to view and interact with Reddit from your terminal.
+
+
+
+
+
+
+
+
+
+## Table of Contents
+
+* [Demo](#demo)
+* [Installation](#installation)
+* [Usage](#usage)
+* [Settings](#settings)
+* [Themes](#themes)
+* [FAQ](#faq)
+* [Contributing](#contributing)
+* [License](#license)
+
+## Demo
+
+
+
+
+
+## Installation
+
+### PyPI package
+
+TTRV is available on [PyPI](https://pypi.python.org/pypi/ttrv/) and can be installed with pip:
+
+```bash
+$ pip install ttrv
+```
+
+### From source
+
+```bash
+$ git clone https://github.com/tildeclub/ttrv.git
+$ cd ttrv/
+$ python setup.py install
+```
+
+### Windows
+
+TTRV is not supported on Windows but you can enable Windows subsystem for Linux, download your preferred Linux distribution from Microsoft Store and access it from there.
+
+To open links on Edge, paste the line below to ``{HOME}/.bashrc``
+```
+export BROWSER='/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'
+```
+
+## Usage
+
+To run the program, type:
+
+```bash
+$ ttrv --help
+```
+
+### Controls
+
+Move the cursor using either the arrow keys or *Vim* style movement:
+
+- Press ▲ and ▼ to scroll through submissions
+- Press ▶ to view the selected submission and ◀ to return
+- Press space-bar to expand/collapse comments
+- Press u to login (this requires a web browser for [OAuth](https://github.com/reddit-archive/reddit/wiki/oauth2))
+- Press ? to open the help screen
+
+Press / to open the navigation prompt, where you can type things like:
+
+- ``/front``
+- ``/r/commandprompt+linuxmasterrace``
+- ``/r/programming/controversial``
+- ``/u/me``
+- ``/u/multi-mod/m/art``
+- ``/domain/github.com``
+
+See [CONTROLS](CONTROLS.md) for the full list of commands.
+
+## Settings
+
+### Configuration File
+
+Configuration files are stored in the ``{HOME}/.config/ttrv/`` directory.
+
+Check out [ttrv.cfg](ttrv/templates/ttrv.cfg) for the full list of configurable options. You can clone this file into your home directory by running:
+
+```bash
+$ ttrv --copy-config
+```
+
+### Viewing Media Links
+
+You can use [mailcap](https://en.wikipedia.org/wiki/Media_type#Mailcap) to configure how TTRV will open different types of links.
+
+
+
+
+
+A mailcap file allows you to associate different MIME media types, like ``image/jpeg`` or ``video/mp4``, with shell commands. This feature is disabled by default because it takes a few extra steps to configure. To get started, copy the default mailcap template to your home directory.
+
+```bash
+$ ttrv --copy-mailcap
+```
+
+This template contains examples for common MIME types that work with popular reddit websites like *imgur*, *youtube*, and *gfycat*. Open the mailcap template and follow the [instructions](ttrv/templates/mailcap) listed inside.
+
+Once you've setup your mailcap file, enable it by launching ttrv with the ``ttrv --enable-media`` flag (or set it in your **ttrv.cfg**)
+
+### Environment Variables
+
+The default programs that TTRV interacts with can be configured through environment variables:
+
+
+
+ $TTRV_EDITOR |
+ A program used to compose text submissions and comments, e.g. vim, emacs, gedit
+ If not specified, will fallback to $VISUAL and $EDITOR in that order. |
+
+
+ $TTRV_BROWSER |
+ A program used to open links to external websites, e.g. firefox, google-chrome, w3m, lynx
+ If not specified, will fallback to $BROWSER, or your system's default browser. |
+
+
+ $TTRV_URLVIEWER |
+ A tool used to extract hyperlinks from blocks of text, e.g. urlview, urlscan
+ If not specified, will fallback to urlview if it is installed. |
+
+
+
+### Clipboard
+
+TTRV supports copying submission links to the OS clipboard. On macOS this is supported out of the box.
+On Linux systems you will need to install either [xsel](http://www.vergenet.net/~conrad/software/xsel/) or [xclip](https://sourceforge.net/projects/xclip/).
+
+## Themes
+
+Themes can be used to customize the look and feel of TTRV
+
+
+
+
+ Solarized Dark
+
+ |
+
+ Solarized Light
+
+ |
+
+
+
+ Papercolor
+
+ |
+
+ Molokai
+
+ |
+
+
+
+You can list all installed themes with the ``--list-themes`` command, and select one with ``--theme``. You can save your choice permanently in your [ttrv.cfg](ttrv/templates/ttrv.cfg) file. You can also use the F2 & F3 keys inside of TTRV to cycle through all available themes.
+
+For instructions on writing and installing your own themes, see [THEMES.md](THEMES.md).
+
+## FAQ
+
+
+ Why am I getting an error during installation/when launching ttrv?
+
+ > If your distro ships with an older version of python 2.7 or python-requests,
+ > you may experience SSL errors or other package incompatibilities. The
+ > easiest way to fix this is to install ttrv using python 3. If you
+ > don't already have pip3, see http://stackoverflow.com/a/6587528 for setup
+ > instructions. Then do
+ >
+ > ```bash
+ > $ sudo pip uninstall ttrv
+ > $ sudo pip3 install -U ttrv
+ > ```
+
+
+
+ Why do I see garbled text like M-b~@M-" or ^@?
+
+ > This type of text usually shows up when python is unable to render
+ > unicode properly.
+ >
+ > 1. Try starting TTRV in ascii-only mode with ``ttrv --ascii``
+ > 2. Make sure that the terminal/font that you're using supports unicode
+ > 3. Try [setting the LOCALE to utf-8](https://perlgeek.de/en/article/set-up-a-clean-utf8-environment)
+ > 4. Your python may have been built against the wrong curses library,
+ > see [here](stackoverflow.com/questions/19373027) and
+ > [here](https://bugs.python.org/issue4787) for more information
+
+
+
+ How do I run the code directly from the repository?
+
+ > This project is structured to be run as a python *module*. This means that
+ > you need to launch it using python's ``-m`` flag. See the example below, which
+ > assumes that you have cloned the repository into the directory **~/ttrv_project**.
+ >
+ > ```bash
+ > $ cd ~/ttrv_project
+ > $ python3 -m ttrv
+ > ```
+
+
+
+## Contributing
+All feedback and suggestions are welcome, just post an issue!
+
+Before writing any code, please read the [Contributor Guidelines](CONTRIBUTING.rst).
+
+## License
+This project is distributed under the [MIT](LICENSE) license.
+
diff --git a/THEMES.md b/THEMES.md
new file mode 100644
index 0000000..bb89d15
--- /dev/null
+++ b/THEMES.md
@@ -0,0 +1,215 @@
+# Themes
+
+## Installing Themes
+
+You can install custom themes by copying them into your **~/.config/ttrv/themes/**
+directory. The name of the theme will match the name of the file.
+
+```
+$ cp my-custom-theme.cfg ~/.config/ttrv/themes/
+$ ttrv --theme my-custom-theme
+```
+
+If you've created a cool theme and would like to share it with the community,
+please submit a pull request!
+
+## A quick primer on ANSI colors
+
+Color support on modern terminals can be split into 4 categories:
+
+1. No support for colors
+2. 8 system colors - Black, Red, Green, Yellow, Blue, Magenta,
+ Cyan, and White
+3. 16 system colors - Everything above + bright variations
+4. 256 extended colors - Everything above + 6x6x6 color palette + 24 greyscale colors
+
+
+
+
The 256 terminal color codes, image from https://github.com/eikenb/terminal-colors
+
+
+The 16 system colors, along with the default foreground and background,
+can usually be customized through your terminal's profile settings. The
+6x6x6 color palette and grayscale colors are constant RGB values across
+all terminals. TTRV's default theme only uses the 8 primary system colors,
+which is why it matches the "look and feel" of the terminal that you're
+running it in.
+
+
+
+
Setting the 16 system colors in iTerm preferences
+
+
+The curses library determines your terminal's color support by reading your
+environment's ``$TERM`` variable, and looking up your terminal's
+capabilities in the [terminfo](https://linux.die.net/man/5/terminfo)
+database. You can emulate this behavior by using the ``tput`` command:
+
+```
+bash$ export TERM=xterm
+bash$ tput colors
+8
+bash$ export TERM=xterm-256color
+bash$ tput colors
+256
+bash$ export TERM=vt220
+bash$ tput colors
+-1
+```
+
+In general you should not be setting your ``$TERM`` variable manually,
+it will be set automatically by you terminal. Often, problems with
+terminal colors can be traced back to somebody hardcoding
+``TERM=xterm-256color`` in their .bashrc file.
+
+## Understanding TTRV Themes
+
+Here's an example of what an TTRV theme file looks like:
+
+```
+[theme]
+; =
+Normal = default default normal
+Selected = default default normal
+SelectedCursor = default default 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 = blue - 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 = blue - underline
+LinkSeen = magenta - underline
+UserFlair = yellow - bold
+```
+
+Every piece of text drawn on the screen is assigned to an ````,
+which has three properties:
+
+- ````: The text color
+- ````: The background color
+- ````: Additional text attributes, like bold or underlined
+
+### Colors
+
+The ```` and ```` properties can be set to any the following values:
+
+- ``default``, which means use the terminal's default foreground or background color.
+- The 16 system colors:
+
+
+ black | dark_gray |
+ red | bright_red |
+ green | bright_green |
+ yellow | bright_yellow |
+ blue | bright_blue |
+ magenta | bright_magenta |
+ cyan | bright_cyan |
+ light_gray | white |
+
+
+- ``ansi_{n}``, where n is between 0 and 255. These will map to their
+ corresponding ANSI colors (see the figure above).
+- Hex RGB codes, like ``#0F0F0F``, which will be converted to their nearest
+ ANSI color. This is generally not recommended because the conversion process
+ downscales the color resolution and the resulting colors will look "off".
+
+### Attributes
+
+The ```` property can be set to any of the following values:
+
+- ``normal``, ``bold``, ``underline``, or ``standout``.
+- ``reverse`` will swap the foreground and background colors.
+
+Attributes can be mixed together using the + symbol. For example,
+ ``bold+underline`` will make the text bold and underlined.
+
+### Modifiers
+
+TTRV themes use special "modifer" elements to define the default
+application style. This allows you to do things like set the default
+background color without needing to set ```` on every
+single element. The three modifier elements are:
+
+- ``Normal`` - The default modifier that applies to all text elements.
+- ``Selected`` - Applies to text elements that are highlighted on the page.
+- ``SelectedCursor`` - Like ``Selected``, but only applies to ``CursorBlock``
+ and ``CursorBar{n}`` elements.
+
+When an element is marked with a ``-`` token, it means inherit the
+attribute value from the relevant modifier. This is best explained
+through an example:
+
+```
+[theme]
+; =
+Normal = ansi_241 ansi_230 normal
+Selected = ansi_241 ansi_254 normal
+
+Link = ansi_33 - underline
+```
+
+
+
+
The default solarized-light theme
+
+
+In the snippet above, the ``Link`` element has its background color set
+to the ``-`` token. This means that it will inherit it's background
+from either the ``Normal`` (light yellow, ansi_230) or the ``Selected`` (light grey, ansi_254)
+element, depending on if it's selected or not.
+
+Compare this with what happens when the ``Link`` background is hard-coded to ``ansi_230``:
+
+```
+[theme]
+; =
+Normal = ansi_241 ansi_230 normal
+Selected = ansi_241 ansi_254 normal
+
+Link = ansi_33 ansi_230 underline
+```
+
+
+
+
The Link element hard-coded to ansi_230
+
+
+In this case, the ``Link`` background stays yellow (ansi_230) even when the link is
+selected by the cursor.
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..81c0835
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,10 @@
+beautifulsoup4==4.5.1
+decorator==4.0.10
+kitchen==1.2.4
+mailcap-fix==0.1.3
+requests==2.20.0
+six==1.10.0
+pytest==3.2.3
+vcrpy==1.10.5
+pylint==1.6.5
+pytest-xdist==1.22.5
\ No newline at end of file
diff --git a/resources/demo.gif b/resources/demo.gif
new file mode 100644
index 0000000000000000000000000000000000000000..2e6d8ce9528f770a1e95ed5fa2399d0f5dc7b819
GIT binary patch
literal 624028
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