Showing preview only (1,211K chars total). Download the full file or copy to clipboard to get everything.
Repository: tildeclub/ttrv
Branch: main
Commit: 3c23c99b30f5
Files: 72
Total size: 1.1 MB
Directory structure:
gitextract_ir8937v6/
├── .coveragerc
├── .gitattributes
├── .gitignore
├── .pylintrc
├── AUTHORS.rst
├── CHANGELOG.rst
├── CONTRIBUTING.rst
├── CONTROLS.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── THEMES.md
├── requirements.txt
├── scripts/
│ ├── build_authors.py
│ ├── build_manpage.py
│ ├── cassettes/
│ │ └── demo_theme.yaml
│ ├── count_lines.sh
│ ├── demo_theme.py
│ ├── initialize_session.py
│ ├── inspect_webbrowser.py
│ ├── pip_clean.sh
│ ├── ttrv.1.template
│ └── update_packages.py
├── setup.cfg
├── setup.py
├── test
├── ttrv/
│ ├── __init__.py
│ ├── __main__.py
│ ├── __version__.py
│ ├── clipboard.py
│ ├── config.py
│ ├── content.py
│ ├── docs.py
│ ├── exceptions.py
│ ├── inbox_page.py
│ ├── mime_parsers.py
│ ├── oauth.py
│ ├── objects.py
│ ├── packages/
│ │ ├── __init__.py
│ │ └── praw/
│ │ ├── __init__.py
│ │ ├── decorator_helpers.py
│ │ ├── decorators.py
│ │ ├── errors.py
│ │ ├── handlers.py
│ │ ├── helpers.py
│ │ ├── internal.py
│ │ ├── multiprocess.py
│ │ ├── objects.py
│ │ ├── praw.ini
│ │ └── settings.py
│ ├── page.py
│ ├── submission_page.py
│ ├── subreddit_page.py
│ ├── subscription_page.py
│ ├── templates/
│ │ ├── index.html
│ │ ├── mailcap
│ │ └── ttrv.cfg
│ ├── terminal.py
│ ├── theme.py
│ └── themes/
│ ├── colorblind-dark.cfg
│ ├── default.cfg.example
│ ├── molokai.cfg
│ ├── papercolor.cfg
│ ├── solarized-dark.cfg
│ └── solarized-light.cfg
├── ttrv.1
└── ttrv.egg-info/
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
├── entry_points.txt
├── requires.txt
└── top_level.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .coveragerc
================================================
[run]
source = tvr
omit =
*/__main__.py
*/packages/praw/*
================================================
FILE: .gitattributes
================================================
tests/cassettes/* binary
================================================
FILE: .gitignore
================================================
.*
!.travis.yml
!.pylintrc
!.gitignore
!.gitattributes
!.coveragerc
*~
*.pyc
*.log
build
dist
rtv.egg-info
tests/refresh-token
venv/
================================================
FILE: .pylintrc
================================================
[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*(# )?<?https?://\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
================================================
FILE: AUTHORS.rst
================================================
================
TTRV Contributors
================
* `deepend <https://github.com/deepend-tildeclub>`_
================
RTV Contributors
================
Thanks to the following people for their contributions to this project.
* `Michael Lazar <https://github.com/michael-lazar>`_
* `Tobin Brown <https://github.com/Brobin>`_
* `woorst <https://github.com/woorst>`_
* `Théo Piboubès <https://github.com/ThePib>`_
* `Yusuke Sakamoto <https://github.com/yskmt>`_
* `Johnathan Jenkins <https://github.com/shaggytwodope>`_
* `tyjak <https://github.com/tyjak>`_
* `Edridge D'Souza <https://github.com/edridgedsouza>`_
* `Josue Ortega <https://github.com/noahfx>`_
* `mekhami <https://github.com/mekhami>`_
* `Nemanja Nedeljković <https://github.com/nemanjan00>`_
* `obosob <https://github.com/obosob>`_
* `codesoap <https://github.com/codesoap>`_
* `Toby Hughes <https://github.com/tobywhughes>`_
* `Noah Morrison <https://github.com/noahmorrison>`_
* `Mardigon Toler <https://github.com/mardigontoler>`_
* `5225225 <https://github.com/5225225>`_
* `Shawn Hind <https://github.com/shawnhind>`_
* `Antoine Nguyen <https://github.com/anhtuann>`_
* `JuanPablo <https://github.com/juanpabloaj>`_
* `Pablo Arias <https://github.com/pabloariasal>`_
* `Robert Greener <https://github.com/ragreener1>`_
* `mac1202 <https://github.com/mac1202>`_
* `Iqbal Singh <https://github.com/nagracks>`_
* `Lorenz Leitner <https://github.com/LoLei>`_
* `Markus Pettersson <https://github.com/MarkusPettersson98>`_
* `Reshef Elisha <https://github.com/ReshefElisha>`_
* `Ryan Reno <https://github.com/rreno>`_
* `Sam Tebbs <https://github.com/SamTebbs33>`_
* `Justin Partain <https://github.com/jupart>`_
* `afloofloo <https://github.com/afloofloo>`_
* `0xflotus <https://github.com/0xflotus>`_
* `Caleb Perkins <https://github.com/calebperkins>`_
* `Charles Saracco <https://github.com/crsaracco>`_
* `Corey McCandless <https://github.com/cmccandless>`_
* `Crestwave <https://github.com/Crestwave>`_
* `Danilo G. Baio <https://github.com/dbaio>`_
* `Donovan Glover <https://github.com/GloverDonovan>`_
* `Fabio Alessandro Locati <https://github.com/Fale>`_
* `Gabriel Le Breton <https://github.com/GabLeRoux>`_
* `Hans Roman <https://github.com/snahor>`_
* `micronn <https://github.com/micronn>`_
* `Ivan Klishch <https://github.com/klivan>`_
* `Joe MacDonald <https://github.com/joeythesaint>`_
* `Marc Abramowitz <https://github.com/msabramo>`_
* `Matt <https://github.com/mehandes>`_
* `Matthew Smith <https://github.com/msmith491>`_
* `Michael Kwon <https://github.com/mskwon>`_
* `Michael Wei <https://github.com/no2chem>`_
* `Ram-Z <https://github.com/Ram-Z>`_
* `Vivek Anand <https://github.com/vivekanand1101>`_
* `Wieland Hoffmann <https://github.com/mineo>`_
* `Adam Talsma <https://github.com/a-tal>`_
* `geheimnisse <https://github.com/geheimnisse>`_
* `Alexander Terry <https://github.com/mralext20>`_
* `peterpans01 <https://github.com/peterpans01>`_
================================================
FILE: CHANGELOG.rst
================================================
=============
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:
* <New>
* <Distinguished>
* <MessageSubject>
* <MessageLink>
* <MessageAuthor>
* <MessageSubreddit>
* <MessageText>
--------------------
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.
================================================
FILE: CONTRIBUTING.rst
================================================
----------------------
Contributor Guidelines
----------------------
Before you start
================
- Post an issue on the `tracker <https://github.com/tildeclub/ttrv/issues>`_ 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 <https://www.python.org/dev/peps/pep-0008/>`_
- 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 <https://google.github.io/styleguide/pyguide.html#Comments>`_)
- 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 <http://pytest.org/>`_ and `VCR.py <https://vcrpy.readthedocs.org/>`_
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
================================================
FILE: CONTROLS.md
================================================
# Controls
## Basic Commands
- <kbd>j</kbd> or <kbd>▼</kbd> - Move the cursor down
- <kbd>k</kbd> or <kbd>▲</kbd> - Move the cursor up
- <kbd>l</kbd> or <kbd>►</kbd> - View the currently selected item
- <kbd>h</kbd> or <kbd>◄</kbd> - Return to the previous view
- <kbd>m</kbd> or <kbd>PgUp</kbd> - Move the cursor up one page
- <kbd>n</kbd> or <kbd>PgDn</kbd> - Move the cursor down one page
- <kbd>gg</kbd> - Jump to the top of the page
- <kbd>G</kbd> - Jump to the bottom of the page
- <kbd>1</kbd> to <kbd>7</kbd> - Sort submissions by category
- <kbd>r</kbd> or <kbd>F5</kbd> - Refresh the content on the current page
- <kbd>u</kbd> - Login to your reddit account
- <kbd>q</kbd> - Quit
- <kbd>Q</kbd> - Force quit
- <kbd>y</kbd> - Copy submission permalink to clipboard
- <kbd>Y</kbd> - Copy submission link to clipboard
- <kbd>F2</kbd> - Cycle to the previous color theme
- <kbd>F3</kbd> - Cycle to the next color theme
- <kbd>?</kbd> - Show the help screen
- <kbd>/</kbd> - Open a prompt to select a subreddit
The <kbd>/</kbd> 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 <kbd>u</kbd> key. Once you are logged in, your username will
appear in the top-right corner of the screen.
- <kbd>a</kbd> - Upvote
- <kbd>z</kbd> - Downvote
- <kbd>c</kbd> - Compose a new submission or comment
- <kbd>C</kbd> - Compose a new private message
- <kbd>e</kbd> - Edit the selected submission or comment
- <kbd>d</kbd> - Delete the selected submission or comment
- <kbd>i</kbd> - View your inbox (see [inbox mode](#inbox-mode))
- <kbd>s</kbd> - View your subscribed subreddits (see [subscription mode](#subscription-mode))
- <kbd>S</kbd> - View your subscribed multireddits (see [subscription mode](#subscription-mode))
- <kbd>u</kbd> - Logout of your reddit account
- <kbd>w</kbd> - Save the selected submission or comment
## Subreddit Mode
The following actions can be performed when viewing a subreddit:
- <kbd>l</kbd> or <kbd>►</kbd> - View the comments for the selected submission (see [submission mode](#submission-mode))
- <kbd>o</kbd> or <kbd>ENTER</kbd> - Open the selected submission link using your web browser or ``.mailcap`` config
- <kbd>SPACE</kbd> - Mark the selected submission as *hidden*
- <kbd>p</kbd> - Toggle between the currently viewed subreddit and ``/r/front``
- <kbd>f</kbd> - Open a prompt to search the current subreddit for a text string
## Submission Mode
The following actions can be performed when viewing a submission:
- <kbd>h</kbd> or <kbd>◄</kbd> - Close the submission and return to the previous page
- <kbd>l</kbd> or <kbd>►</kbd> - View the selected comment using the system's pager
- <kbd>o</kbd> or <kbd>ENTER</kbd> - Open a link in the comment using your web browser or ``.mailcap`` config
- <kbd>SPACE</kbd> - Fold or expand the selected comment and its children
- <kbd>b</kbd> - Send the comment text to the system's urlviewer application
- <kbd>J</kbd> - Move the cursor down the the next comment at the same indentation
- <kbd>K</kbd> - Move the cursor up to the parent comment
## Subscription Mode
The following actions can be performed when viewing your subscriptions or multireddits:
- <kbd>h</kbd> or <kbd>◄</kbd> - Close your subscriptions and return to the previous page
- <kbd>l</kbd> or <kbd>►</kbd> - Open the selected subreddit or multireddit
## Inbox Mode
The following actions can be performed when viewing your inbox:
- <kbd>h</kbd> or <kbd>◄</kbd> - Close your inbox and return to the previous page
- <kbd>l</kbd> or <kbd>►</kbd> - View the context of the selected comment
- <kbd>o</kbd> or <kbd>Enter</kbd> - Open the submission of the selected comment
- <kbd>c</kbd> - Reply to the selected comment or message
- <kbd>w</kbd> - Mark the selected comment or message as seen
================================================
FILE: LICENSE
================================================
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.
================================================
FILE: MANIFEST.in
================================================
include version.py
include CHANGELOG.rst
include AUTHORS.rst
include README.md
include LICENSE
include ttrv.1
include ttrv/templates/*
include ttrv/themes/*
================================================
FILE: README.md
================================================
<h1 align="center">Tilde Terminal Reddit Viewer (TTRV)</h1>
<p>Forked from Original source/development at: <a href="https://github.com/michael-lazar/rtv">RTV</a></p>
<p align="center">
A text-based interface (TUI) to view and interact with Reddit from your terminal.<br>
</p>
<p align="center">
<img alt="title image" src="https://github.com/tildeclub/ttrv/raw/master/resources/title_image.png"/>
</p>
<p align="center">
</p>
## Table of Contents
* [Demo](#demo)
* [Installation](#installation)
* [Usage](#usage)
* [Settings](#settings)
* [Themes](#themes)
* [FAQ](#faq)
* [Contributing](#contributing)
* [License](#license)
## Demo
<p align="center">
<img alt="title image" src="https://github.com/tildeclub/ttrv/raw/master/resources/demo.gif"/>
</p>
## 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 <kbd>▲</kbd> and <kbd>▼</kbd> to scroll through submissions
- Press <kbd>▶</kbd> to view the selected submission and <kbd>◀</kbd> to return
- Press <kbd>space-bar</kbd> to expand/collapse comments
- Press <kbd>u</kbd> to login (this requires a web browser for [OAuth](https://github.com/reddit-archive/reddit/wiki/oauth2))
- Press <kbd>?</kbd> to open the help screen
Press <kbd>/</kbd> 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.
<p align="center">
<img alt="title image" src="https://github.com/tildeclub/ttrv/raw/master/resources/mailcap.gif"/>
</p>
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:
<table>
<tr>
<td><strong>$TTRV_EDITOR</strong></td>
<td>A program used to compose text submissions and comments, e.g. <strong>vim</strong>, <strong>emacs</strong>, <strong>gedit</strong>
<br/> <em>If not specified, will fallback to $VISUAL and $EDITOR in that order.</em></td>
</tr>
<tr>
<td><strong>$TTRV_BROWSER</strong></td>
<td>A program used to open links to external websites, e.g. <strong>firefox</strong>, <strong>google-chrome</strong>, <strong>w3m</strong>, <strong>lynx</strong>
<br/> <em>If not specified, will fallback to $BROWSER, or your system's default browser.</em></td>
</tr>
<tr>
<td><strong>$TTRV_URLVIEWER</strong></td>
<td>A tool used to extract hyperlinks from blocks of text, e.g. <a href=https://github.com/sigpipe/urlview>urlview</a>, <a href=https://github.com/firecat53/urlscan>urlscan</a>
<br/> <em>If not specified, will fallback to urlview if it is installed.</em></td>
</tr>
</table>
### 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
<table>
<tr>
<td align="center">
<p><strong>Solarized Dark</strong></p>
<img src="https://github.com/tildeclub/ttrv/raw/master/resources/theme_solarized_dark.png"></img>
</td>
<td align="center">
<p><strong>Solarized Light</strong></p>
<img src="https://github.com/tildeclub/ttrv/raw/master/resources/theme_solarized_light.png"></img>
</td>
</tr>
<tr>
<td align="center">
<p><strong>Papercolor</strong></p>
<img src="https://github.com/tildeclub/ttrv/raw/master/resources/theme_papercolor.png"></img>
</td>
<td align="center">
<p><strong>Molokai</strong></p>
<img src="https://github.com/tildeclub/ttrv/raw/master/resources/theme_molokai.png"></img>
</td>
</tr>
</table>
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 <kbd>F2</kbd> & <kbd>F3</kbd> 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
<details>
<summary>Why am I getting an error during installation/when launching ttrv?</summary>
> 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
> ```
</details>
<details>
<summary>Why do I see garbled text like <em>M-b~@M-"</em> or <em>^@</em>?</summary>
> 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
</details>
<details>
<summary>How do I run the code directly from the repository?</summary>
> 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
> ```
</details>
## 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.
================================================
FILE: THEMES.md
================================================
# 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
<p align="center">
<img alt="terminal colors" src="resources/terminal_colors.png"/>
<br><i>The 256 terminal color codes, image from <a href=https://github.com/eikenb/terminal-colors>https://github.com/eikenb/terminal-colors</a></i>
</p>
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.
<p align="center">
<img alt="iTerm preferences" src="resources/iterm_preferences.png"/>
<br><i>Setting the 16 system colors in iTerm preferences</i>
</p>
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]
;<element> = <foreground> <background> <attributes>
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 ``<element>``,
which has three properties:
- ``<foreground>``: The text color
- ``<background>``: The background color
- ``<attributes>``: Additional text attributes, like bold or underlined
### Colors
The ``<foreground>`` and ``<background>`` 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:
<p>
<table>
<tr><td>black</td><td>dark_gray</td></tr>
<tr><td>red</td></td><td>bright_red</td></tr>
<tr><td>green</td></td><td>bright_green</td></tr>
<tr><td>yellow</td></td><td>bright_yellow</td></tr>
<tr><td>blue</td></td><td>bright_blue</td></tr>
<tr><td>magenta</td></td><td>bright_magenta</td></tr>
<tr><td>cyan</td></td><td>bright_cyan</td></tr>
<tr><td>light_gray</td></td><td>white</td></tr>
</table>
</p>
- ``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 ``<attributes>`` 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 ``<background>`` 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]
;<element> = <foreground> <background> <attributes>
Normal = ansi_241 ansi_230 normal
Selected = ansi_241 ansi_254 normal
Link = ansi_33 - underline
```
<p align="center">
<img src="resources/theme_modifiers.png"/>
<br><i>The default solarized-light theme</i>
</p>
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]
;<element> = <foreground> <background> <attributes>
Normal = ansi_241 ansi_230 normal
Selected = ansi_241 ansi_254 normal
Link = ansi_33 ansi_230 underline
```
<p align="center">
<img src="resources/theme_modifiers_2.png"/>
<br><i>The Link element hard-coded to ansi_230</i>
</p>
In this case, the ``Link`` background stays yellow (ansi_230) even when the link is
selected by the cursor.
================================================
FILE: requirements.txt
================================================
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
================================================
FILE: scripts/build_authors.py
================================================
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Scrape the project contributors list from Github and update AUTHORS.rst
"""
from __future__ import unicode_literals
import os
import time
import logging
import requests
_filepath = os.path.dirname(os.path.relpath(__file__))
FILENAME = os.path.abspath(os.path.join(_filepath, '..', 'AUTHORS.rst'))
URL = "https://api.github.com/repos/tildeclub/ttrv/contributors?per_page=1000"
HEADER = """\
================
TTRV Contributors
================
Thanks to the following people for their contributions to this project.
"""
def main():
logging.captureWarnings(True)
# Request the list of contributors
print('GET {}'.format(URL))
resp = requests.get(URL)
contributors = resp.json()
lines = []
for contributor in contributors:
time.sleep(1.0)
# Request each contributor individually to get the full name
print('GET {}'.format(contributor['url']))
resp = requests.get(contributor['url'])
user = resp.json()
name = user.get('name') or contributor['login']
url = user['html_url']
lines.append('* `{} <{}>`_'.format(name, url))
print('Writing to {}'.format(FILENAME))
text = HEADER + '\n'.join(lines)
text = text.encode('utf-8')
with open(FILENAME, 'wb') as fp:
fp.write(text)
if __name__ == '__main__':
main()
================================================
FILE: scripts/build_manpage.py
================================================
#!/usr/bin/env python
"""
Internal tool used to automatically generate an up-to-date version of the tvr
man page. Currently this script should be manually ran after each version bump.
In the future, it would be nice to have this functionality built into setup.py.
Usage:
$ python scripts/build_manpage.py
"""
import os
import sys
from datetime import datetime
_filepath = os.path.dirname(os.path.relpath(__file__))
ROOT = os.path.abspath(os.path.join(_filepath, '..'))
sys.path.insert(0, ROOT)
import tvr
from tvr import config
def main():
parser = config.build_parser()
help_text = parser.format_help()
help_sections = help_text.split('\n\n')
del help_sections[1]
data = {}
print('Fetching version')
data['version'] = tvr.__version__
print('Fetching release date')
data['release_date'] = datetime.utcnow().strftime('%B %d, %Y')
print('Fetching synopsis')
synopsis = help_sections[0].replace('usage: ', '')
synopsis = ' '.join(line.strip() for line in synopsis.split('\n'))
data['synopsis'] = synopsis
print('Fetching description')
data['description'] = help_sections[1]
# Build the options section for each argument from the help section
# Example Before:
# -h, --help show this help message and exit
# Example After
# .TP
# \fB-h\fR, \fB--help\fR
# show this help message and exit
options = ''
lines = help_sections[2].split('\n')[1:] # positional arguments
lines.extend(help_sections[3].split('\n')[1:]) # optional arguments
lines = [line.strip() for line in lines]
arguments = []
for line in lines:
if line.startswith('-'):
arguments.append(line)
elif line.startswith('URL'):
# Special case for URL which is a positional argument
arguments.append(line)
else:
arguments[-1] = arguments[-1] + ' ' + line
for argument in arguments:
flag, description = (col.strip() for col in argument.split(' ', 1))
flag = ', '.join(r'\fB'+f+r'\fR' for f in flag.split(', '))
options += '\n'.join(('.TP', flag, description, '\n'))
data['options'] = options
print('Fetching license')
data['license'] = tvr.__license__
print('Fetching copyright')
data['copyright'] = tvr.__copyright__
# Escape dashes is all of the sections
data = {k: v.replace('-', r'\-') for k, v in data.items()}
print('Reading from %s/scripts/tvr.1.template' % ROOT)
with open(os.path.join(ROOT, 'scripts/tvr.1.template')) as fp:
template = fp.read()
print('Populating template')
out = template.format(**data)
print('Writing to %s/tvr.1' % ROOT)
with open(os.path.join(ROOT, 'tvr.1'), 'w') as fp:
fp.write(out)
if __name__ == '__main__':
main()
================================================
FILE: scripts/cassettes/demo_theme.yaml
================================================
interactions:
- request:
body: grant_type=refresh_token&redirect_uri=http%3A%2F%2F127.0.0.1%3A65000%2F&refresh_token=**********
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Authorization: ['**********']
Connection: [keep-alive]
Content-Length: ['122']
Content-Type: [application/x-www-form-urlencoded]
User-Agent: [TTRV Theme Demo PRAW/3.6.1 Python/3.6.1 b'Darwin-14.5.0-x86_64-i386-64bit']
method: POST
uri: https://api.reddit.com/api/v1/access_token/
response:
body: {string: '{"access_token": "5TsmI0CKTE9P80JWx5PNB8q2cQw", "token_type":
"bearer", "device_id": "None", "expires_in": 3600, "scope": "edit history
identity mysubreddits privatemessages read report save submit subscribe vote"}'}
headers:
Accept-Ranges: [bytes]
Connection: [keep-alive]
Content-Length: ['214']
Content-Type: [application/json; charset=UTF-8]
Date: ['Fri, 07 Jul 2017 05:52:23 GMT']
Server: [snooserv]
Set-Cookie: ['session_tracker=CYIJ6S5YULMlp5p0IA.0.1499406743221.Z0FBQUFBQlpYeUdYNDQwcjA1andsVVJrVjFwNGtKNzZiMHE5ODhpd3BUVjVicjhoRmRudDVBeXZqbm93ZUxuZ1JsTmlIdWp2ZXRERTZubjI3N0k5a2ZQeWpoYVFlaThJS05ibkZ3RlhZTmtVYVF2VXFhcnFyQl83RDk3MXJEZzJzX0xDM1BPRE14ZDg;
Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 07-Jul-2017 07:52:23
GMT; secure', edgebucket=u1fMLgWA7OnvVsZM9S; Domain=reddit.com; Max-Age=63071999;
Path=/; secure]
Strict-Transport-Security: [max-age=15552000; includeSubDomains; preload]
Via: [1.1 varnish]
X-Cache: [MISS]
X-Cache-Hits: ['0']
X-Moose: [majestic]
X-Served-By: [cache-iad2131-IAD]
X-Timer: ['S1499406743.211475,VS0,VE19']
cache-control: ['max-age=0, must-revalidate']
set-cookie: ['session_tracker=CYIJ6S5YULMlp5p0IA.0.1499406743221.Z0FBQUFBQlpYeUdYNDQwcjA1andsVVJrVjFwNGtKNzZiMHE5ODhpd3BUVjVicjhoRmRudDVBeXZqbm93ZUxuZ1JsTmlIdWp2ZXRERTZubjI3N0k5a2ZQeWpoYVFlaThJS05ibkZ3RlhZTmtVYVF2VXFhcnFyQl83RDk3MXJEZzJzX0xDM1BPRE14ZDg;
Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 07-Jul-2017 07:52:23
GMT; secure', edgebucket=u1fMLgWA7OnvVsZM9S; Domain=reddit.com; Max-Age=63071999;
Path=/; secure]
x-content-type-options: [nosniff]
x-frame-options: [SAMEORIGIN]
x-xss-protection: [1; mode=block]
status: {code: 200, message: OK}
- request:
body: null
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Authorization: ['**********']
Connection: [keep-alive]
User-Agent: [TTRV Theme Demo PRAW/3.6.1 Python/3.6.1 b'Darwin-14.5.0-x86_64-i386-64bit']
method: GET
uri: https://oauth.reddit.com/api/v1/me.json
response:
body:
string: !!binary |
H4sIAJghX1kC/61WXW/jNhD8K4Gf0ySW8+HcW3rNtWmLw+XQokCLgqCklcWa4vIo0o596H/vLiVZ
VOI2PeBeAofL1Q5nZ4f8PFOtgMZq3AHM3pxUUrdwejKrQPrgoKWlz7MShUEvvJPFmha8C7ylrXEr
ZGOFViZZ1moDopbWglFmRYnbMSbLFtwGnHBg0XmKj7FVzGt9K1ZOGs+VhwigRRu0dEKZCAi3Bhz9
mjnQsJGmgBnt20inKJPXCzTeoRYZr8OTBacaMF6okqLZxfzvCLRlBIIhqQKEo7MEO5ZtMFcaxBZy
4aVbwRRuCZUM2ovWtaJGXWLgwl8AbX4M2vwmQpPlHtxaHOc9EOBW9OiftYNjBEkY2XA3+9C2Vh44
AUphm4RZ+kSx3okCG4aQBIKlJpRAEVyrqIKxg8I6qJKlXGOx7irnu76z0wQZPFKgCobP2AeQurwC
BxxnCUqlk482TPuTddigaLCUejiwKDRhFiVt34lStY1qW5VTnxQm6RpWsthRa6Ur6gh4jBHn0hC1
sJmeGUJ/XGGRauwSNnwzcBTFniRV6Eg6tfc2JanwaqM81++ktXXUgDFucQ0NmhUKFgNEXSTKKWpp
DBAbpxPhtCEntkrljwnn8oZ1Y7EluSAdGCvWbg5ejmW77ECzzk2h/5SDImkVSThH6lFHcVTdRGEG
tkLjakWJRhSyqF8ypUyOT8KGth7XIjlHyvXNKSUpnYpVlSrGYNp/RRw5ar5XJINBq9N+W0n6E3Ss
ZMkhabhpJGl8Ghn9JKmHsh+0l0NFsGPRksZn6nWvoySlOYwdGrQR54EEgmxlQ5nCAZiNIoKfq5JJ
72aK1C6J/mPnoG7MvoL53N6yiA46Ey7odPZ7Q2zB8yBOTCHa1cHUyXafJxlqA/l7zspOaD+4AzzR
HCQ0RTaB1fzSeqPKockh2Z92QlKbSOIMZKT/9fn6zztjvowDllAuw1ehfBkpL2iHftH7LzfBI3Lr
7NkTl8nqc4NyIIek6CNkmHT1RB+RhjbOxpcBvRfa0No4Dsny6E7MSrwNaGc8vMqpw8zR4RO0LFTD
Le3c4c35eX7m69Dk7Vn3lYbsQp7RGJ3f3Gm7uXe48Y/z6wu8fbd7eCh/eLuvfs7W38Bfxe0y+/U6
fHgb9g9nlmRC3+9U9r8r2N8WvzwsNnp/vS7WD9+5D5eLd81P+vvfF3dPG1xU+2/f38+LH21bPA4V
iHOr5S7es/F6UU+RjVk4L4hZrfaSJ1zYWu5BLDilJor5clZ7vglM0Pq0u8uZp4j4GZ0kCpWTpbBM
Ot6HNwfzNzZzDXyD68jwLIIDTrW9xcSloU4T/KRMeo4IX7wCv+O0R59Aej7Y5IM6fvHfvhec5vA5
IzvK2XnSyZ60P+bZ8uL0ZLG8/JNiA2Z/JRb608315JxIYGWnuh4R8rtzvkwOb0NOYySO0BUFOhTN
rq5PT+gP1xy90e9sxxhVTCuPjetL8zzxukXTTqZgRa9G8j2rXDx3QmtUkv5kJPKXu2lrmZpxtwie
b8s+g46mKpX6IV8bRAK/qiiLXINl1O8emRjMlt7cBCbB1lE47qjpiTYU6d5q0xhtFv3q8AkkX6/Z
qA5mN7vP8N5/fKzK6q56/xhVpeiRWZHBCYc5RpBDPt+0Yi1dw1dbli0ZVXxdFPRGYZchJXRG5dF2
G5n8rj2JiUZ4U2gxK17trUHcSB9fAkN00NUxUTJmuqtlN0Xzy+wqW8yvLy/OGExsaDEC4LV+c9+u
mHCRLfsEekb1L7Sh9vDKHM69zPoTHGR1sOl/AH1Jnh66DQAA
headers:
Accept-Ranges: [bytes]
Connection: [keep-alive]
Content-Encoding: [gzip]
Content-Length: ['1347']
Content-Type: [application/json; charset=UTF-8]
Date: ['Fri, 07 Jul 2017 05:52:24 GMT']
Server: [snooserv]
Set-Cookie: ['session_tracker=EsHcNvrMDzIw7rl10k.0.1499406744791.Z0FBQUFBQlpYeUdZbllUSU1OcEdvaHd2V0tGOUlRUzVVNWRqVUtVeUFKSkxIV0t5Yk5sQWFyczJTSk9tWDRBbnJyd2t4alkxZzR5elZOMTBZeWp4UWRnUnctMTdOaE1pSDIyTHhsUGJCS1pvM2hlX0xUN0M0U0FKeGtEM3YwWFNVMFYyOC1yMk55YUs;
Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 07-Jul-2017 07:52:24
GMT; secure', edgebucket=FCaLeYpsJ64Y4b61zH; Domain=reddit.com; Max-Age=63071999;
Path=/; secure]
Strict-Transport-Security: [max-age=15552000; includeSubDomains; preload]
Vary: [accept-encoding]
Via: [1.1 varnish]
X-Cache: [MISS]
X-Cache-Hits: ['0']
X-Moose: [majestic]
X-Served-By: [cache-iad2130-IAD]
X-Timer: ['S1499406745.741230,VS0,VE93']
cache-control: ['private, s-maxage=0, max-age=0, must-revalidate, max-age=0,
must-revalidate']
expires: ['-1']
set-cookie: ['session_tracker=EsHcNvrMDzIw7rl10k.0.1499406744791.Z0FBQUFBQlpYeUdZbllUSU1OcEdvaHd2V0tGOUlRUzVVNWRqVUtVeUFKSkxIV0t5Yk5sQWFyczJTSk9tWDRBbnJyd2t4alkxZzR5elZOMTBZeWp4UWRnUnctMTdOaE1pSDIyTHhsUGJCS1pvM2hlX0xUN0M0U0FKeGtEM3YwWFNVMFYyOC1yMk55YUs;
Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 07-Jul-2017 07:52:24
GMT; secure', edgebucket=FCaLeYpsJ64Y4b61zH; Domain=reddit.com; Max-Age=63071999;
Path=/; secure]
x-content-type-options: [nosniff]
x-frame-options: [SAMEORIGIN]
x-ratelimit-remaining: ['599.0']
x-ratelimit-reset: ['456']
x-ratelimit-used: ['1']
x-xss-protection: [1; mode=block]
status: {code: 200, message: OK}
- request:
body: null
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Authorization: ['**********']
Connection: [keep-alive]
Cookie: [edgebucket=FCaLeYpsJ64Y4b61zH; session_tracker=EsHcNvrMDzIw7rl10k.0.1499406744791.Z0FBQUFBQlpYeUdZbllUSU1OcEdvaHd2V0tGOUlRUzVVNWRqVUtVeUFKSkxIV0t5Yk5sQWFyczJTSk9tWDRBbnJyd2t4alkxZzR5elZOMTBZeWp4UWRnUnctMTdOaE1pSDIyTHhsUGJCS1pvM2hlX0xUN0M0U0FKeGtEM3YwWFNVMFYyOC1yMk55YUs]
User-Agent: [TTRV Theme Demo PRAW/3.6.1 Python/3.6.1 b'Darwin-14.5.0-x86_64-i386-64bit']
method: GET
uri: https://oauth.reddit.com/user/civilization_phaze_3/saved.json?sort=new&t=all&limit=1024
response:
body:
string: !!binary |
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
KxpWx4bQcWt6eP3ly38BcMfWWAA+AAA=
headers:
Accept-Ranges: [bytes]
Connection: [keep-alive]
Content-Encoding: [gzip]
Content-Length: ['3785']
Content-Type: [application/json; charset=UTF-8]
Date: ['Fri, 07 Jul 2017 05:52:26 GMT']
Server: [snooserv]
Strict-Transport-Security: [max-age=15552000; includeSubDomains; preload]
Vary: [accept-encoding]
Via: [1.1 varnish]
X-Cache: [MISS]
X-Cache-Hits: ['0']
X-Moose: [majestic]
X-Served-By: [cache-iad2130-IAD]
X-Timer: ['S1499406747.598866,VS0,VE101']
cache-control: ['private, s-maxage=0, max-age=0, must-revalidate, max-age=0,
must-revalidate']
expires: ['-1']
set-cookie: ['loid=0000000000000lqnao.2.1425202840186.Z0FBQUFBQlpYeUdhdHFFRkJMVXZTQ1hoYUdjNGI4SHhGSG9NemY2bElIQUZqTjZCRFBjVkJQMnpQdHcxS2dyd1hjWWh2QllvQmg1ZWVrUlhYVG5mMW41S1FaNXJoTFRyc1hpUVpWWHNZU21TWmM5Tnd1QUJyTmcyM0dOaWFIc3VEYlU5X05WNF9wMW0;
Domain=reddit.com; Max-Age=63071999; Path=/; expires=Sun, 07-Jul-2019 05:52:26
GMT; secure', 'session_tracker=EsHcNvrMDzIw7rl10k.0.1499406746608.Z0FBQUFBQlpYeUdhYmFhMjY0QlJLRm1kLUlRWGl4RWZRVHZIcWZhcWZNSWlZeHhoLVp4eUc0S0MzcXk2QmxEWlJIWU9NbEtHUHJaN2pWQ2RuczlBMnoyOXp6WDJRX3JTY3pLdTU3cG5YdEpCcmx6XzdqVHRxZTJNRG1oY0h0LUdpdUQ4cFVJTXI3UzE;
Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 07-Jul-2017 07:52:26
GMT; secure']
x-content-type-options: [nosniff]
x-frame-options: [SAMEORIGIN]
x-ratelimit-remaining: ['598.0']
x-ratelimit-reset: ['454']
x-ratelimit-used: ['2']
x-reddit-tracking: ['https://pixel.redditmedia.com/pixel/of_destiny.png?v=cb%2FABGh5ca5iuA7xnGcRuEy59xY8w0%2Bkq%2BKrywYDqnXs%2BwyInsDbRdQM5L4nNUXtvkgdj%2Flk1QyLdOuD6TXf3o4u%2BU2zNLtEKHri235%2Fcl0Dyn44KTucNQ%3D%3D']
x-ua-compatible: [IE=edge]
x-xss-protection: [1; mode=block]
status: {code: 200, message: OK}
- request:
body: null
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Authorization: ['**********']
Connection: [keep-alive]
Cookie: [edgebucket=FCaLeYpsJ64Y4b61zH; session_tracker=EsHcNvrMDzIw7rl10k.0.1499406746608.Z0FBQUFBQlpYeUdhYmFhMjY0QlJLRm1kLUlRWGl4RWZRVHZIcWZhcWZNSWlZeHhoLVp4eUc0S0MzcXk2QmxEWlJIWU9NbEtHUHJaN2pWQ2RuczlBMnoyOXp6WDJRX3JTY3pLdTU3cG5YdEpCcmx6XzdqVHRxZTJNRG1oY0h0LUdpdUQ4cFVJTXI3UzE;
loid=0000000000000lqnao.2.1425202840186.Z0FBQUFBQlpYeUdhdHFFRkJMVXZTQ1hoYUdjNGI4SHhGSG9NemY2bElIQUZqTjZCRFBjVkJQMnpQdHcxS2dyd1hjWWh2QllvQmg1ZWVrUlhYVG5mMW41S1FaNXJoTFRyc1hpUVpWWHNZU21TWmM5Tnd1QUJyTmcyM0dOaWFIc3VEYlU5X05WNF9wMW0]
User-Agent: [TTRV Theme Demo PRAW/3.6.1 Python/3.6.1 b'Darwin-14.5.0-x86_64-i386-64bit']
method: GET
uri: https://oauth.reddit.com/subreddits/popular/.json?limit=1024
response:
body:
string: !!binary |
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
yg4gpYlj9u9
gitextract_ir8937v6/
├── .coveragerc
├── .gitattributes
├── .gitignore
├── .pylintrc
├── AUTHORS.rst
├── CHANGELOG.rst
├── CONTRIBUTING.rst
├── CONTROLS.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── THEMES.md
├── requirements.txt
├── scripts/
│ ├── build_authors.py
│ ├── build_manpage.py
│ ├── cassettes/
│ │ └── demo_theme.yaml
│ ├── count_lines.sh
│ ├── demo_theme.py
│ ├── initialize_session.py
│ ├── inspect_webbrowser.py
│ ├── pip_clean.sh
│ ├── ttrv.1.template
│ └── update_packages.py
├── setup.cfg
├── setup.py
├── test
├── ttrv/
│ ├── __init__.py
│ ├── __main__.py
│ ├── __version__.py
│ ├── clipboard.py
│ ├── config.py
│ ├── content.py
│ ├── docs.py
│ ├── exceptions.py
│ ├── inbox_page.py
│ ├── mime_parsers.py
│ ├── oauth.py
│ ├── objects.py
│ ├── packages/
│ │ ├── __init__.py
│ │ └── praw/
│ │ ├── __init__.py
│ │ ├── decorator_helpers.py
│ │ ├── decorators.py
│ │ ├── errors.py
│ │ ├── handlers.py
│ │ ├── helpers.py
│ │ ├── internal.py
│ │ ├── multiprocess.py
│ │ ├── objects.py
│ │ ├── praw.ini
│ │ └── settings.py
│ ├── page.py
│ ├── submission_page.py
│ ├── subreddit_page.py
│ ├── subscription_page.py
│ ├── templates/
│ │ ├── index.html
│ │ ├── mailcap
│ │ └── ttrv.cfg
│ ├── terminal.py
│ ├── theme.py
│ └── themes/
│ ├── colorblind-dark.cfg
│ ├── default.cfg.example
│ ├── molokai.cfg
│ ├── papercolor.cfg
│ ├── solarized-dark.cfg
│ └── solarized-light.cfg
├── ttrv.1
└── ttrv.egg-info/
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
├── entry_points.txt
├── requires.txt
└── top_level.txt
SYMBOL INDEX (775 symbols across 30 files)
FILE: scripts/build_authors.py
function main (line 29) | def main():
FILE: scripts/build_manpage.py
function main (line 24) | def main():
FILE: scripts/demo_theme.py
function initialize_vcr (line 34) | def initialize_vcr():
function notification_getch (line 69) | def notification_getch(self):
function prompt_getch (line 75) | def prompt_getch(self):
function draw_screen (line 81) | def draw_screen(stdscr, reddit, config, theme, oauth):
function main (line 214) | def main():
FILE: scripts/update_packages.py
function main (line 20) | def main():
FILE: setup.py
function long_description (line 41) | def long_description():
FILE: ttrv/__main__.py
function main (line 60) | def main():
FILE: ttrv/clipboard.py
function _subprocess_copy (line 10) | def _subprocess_copy(text, args_list):
function copy (line 15) | def copy(text):
function copy_osx (line 27) | def copy_osx(text):
function copy_linux (line 31) | def copy_linux(text):
FILE: ttrv/config.py
function build_parser (line 31) | def build_parser():
function copy_default_mailcap (line 93) | def copy_default_mailcap(filename=MAILCAP):
function copy_default_config (line 100) | def copy_default_config(filename=CONFIG):
function _copy_settings_file (line 107) | def _copy_settings_file(source, destination, name):
class OrderedSet (line 130) | class OrderedSet(object):
method __init__ (line 136) | def __init__(self, elements=None):
method __contains__ (line 141) | def __contains__(self, item):
method __len__ (line 144) | def __len__(self):
method __getitem__ (line 147) | def __getitem__(self, item):
method add (line 150) | def add(self, item):
class Config (line 155) | class Config(object):
method __init__ (line 160) | def __init__(self, history_file=HISTORY, token_file=TOKEN, **kwargs):
method __getitem__ (line 175) | def __getitem__(self, item):
method __setitem__ (line 181) | def __setitem__(self, key, value):
method __delitem__ (line 184) | def __delitem__(self, key):
method update (line 187) | def update(self, **kwargs):
method load_refresh_token (line 190) | def load_refresh_token(self):
method save_refresh_token (line 197) | def save_refresh_token(self):
method delete_refresh_token (line 202) | def delete_refresh_token(self):
method load_history (line 207) | def load_history(self):
method save_history (line 214) | def save_history(self):
method delete_history (line 219) | def delete_history(self):
method get_args (line 225) | def get_args():
method get_file (line 242) | def get_file(cls, filename=None):
method _parse_ttrv_file (line 258) | def _parse_ttrv_file(config):
method _ensure_filepath (line 296) | def _ensure_filepath(filename):
FILE: ttrv/content.py
class Content (line 23) | class Content(object):
method get (line 25) | def get(self, index, n_cols):
method iterate (line 32) | def iterate(self, index, step, n_cols=70):
method range (line 50) | def range(self):
method flatten_comments (line 57) | def flatten_comments(comments, root_level=0):
method strip_praw_comment (line 123) | def strip_praw_comment(cls, comment):
method strip_praw_submission (line 208) | def strip_praw_submission(cls, sub):
method strip_praw_subscription (line 279) | def strip_praw_subscription(subscription):
method strip_praw_message (line 299) | def strip_praw_message(cls, msg):
method humanize_timestamp (line 345) | def humanize_timestamp(utc_timestamp, verbose=False):
method wrap_text (line 401) | def wrap_text(text, width):
method extract_links (line 416) | def extract_links(html):
class SubmissionContent (line 432) | class SubmissionContent(Content):
method __init__ (line 438) | def __init__(self, submission, loader, indent_size=2, max_indent_level=8,
method from_url (line 456) | def from_url(cls, reddit, url, loader, indent_size=2, max_indent_level=8,
method range (line 476) | def range(self):
method get (line 479) | def get(self, index, n_cols=70):
method toggle (line 509) | def toggle(self, index, n_cols=70):
class SubredditContent (line 560) | class SubredditContent(Content):
method __init__ (line 566) | def __init__(self, name, submissions, loader, order=None,
method from_name (line 591) | def from_name(cls, reddit, name, loader, order=None, query=None):
method range (line 803) | def range(self):
method get (line 809) | def get(self, index, n_cols=70):
class SubscriptionContent (line 866) | class SubscriptionContent(Content):
method __init__ (line 868) | def __init__(self, name, subscriptions, loader):
method from_user (line 892) | def from_user(cls, reddit, loader, content_type='subreddit'):
method range (line 909) | def range(self):
method get (line 912) | def get(self, index, n_cols=70):
class InboxContent (line 941) | class InboxContent(Content):
method __init__ (line 943) | def __init__(self, order, content_generator, loader,
method from_user (line 964) | def from_user(cls, reddit, loader, order='all'):
method range (line 985) | def range(self):
method get (line 988) | def get(self, index, n_cols=70):
class RequestHeaderRateLimiter (line 1027) | class RequestHeaderRateLimiter(DefaultHandler):
method __init__ (line 1040) | def __init__(self):
method _delay (line 1058) | def _delay(self):
method _update (line 1070) | def _update(self, response_headers):
method _clear_timeouts (line 1106) | def _clear_timeouts(self, cache_timeout):
method clear_cache (line 1116) | def clear_cache(self):
method evict (line 1121) | def evict(self, urls):
method request (line 1137) | def request(self, _cache_key, _cache_ignore, _cache_timeout, **kwargs):
method _request (line 1176) | def _request(self, request, proxies, timeout, verify, **_):
FILE: ttrv/exceptions.py
class EscapeInterrupt (line 5) | class EscapeInterrupt(Exception):
class ConfigError (line 9) | class ConfigError(Exception):
class TTRVError (line 13) | class TTRVError(Exception):
class AccountError (line 17) | class AccountError(TTRVError):
class SubmissionError (line 21) | class SubmissionError(TTRVError):
class SubredditError (line 25) | class SubredditError(TTRVError):
class NoSubmissionsError (line 29) | class NoSubmissionsError(TTRVError):
method __init__ (line 32) | def __init__(self, name):
class SubscriptionError (line 38) | class SubscriptionError(TTRVError):
class InboxError (line 42) | class InboxError(TTRVError):
class ProgramError (line 46) | class ProgramError(TTRVError):
class BrowserError (line 50) | class BrowserError(TTRVError):
class TemporaryFileError (line 54) | class TemporaryFileError(TTRVError):
class MailcapEntryNotFound (line 58) | class MailcapEntryNotFound(TTRVError):
class InvalidRefreshToken (line 62) | class InvalidRefreshToken(TTRVError):
FILE: ttrv/inbox_page.py
class InboxController (line 10) | class InboxController(PageController):
class InboxPage (line 14) | class InboxPage(Page):
method __init__ (line 20) | def __init__(self, reddit, term, config, oauth, content_type='all'):
method handle_selected_page (line 28) | def handle_selected_page(self):
method refresh_content (line 45) | def refresh_content(self, order=None, name=None):
method load_content_inbox (line 58) | def load_content_inbox(self):
method load_content_unread_messages (line 62) | def load_content_unread_messages(self):
method load_content_messages (line 66) | def load_content_messages(self):
method load_content_comment_replies (line 70) | def load_content_comment_replies(self):
method load_content_post_replies (line 74) | def load_content_post_replies(self):
method load_content_username_mentions (line 78) | def load_content_username_mentions(self):
method load_content_sent_messages (line 82) | def load_content_sent_messages(self):
method mark_seen (line 87) | def mark_seen(self):
method inbox_reply (line 105) | def inbox_reply(self):
method close_inbox (line 112) | def close_inbox(self):
method view_context (line 120) | def view_context(self):
method open_submission (line 130) | def open_submission(self):
method _draw_item (line 138) | def _draw_item(self, win, data, inverted):
FILE: ttrv/mime_parsers.py
class BaseMIMEParser (line 12) | class BaseMIMEParser(object):
method get_mimetype (line 20) | def get_mimetype(url):
class OpenGraphMIMEParser (line 41) | class OpenGraphMIMEParser(BaseMIMEParser):
method get_mimetype (line 56) | def get_mimetype(url):
class VideoTagMIMEParser (line 71) | class VideoTagMIMEParser(BaseMIMEParser):
method get_mimetype (line 82) | def get_mimetype(url):
class GfycatMIMEParser (line 99) | class GfycatMIMEParser(BaseMIMEParser):
method get_mimetype (line 113) | def get_mimetype(url):
class YoutubeMIMEParser (line 121) | class YoutubeMIMEParser(BaseMIMEParser):
method get_mimetype (line 131) | def get_mimetype(url):
class VimeoMIMEParser (line 135) | class VimeoMIMEParser(BaseMIMEParser):
method get_mimetype (line 143) | def get_mimetype(url):
class GifvMIMEParser (line 147) | class GifvMIMEParser(BaseMIMEParser):
method get_mimetype (line 157) | def get_mimetype(url):
class RedditUploadsMIMEParser (line 162) | class RedditUploadsMIMEParser(BaseMIMEParser):
method get_mimetype (line 170) | def get_mimetype(url):
class RedditVideoMIMEParser (line 177) | class RedditVideoMIMEParser(BaseMIMEParser):
method get_mimetype (line 185) | def get_mimetype(url):
class ImgurApiMIMEParser (line 200) | class ImgurApiMIMEParser(BaseMIMEParser):
method get_mimetype (line 219) | def get_mimetype(cls, url):
method fallback (line 271) | def fallback(cls, url, domain):
class ImgurScrapeMIMEParser (line 283) | class ImgurScrapeMIMEParser(BaseMIMEParser):
method get_mimetype (line 300) | def get_mimetype(url):
class InstagramMIMEParser (line 311) | class InstagramMIMEParser(OpenGraphMIMEParser):
class StreamableMIMEParser (line 318) | class StreamableMIMEParser(OpenGraphMIMEParser):
class LiveleakMIMEParser (line 325) | class LiveleakMIMEParser(BaseMIMEParser):
method get_mimetype (line 337) | def get_mimetype(url):
class ClippitUserMIMEParser (line 363) | class ClippitUserMIMEParser(BaseMIMEParser):
method get_mimetype (line 370) | def get_mimetype(url):
class GifsMIMEParser (line 383) | class GifsMIMEParser(OpenGraphMIMEParser):
class GiphyMIMEParser (line 390) | class GiphyMIMEParser(OpenGraphMIMEParser):
class ImgflipMIMEParser (line 397) | class ImgflipMIMEParser(OpenGraphMIMEParser):
class LivememeMIMEParser (line 404) | class LivememeMIMEParser(OpenGraphMIMEParser):
class MakeamemeMIMEParser (line 411) | class MakeamemeMIMEParser(OpenGraphMIMEParser):
class FlickrMIMEParser (line 418) | class FlickrMIMEParser(OpenGraphMIMEParser):
class StreamjaMIMEParser (line 426) | class StreamjaMIMEParser(VideoTagMIMEParser):
class WorldStarHipHopMIMEParser (line 433) | class WorldStarHipHopMIMEParser(BaseMIMEParser):
method get_mimetype (line 444) | def get_mimetype(url):
class RedGifsParser (line 465) | class RedGifsParser(BaseMIMEParser):
method get_mimetype (line 472) | def get_mimetype(url):
FILE: ttrv/oauth.py
class OAuthHTTPServer (line 26) | class OAuthHTTPServer(HTTPServer):
method handle_error (line 28) | def handle_error(self, request, client_address):
class OAuthHandler (line 38) | class OAuthHandler(BaseHTTPRequestHandler):
method do_GET (line 46) | def do_GET(self):
method log_message (line 84) | def log_message(self, fmt, *args):
method build_body (line 90) | def build_body(self, template_file=INDEX):
class OAuthHelper (line 116) | class OAuthHelper(object):
method __init__ (line 120) | def __init__(self, reddit, term, config):
method authorize (line 140) | def authorize(self, autologin=False):
method clear_oauth_data (line 246) | def clear_oauth_data(self):
FILE: ttrv/objects.py
function patch_webbrowser (line 28) | def patch_webbrowser():
function curses_session (line 76) | def curses_session():
class LoadScreen (line 128) | class LoadScreen(object):
method __init__ (line 179) | def __init__(self, terminal):
method __call__ (line 189) | def __call__(
method __enter__ (line 218) | def __enter__(self):
method __exit__ (line 230) | def __exit__(self, exc_type, e, exc_tb):
method animate (line 258) | def animate(self, delay, interval, message, trail):
class Navigator (line 314) | class Navigator(object):
method __init__ (line 327) | def __init__(
method step (line 362) | def step(self):
method position (line 366) | def position(self):
method absolute_index (line 370) | def absolute_index(self):
method move (line 377) | def move(self, direction, n_windows):
method move_page (line 441) | def move_page(self, direction, n_windows):
method flip (line 498) | def flip(self, n_windows):
method _is_valid (line 509) | def _is_valid(self, page_index):
class Controller (line 522) | class Controller(object):
method __init__ (line 544) | def __init__(self, instance, keymap=None):
method trigger (line 586) | def trigger(self, char, *args, **kwargs):
method register (line 610) | def register(cls, *chars):
class Command (line 621) | class Command(object):
method __init__ (line 630) | def __init__(self, val):
method __repr__ (line 633) | def __repr__(self):
method __eq__ (line 636) | def __eq__(self, other):
method __ne__ (line 639) | def __ne__(self, other):
method __hash__ (line 642) | def __hash__(self):
class KeyMap (line 646) | class KeyMap(object):
method __init__ (line 651) | def __init__(self, bindings):
method set_bindings (line 655) | def set_bindings(self, bindings):
method get (line 667) | def get(self, command):
method parse (line 677) | def parse(cls, key):
FILE: ttrv/packages/praw/__init__.py
class Config (line 57) | class Config(object): # pylint: disable=R0903
method ua_string (line 197) | def ua_string(praw_info):
method __init__ (line 214) | def __init__(self, site_name, **kwargs):
method __getitem__ (line 275) | def __getitem__(self, key):
method short_domain (line 281) | def short_domain(self):
class BaseReddit (line 294) | class BaseReddit(object):
method __init__ (line 306) | def __init__(self, user_agent, site_name=None, handler=None,
method _request (line 378) | def _request(self, url, params=None, data=None, files=None, auth=None,
method _json_reddit_objecter (line 477) | def _json_reddit_objecter(self, json_data):
method evict (line 491) | def evict(self, urls):
method get_content (line 503) | def get_content(self, url, params=None, limit=0, place_holder=None,
method request (line 588) | def request(self, url, params=None, data=None, retry_on_error=True,
method request_json (line 604) | def request_json(self, url, params=None, data=None, as_objects=True,
class OAuth2Reddit (line 639) | class OAuth2Reddit(BaseReddit):
method __init__ (line 647) | def __init__(self, *args, **kwargs):
method _handle_oauth_request (line 654) | def _handle_oauth_request(self, data):
method get_access_information (line 670) | def get_access_information(self, code):
method get_authorize_url (line 693) | def get_authorize_url(self, state, scope='identity', refreshable=False):
method has_oauth_app_info (line 712) | def has_oauth_app_info(self):
method refresh_access_information (line 724) | def refresh_access_information(self, refresh_token):
method set_oauth_app_info (line 750) | def set_oauth_app_info(self, client_id, client_secret, redirect_uri):
class UnauthenticatedReddit (line 769) | class UnauthenticatedReddit(BaseReddit):
method __init__ (line 779) | def __init__(self, *args, **kwargs):
method create_redditor (line 786) | def create_redditor(self, user_name, password, email=''):
method default_subreddits (line 798) | def default_subreddits(self, *args, **kwargs):
method get_comments (line 809) | def get_comments(self, subreddit, gilded_only=False, *args, **kwargs):
method get_controversial (line 823) | def get_controversial(self, *args, **kwargs):
method get_domain_listing (line 836) | def get_domain_listing(self, domain, sort='hot', period=None, *args,
method get_flair (line 871) | def get_flair(self, subreddit, redditor, **params):
method get_front_page (line 893) | def get_front_page(self, *args, **kwargs):
method get_info (line 906) | def get_info(self, url=None, thing_id=None, *args, **kwargs):
method get_moderators (line 969) | def get_moderators(self, subreddit, **kwargs):
method get_new (line 976) | def get_new(self, *args, **kwargs):
method get_new_subreddits (line 988) | def get_new_subreddits(self, *args, **kwargs):
method get_popular_subreddits (line 998) | def get_popular_subreddits(self, *args, **kwargs):
method get_random_subreddit (line 1008) | def get_random_subreddit(self, nsfw=False):
method get_random_submission (line 1026) | def get_random_submission(self, subreddit='all'):
method get_redditor (line 1045) | def get_redditor(self, user_name, *args, **kwargs):
method get_rising (line 1055) | def get_rising(self, *args, **kwargs):
method get_rules (line 1068) | def get_rules(self, subreddit, bottom=False):
method get_sticky (line 1078) | def get_sticky(self, subreddit, bottom=False):
method get_submission (line 1090) | def get_submission(self, url=None, submission_id=None, comment_limit=0,
method get_submissions (line 1111) | def get_submissions(self, fullnames, *args, **kwargs):
method get_subreddit (line 1132) | def get_subreddit(self, subreddit_name, *args, **kwargs):
method get_subreddit_recommendations (line 1146) | def get_subreddit_recommendations(self, subreddits, omit=None):
method get_top (line 1165) | def get_top(self, *args, **kwargs):
method get_gilded (line 1178) | def get_gilded(self, *args, **kwargs):
method get_traffic (line 1192) | def get_traffic(self, subreddit):
method get_wiki_page (line 1204) | def get_wiki_page(self, subreddit, page):
method get_wiki_pages (line 1209) | def get_wiki_pages(self, subreddit):
method is_username_available (line 1215) | def is_username_available(self, username):
method search (line 1225) | def search(self, query, subreddit=None, sort=None, syntax=None,
method search_reddit_names (line 1278) | def search_reddit_names(self, query):
class AuthenticatedReddit (line 1286) | class AuthenticatedReddit(OAuth2Reddit, UnauthenticatedReddit):
method __init__ (line 1298) | def __init__(self, *args, **kwargs):
method __str__ (line 1310) | def __str__(self):
method _url_update (line 1320) | def _url_update(self, url):
method accept_moderator_invite (line 1331) | def accept_moderator_invite(self, subreddit):
method clear_authentication (line 1345) | def clear_authentication(self):
method delete (line 1358) | def delete(self, password, message=""):
method edit_wiki_page (line 1378) | def edit_wiki_page(self, subreddit, page, content, reason=''):
method get_access_information (line 1393) | def get_access_information(self, code, # pylint: disable=W0221
method get_flair_choices (line 1411) | def get_flair_choices(self, subreddit, link=None):
method get_friends (line 1428) | def get_friends(self, **params):
method get_me (line 1434) | def get_me(self):
method has_scope (line 1445) | def has_scope(self, scope):
method is_logged_in (line 1455) | def is_logged_in(self):
method is_oauth_session (line 1464) | def is_oauth_session(self):
method login (line 1479) | def login(self, username=None, password=None, **kwargs):
method refresh_access_information (line 1521) | def refresh_access_information(self, # pylint: disable=W0221
method select_flair (line 1542) | def select_flair(self, item, flair_template_id='', flair_text=''):
method set_access_credentials (line 1579) | def set_access_credentials(self, scope, access_token, refresh_token=None,
class ModConfigMixin (line 1609) | class ModConfigMixin(AuthenticatedReddit):
method create_subreddit (line 1619) | def create_subreddit(self, name, title, description='', language='en',
method delete_image (line 1649) | def delete_image(self, subreddit, name=None, header=False):
method get_settings (line 1671) | def get_settings(self, subreddit, **params):
method set_settings (line 1678) | def set_settings(self, subreddit, title, public_description='',
method set_stylesheet (line 1740) | def set_stylesheet(self, subreddit, stylesheet):
method upload_image (line 1754) | def upload_image(self, subreddit, image_path, name=None,
method update_settings (line 1792) | def update_settings(self, subreddit, **kwargs):
class ModFlairMixin (line 1807) | class ModFlairMixin(AuthenticatedReddit):
method add_flair_template (line 1816) | def add_flair_template(self, subreddit, text='', css_class='',
method clear_flair_templates (line 1831) | def clear_flair_templates(self, subreddit, is_link=False):
method configure_flair (line 1842) | def configure_flair(self, subreddit, flair_enabled=False,
method delete_flair (line 1867) | def delete_flair(self, subreddit, user):
method get_flair_list (line 1878) | def get_flair_list(self, subreddit, *args, **kwargs):
method set_flair (line 1896) | def set_flair(self, subreddit, item, flair_text='', flair_css_class=''):
method set_flair_csv (line 1924) | def set_flair_csv(self, subreddit, flair_mapping):
class ModLogMixin (line 1957) | class ModLogMixin(AuthenticatedReddit):
method get_mod_log (line 1966) | def get_mod_log(self, subreddit, mod=None, action=None, *args, **kwargs):
class ModOnlyMixin (line 1988) | class ModOnlyMixin(AuthenticatedReddit):
method _get_userlist (line 1996) | def _get_userlist(self, url, user_only, *args, **kwargs):
method get_banned (line 2008) | def get_banned(self, subreddit, user_only=True, *args, **kwargs):
method get_contributors (line 2020) | def get_contributors(self, subreddit, *args, **kwargs):
method get_edited (line 2047) | def get_edited(self, subreddit='mod', *args, **kwargs):
method get_mod_mail (line 2062) | def get_mod_mail(self, subreddit='mod', *args, **kwargs):
method get_mod_queue (line 2078) | def get_mod_queue(self, subreddit='mod', *args, **kwargs):
method get_muted (line 2094) | def get_muted(self, subreddit, user_only=True, *args, **kwargs):
method get_reports (line 2108) | def get_reports(self, subreddit='mod', *args, **kwargs):
method get_spam (line 2123) | def get_spam(self, subreddit='mod', *args, **kwargs):
method get_stylesheet (line 2138) | def get_stylesheet(self, subreddit, **params):
method get_unmoderated (line 2145) | def get_unmoderated(self, subreddit='mod', *args, **kwargs):
method get_wiki_banned (line 2161) | def get_wiki_banned(self, subreddit, *args, **kwargs):
method get_wiki_contributors (line 2168) | def get_wiki_contributors(self, subreddit, *args, **kwargs):
class ModSelfMixin (line 2182) | class ModSelfMixin(AuthenticatedReddit):
method leave_contributor (line 2190) | def leave_contributor(self, subreddit):
method leave_moderator (line 2199) | def leave_moderator(self, subreddit):
method _leave_status (line 2210) | def _leave_status(self, subreddit, statusurl):
class MultiredditMixin (line 2227) | class MultiredditMixin(AuthenticatedReddit):
method copy_multireddit (line 2238) | def copy_multireddit(self, from_redditor, from_name, to_name=None,
method create_multireddit (line 2265) | def create_multireddit(self, name, description_md=None, icon_name=None,
method delete_multireddit (line 2319) | def delete_multireddit(self, name, *args, **kwargs):
method edit_multireddit (line 2339) | def edit_multireddit(self, *args, **kwargs):
method get_multireddit (line 2347) | def get_multireddit(self, redditor, multi, *args, **kwargs):
method get_multireddits (line 2361) | def get_multireddits(self, redditor, *args, **kwargs):
method rename_multireddit (line 2380) | def rename_multireddit(self, current_name, new_name, *args, **kwargs):
class MySubredditsMixin (line 2398) | class MySubredditsMixin(AuthenticatedReddit):
method get_my_contributions (line 2407) | def get_my_contributions(self, *args, **kwargs):
method get_my_moderation (line 2421) | def get_my_moderation(self, *args, **kwargs):
method get_my_multireddits (line 2435) | def get_my_multireddits(self):
method get_my_subreddits (line 2442) | def get_my_subreddits(self, *args, **kwargs):
class PrivateMessagesMixin (line 2455) | class PrivateMessagesMixin(AuthenticatedReddit):
method _mark_as_read (line 2464) | def _mark_as_read(self, thing_ids, unread=False):
method get_comment_replies (line 2478) | def get_comment_replies(self, *args, **kwargs):
method get_inbox (line 2489) | def get_inbox(self, *args, **kwargs):
method get_message (line 2498) | def get_message(self, message_id, *args, **kwargs):
method get_messages (line 2511) | def get_messages(self, *args, **kwargs):
method get_post_replies (line 2521) | def get_post_replies(self, *args, **kwargs):
method get_sent (line 2531) | def get_sent(self, *args, **kwargs):
method get_unread (line 2541) | def get_unread(self, unset_has_mail=False, update_user=False, *args,
method get_mentions (line 2563) | def get_mentions(self, *args, **kwargs):
method send_message (line 2574) | def send_message(self, recipient, subject, message, from_sr=None,
class ReportMixin (line 2614) | class ReportMixin(AuthenticatedReddit):
method hide (line 2623) | def hide(self, thing_id, _unhide=False):
method unhide (line 2670) | def unhide(self, thing_id):
class SubmitMixin (line 2682) | class SubmitMixin(AuthenticatedReddit):
method _add_comment (line 2690) | def _add_comment(self, thing_id, text):
method submit (line 2713) | def submit(self, subreddit, title, text=None, url=None, captcha=None,
class SubscribeMixin (line 2769) | class SubscribeMixin(AuthenticatedReddit):
method subscribe (line 2778) | def subscribe(self, subreddit, unsubscribe=False):
method unsubscribe (line 2792) | def unsubscribe(self, subreddit):
class Reddit (line 2802) | class Reddit(ModConfigMixin, ModFlairMixin, ModLogMixin, ModOnlyMixin,
FILE: ttrv/packages/praw/decorator_helpers.py
function _get_captcha (line 8) | def _get_captcha(reddit_session, captcha_id):
function _is_mod_of_all (line 23) | def _is_mod_of_all(user, subreddit):
function _make_func_args (line 29) | def _make_func_args(function):
FILE: ttrv/packages/praw/decorators.py
function alias_function (line 44) | def alias_function(function, class_name):
function deprecated (line 73) | def deprecated(msg=''):
function limit_chars (line 84) | def limit_chars(function, *args, **kwargs):
function oauth_generator (line 94) | def oauth_generator(function, *args, **kwargs):
function raise_api_exceptions (line 110) | def raise_api_exceptions(function, *args, **kwargs):
function require_captcha (line 150) | def require_captcha(function, *args, **kwargs):
function restrict_access (line 186) | def restrict_access(scope, mod=None, login=None, oauth_only=False,
function require_oauth (line 284) | def require_oauth(function, *args, **kwargs):
FILE: ttrv/packages/praw/errors.py
class PRAWException (line 31) | class PRAWException(Exception):
class ClientException (line 39) | class ClientException(PRAWException):
method __init__ (line 42) | def __init__(self, message=None):
method __str__ (line 53) | def __str__(self):
class OAuthScopeRequired (line 58) | class OAuthScopeRequired(ClientException):
method __init__ (line 65) | def __init__(self, function, scope, message=None):
class LoginRequired (line 81) | class LoginRequired(ClientException):
method __init__ (line 89) | def __init__(self, function, message=None):
class LoginOrScopeRequired (line 102) | class LoginOrScopeRequired(OAuthScopeRequired, LoginRequired):
method __init__ (line 109) | def __init__(self, function, scope, message=None):
class ModeratorRequired (line 125) | class ModeratorRequired(LoginRequired):
method __init__ (line 128) | def __init__(self, function):
class ModeratorOrScopeRequired (line 139) | class ModeratorOrScopeRequired(LoginOrScopeRequired, ModeratorRequired):
method __init__ (line 146) | def __init__(self, function, scope):
class OAuthAppRequired (line 161) | class OAuthAppRequired(ClientException):
class HTTPException (line 169) | class HTTPException(PRAWException):
method __init__ (line 172) | def __init__(self, _raw, message=None):
method __str__ (line 185) | def __str__(self):
class Forbidden (line 190) | class Forbidden(HTTPException):
class NotFound (line 194) | class NotFound(HTTPException):
class InvalidComment (line 198) | class InvalidComment(PRAWException):
method __str__ (line 203) | def __str__(self):
class InvalidSubmission (line 208) | class InvalidSubmission(PRAWException):
method __str__ (line 213) | def __str__(self):
class InvalidSubreddit (line 218) | class InvalidSubreddit(PRAWException):
method __str__ (line 223) | def __str__(self):
class RedirectException (line 228) | class RedirectException(PRAWException):
method __init__ (line 231) | def __init__(self, request_url, response_url, message=None):
method __str__ (line 247) | def __str__(self):
class OAuthException (line 252) | class OAuthException(PRAWException):
method __init__ (line 260) | def __init__(self, message, url):
method __str__ (line 271) | def __str__(self):
class OAuthInsufficientScope (line 276) | class OAuthInsufficientScope(OAuthException):
class OAuthInvalidGrant (line 284) | class OAuthInvalidGrant(OAuthException):
class OAuthInvalidToken (line 288) | class OAuthInvalidToken(OAuthException):
class APIException (line 292) | class APIException(PRAWException):
method __init__ (line 299) | def __init__(self, error_type, message, field='', response=None):
method __str__ (line 314) | def __str__(self):
class ExceptionList (line 324) | class ExceptionList(APIException):
method __init__ (line 327) | def __init__(self, errors):
method __str__ (line 336) | def __str__(self):
class AlreadySubmitted (line 344) | class AlreadySubmitted(APIException):
class AlreadyModerator (line 350) | class AlreadyModerator(APIException):
class BadCSS (line 356) | class BadCSS(APIException):
class BadCSSName (line 362) | class BadCSSName(APIException):
class BadUsername (line 368) | class BadUsername(APIException):
class InvalidCaptcha (line 374) | class InvalidCaptcha(APIException):
class InvalidEmails (line 380) | class InvalidEmails(APIException):
class InvalidFlairTarget (line 386) | class InvalidFlairTarget(APIException):
class InvalidInvite (line 392) | class InvalidInvite(APIException):
class InvalidUser (line 398) | class InvalidUser(APIException):
class InvalidUserPass (line 404) | class InvalidUserPass(APIException):
class InsufficientCreddits (line 410) | class InsufficientCreddits(APIException):
class NotLoggedIn (line 416) | class NotLoggedIn(APIException):
class NotModified (line 422) | class NotModified(APIException):
method __init__ (line 431) | def __init__(self, response):
method __str__ (line 439) | def __str__(self):
class RateLimitExceeded (line 444) | class RateLimitExceeded(APIException):
class SubredditExists (line 455) | class SubredditExists(APIException):
class UsernameExists (line 461) | class UsernameExists(APIException):
function _build_error_mapping (line 467) | def _build_error_mapping():
FILE: ttrv/packages/praw/handlers.py
class RateLimitHandler (line 18) | class RateLimitHandler(object):
method rate_limit (line 30) | def rate_limit(function):
method evict (line 60) | def evict(cls, urls): # pylint: disable=W0613
method __del__ (line 71) | def __del__(self):
method __init__ (line 79) | def __init__(self):
method request (line 83) | def request(self, request, proxies, timeout, verify, **_):
class DefaultHandler (line 111) | class DefaultHandler(RateLimitHandler):
method with_cache (line 120) | def with_cache(function):
method clear_cache (line 163) | def clear_cache(cls):
method evict (line 170) | def evict(cls, urls):
class MultiprocessHandler (line 190) | class MultiprocessHandler(object):
method __init__ (line 193) | def __init__(self, host='localhost', port=10101):
method _relay (line 198) | def _relay(self, **kwargs):
method evict (line 237) | def evict(self, urls):
method request (line 241) | def request(self, **kwargs):
FILE: ttrv/packages/praw/helpers.py
function comment_stream (line 40) | def comment_stream(reddit_session, subreddit, limit=None, verbosity=1):
function submission_stream (line 67) | def submission_stream(reddit_session, subreddit, limit=None, verbosity=1):
function valid_redditors (line 99) | def valid_redditors(redditors, sub):
function submissions_between (line 119) | def submissions_between(reddit_session,
function _stream_generator (line 289) | def _stream_generator(get_function, limit=None, verbosity=1):
function chunk_sequence (line 360) | def chunk_sequence(sequence, chunk_length, allow_incomplete=True):
function convert_id36_to_numeric_id (line 382) | def convert_id36_to_numeric_id(id36):
function convert_numeric_id_to_id36 (line 390) | def convert_numeric_id_to_id36(numeric_id):
function flatten_tree (line 427) | def flatten_tree(tree, nested_attr='replies', depth_first=False):
function normalize_url (line 448) | def normalize_url(url):
class BoundedSet (line 457) | class BoundedSet(object):
method __init__ (line 464) | def __init__(self, max_items):
method __contains__ (line 470) | def __contains__(self, item):
method add (line 474) | def add(self, item):
FILE: ttrv/packages/praw/internal.py
function _get_redditor_listing (line 49) | def _get_redditor_listing(subpath=''):
function _get_sorter (line 72) | def _get_sorter(subpath='', **defaults):
function _image_type (line 91) | def _image_type(image):
function _modify_relationship (line 109) | def _modify_relationship(relationship, unlink=False, is_sub=False):
function _prepare_request (line 149) | def _prepare_request(reddit_session, url, params, data, auth, files,
function _raise_redirect_exceptions (line 209) | def _raise_redirect_exceptions(response):
function _raise_response_exceptions (line 227) | def _raise_response_exceptions(response):
function _to_reddit_list (line 249) | def _to_reddit_list(arg):
function _warn_pyopenssl (line 263) | def _warn_pyopenssl():
FILE: ttrv/packages/praw/multiprocess.py
class ThreadingTCPServer (line 15) | class ThreadingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPSe...
method handle_error (line 22) | def handle_error(_, client_addr):
class RequestHandler (line 34) | class RequestHandler(socketserver.StreamRequestHandler):
method cache_hit_callback (line 52) | def cache_hit_callback(key):
method do_request (line 58) | def do_request(self, request, proxies, timeout, **_):
method handle (line 66) | def handle(self):
function run (line 79) | def run():
FILE: ttrv/packages/praw/objects.py
class RedditContentObject (line 49) | class RedditContentObject(object):
method from_api_response (line 53) | def from_api_response(cls, reddit_session, json_dict):
method __init__ (line 57) | def __init__(self, reddit_session, json_dict=None, fetch=True,
method __eq__ (line 72) | def __eq__(self, other):
method __hash__ (line 77) | def __hash__(self):
method __getattr__ (line 81) | def __getattr__(self, attr):
method __getstate__ (line 94) | def __getstate__(self):
method __ne__ (line 102) | def __ne__(self, other):
method __reduce_ex__ (line 106) | def __reduce_ex__(self, _):
method __setattr__ (line 114) | def __setattr__(self, name, value):
method __str__ (line 136) | def __str__(self):
method _get_json_dict (line 143) | def _get_json_dict(self):
method _populate (line 170) | def _populate(self, json_dict, fetch):
method _post_populate (line 191) | def _post_populate(self, fetch):
method fullname (line 195) | def fullname(self):
method has_fetched (line 207) | def has_fetched(self):
class Moderatable (line 212) | class Moderatable(RedditContentObject):
method approve (line 216) | def approve(self):
method distinguish (line 236) | def distinguish(self, as_made_by='mod', sticky=False):
method ignore_reports (line 255) | def ignore_reports(self):
method remove (line 268) | def remove(self, spam=False):
method undistinguish (line 288) | def undistinguish(self):
method unignore_reports (line 297) | def unignore_reports(self):
class Editable (line 309) | class Editable(RedditContentObject):
method delete (line 313) | def delete(self):
method edit (line 326) | def edit(self, text):
class Gildable (line 340) | class Gildable(RedditContentObject):
method gild (line 344) | def gild(self, months=None):
class Hideable (line 372) | class Hideable(RedditContentObject):
method hide (line 375) | def hide(self, _unhide=False):
method unhide (line 387) | def unhide(self):
class Inboxable (line 396) | class Inboxable(RedditContentObject):
method mark_as_read (line 399) | def mark_as_read(self):
method mark_as_unread (line 407) | def mark_as_unread(self):
method reply (line 415) | def reply(self, text):
class Messageable (line 433) | class Messageable(RedditContentObject):
class Refreshable (line 439) | class Refreshable(RedditContentObject):
method refresh (line 442) | def refresh(self):
class Reportable (line 509) | class Reportable(RedditContentObject):
method report (line 513) | def report(self, reason=None):
class Saveable (line 535) | class Saveable(RedditContentObject):
method save (line 539) | def save(self, unsave=False):
method unsave (line 552) | def unsave(self):
class Voteable (line 561) | class Voteable(RedditContentObject):
method clear_vote (line 564) | def clear_vote(self):
method downvote (line 581) | def downvote(self):
method upvote (line 596) | def upvote(self):
method vote (line 612) | def vote(self, direction=0):
class Comment (line 637) | class Comment(Editable, Gildable, Inboxable, Moderatable, Refreshable,
method __init__ (line 641) | def __init__(self, reddit_session, json_dict):
method __unicode__ (line 655) | def __unicode__(self):
method _fast_permalink (line 660) | def _fast_permalink(self):
method _update_submission (line 669) | def _update_submission(self, submission):
method is_root (line 678) | def is_root(self):
method permalink (line 684) | def permalink(self):
method replies (line 689) | def replies(self):
method submission (line 722) | def submission(self):
class Message (line 730) | class Message(Inboxable):
method from_id (line 735) | def from_id(reddit_session, message_id, *args, **kwargs):
method __init__ (line 760) | def __init__(self, reddit_session, json_dict):
method __unicode__ (line 769) | def __unicode__(self):
method collapse (line 775) | def collapse(self):
method mute_modmail_author (line 781) | def mute_modmail_author(self, _unmute=False):
method uncollapse (line 793) | def uncollapse(self):
method unmute_modmail_author (line 798) | def unmute_modmail_author(self):
class MoreComments (line 803) | class MoreComments(RedditContentObject):
method __init__ (line 806) | def __init__(self, reddit_session, json_dict):
method __lt__ (line 812) | def __lt__(self, other):
method __unicode__ (line 820) | def __unicode__(self):
method _continue_comments (line 824) | def _continue_comments(self, update):
method _update_submission (line 837) | def _update_submission(self, submission):
method comments (line 840) | def comments(self, update=True):
class Redditor (line 870) | class Redditor(Gildable, Messageable, Refreshable):
method __init__ (line 879) | def __init__(self, reddit_session, user_name=None, json_dict=None,
method __repr__ (line 894) | def __repr__(self):
method __unicode__ (line 898) | def __unicode__(self):
method _post_populate (line 902) | def _post_populate(self, fetch):
method friend (line 911) | def friend(self, note=None, _unfriend=False):
method get_disliked (line 943) | def get_disliked(self, *args, **kwargs):
method get_downvoted (line 951) | def get_downvoted(self, *args, **kwargs):
method get_friend_info (line 973) | def get_friend_info(self):
method get_liked (line 986) | def get_liked(self, *args, **kwargs):
method get_upvoted (line 994) | def get_upvoted(self, *args, **kwargs):
method mark_as_read (line 1012) | def mark_as_read(self, messages, unread=False):
method unfriend (line 1035) | def unfriend(self):
class LoggedInRedditor (line 1044) | class LoggedInRedditor(Redditor):
method get_blocked (line 1050) | def get_blocked(self):
method get_cached_moderated_reddits (line 1055) | def get_cached_moderated_reddits(self):
method get_friends (line 1071) | def get_friends(self, **params):
class ModAction (line 1080) | class ModAction(RedditContentObject):
method __init__ (line 1083) | def __init__(self, reddit_session, json_dict=None, fetch=False):
method __unicode__ (line 1087) | def __unicode__(self):
class Submission (line 1092) | class Submission(Editable, Gildable, Hideable, Moderatable, Refreshable,
method _extract_more_comments (line 1099) | def _extract_more_comments(tree):
method from_id (line 1117) | def from_id(reddit_session, subreddit_id):
method from_json (line 1124) | def from_json(json_response):
method from_url (line 1132) | def from_url(reddit_session, url, comment_limit=0, comment_sort=None,
method __init__ (line 1170) | def __init__(self, reddit_session, json_dict):
method __unicode__ (line 1186) | def __unicode__(self):
method _insert_comment (line 1194) | def _insert_comment(self, comment):
method _update_comments (line 1214) | def _update_comments(self, comments):
method add_comment (line 1219) | def add_comment(self, text):
method comments (line 1232) | def comments(self): # pylint: disable=E0202
method comments (line 1248) | def comments(self, new_comments): # pylint: disable=E0202
method get_duplicates (line 1253) | def get_duplicates(self, *args, **kwargs):
method get_flair_choices (line 1268) | def get_flair_choices(self, *args, **kwargs):
method lock (line 1281) | def lock(self):
method mark_as_nsfw (line 1294) | def mark_as_nsfw(self, unmark_nsfw=False):
method replace_more_comments (line 1320) | def replace_more_comments(self, limit=32, threshold=1):
method set_flair (line 1371) | def set_flair(self, *args, **kwargs):
method set_contest_mode (line 1383) | def set_contest_mode(self, state=True):
method set_suggested_sort (line 1407) | def set_suggested_sort(self, sort='blank'):
method short_link (line 1421) | def short_link(self):
method sticky (line 1432) | def sticky(self, bottom=True):
method unlock (line 1451) | def unlock(self):
method unmark_as_nsfw (line 1464) | def unmark_as_nsfw(self):
method unset_contest_mode (line 1473) | def unset_contest_mode(self):
method unsticky (line 1492) | def unsticky(self):
class Subreddit (line 1503) | class Subreddit(Messageable, Refreshable):
method __init__ (line 1599) | def __init__(self, reddit_session, subreddit_name=None, json_dict=None,
method __repr__ (line 1631) | def __repr__(self):
method __unicode__ (line 1635) | def __unicode__(self):
method _post_populate (line 1639) | def _post_populate(self, fetch):
method clear_all_flair (line 1647) | def clear_all_flair(self):
class Multireddit (line 1661) | class Multireddit(Refreshable):
method from_api_response (line 1693) | def from_api_response(cls, reddit_session, json_dict):
method __init__ (line 1702) | def __init__(self, reddit_session, author=None, name=None,
method __repr__ (line 1728) | def __repr__(self):
method __unicode__ (line 1733) | def __unicode__(self):
method _post_populate (line 1737) | def _post_populate(self, fetch):
method add_subreddit (line 1749) | def add_subreddit(self, subreddit, _delete=False, *args, **kwargs):
method copy (line 1775) | def copy(self, to_name):
method delete (line 1786) | def delete(self):
method edit (line 1796) | def edit(self, *args, **kwargs):
method remove_subreddit (line 1807) | def remove_subreddit(self, subreddit, *args, **kwargs):
method rename (line 1811) | def rename(self, new_name, *args, **kwargs):
class PRAWListing (line 1824) | class PRAWListing(RedditContentObject):
method __init__ (line 1829) | def __init__(self, reddit_session, json_dict=None, fetch=False):
method __contains__ (line 1840) | def __contains__(self, item):
method __delitem__ (line 1844) | def __delitem__(self, index):
method __getitem__ (line 1848) | def __getitem__(self, index):
method __iter__ (line 1852) | def __iter__(self):
method __len__ (line 1856) | def __len__(self):
method __setitem__ (line 1860) | def __setitem__(self, index, item):
method __unicode__ (line 1864) | def __unicode__(self):
class UserList (line 1869) | class UserList(PRAWListing):
method _convert (line 1875) | def _convert(reddit_session, data):
class WikiPage (line 1882) | class WikiPage(Refreshable):
method from_api_response (line 1886) | def from_api_response(cls, reddit_session, json_dict):
method __init__ (line 1899) | def __init__(self, reddit_session, subreddit=None, page=None,
method __unicode__ (line 1912) | def __unicode__(self):
method add_editor (line 1917) | def add_editor(self, username, _delete=False, *args, **kwargs):
method get_settings (line 1937) | def get_settings(self, *args, **kwargs):
method edit (line 1951) | def edit(self, *args, **kwargs):
method edit_settings (line 1961) | def edit_settings(self, permlevel, listed, *args, **kwargs):
method remove_editor (line 1986) | def remove_editor(self, username, *args, **kwargs):
class WikiPageListing (line 2000) | class WikiPageListing(PRAWListing):
method _convert (line 2006) | def _convert(reddit_session, data):
function _add_aliases (line 2015) | def _add_aliases():
FILE: ttrv/packages/praw/settings.py
function _load_configuration (line 25) | def _load_configuration():
FILE: ttrv/page.py
function logged_in (line 23) | def logged_in(f):
class PageController (line 37) | class PageController(Controller):
class Page (line 41) | class Page(object):
method __init__ (line 46) | def __init__(self, reddit, term, config, oauth):
method refresh_content (line 60) | def refresh_content(self, order=None, name=None):
method _draw_item (line 63) | def _draw_item(self, win, data, inverted):
method get_selected_item (line 66) | def get_selected_item(self):
method loop (line 72) | def loop(self):
method handle_selected_page (line 101) | def handle_selected_page(self):
method reload_page (line 136) | def reload_page(self):
method exit (line 144) | def exit(self):
method force_exit (line 152) | def force_exit(self):
method previous_theme (line 159) | def previous_theme(self):
method next_theme (line 173) | def next_theme(self):
method show_help (line 187) | def show_help(self):
method move_cursor_up (line 194) | def move_cursor_up(self):
method move_cursor_down (line 202) | def move_cursor_down(self):
method move_next_unread (line 210) | def move_next_unread(self):
method move_prev_unread (line 218) | def move_prev_unread(self):
method move_page_up (line 226) | def move_page_up(self):
method move_page_down (line 234) | def move_page_down(self):
method move_page_top (line 242) | def move_page_top(self):
method move_page_bottom (line 251) | def move_page_bottom(self):
method upvote (line 261) | def upvote(self):
method downvote (line 283) | def downvote(self):
method save (line 305) | def save(self):
method login (line 324) | def login(self):
method reply (line 337) | def reply(self):
method delete_item (line 391) | def delete_item(self):
method edit (line 415) | def edit(self):
method send_private_message (line 452) | def send_private_message(self):
method prompt_and_select_link (line 497) | def prompt_and_select_link(self):
method copy_permalink (line 531) | def copy_permalink(self):
method copy_url (line 539) | def copy_url(self):
method copy_to_clipboard (line 546) | def copy_to_clipboard(self, url):
method subscriptions (line 566) | def subscriptions(self):
method multireddits (line 574) | def multireddits(self):
method prompt (line 581) | def prompt(self):
method inbox (line 604) | def inbox(self):
method open_inbox_page (line 610) | def open_inbox_page(self, content_type):
method open_subscription_page (line 622) | def open_subscription_page(self, content_type):
method open_submission_page (line 634) | def open_submission_page(self, url=None, submission=None):
method open_subreddit_page (line 646) | def open_subreddit_page(self, name):
method clear_input_queue (line 658) | def clear_input_queue(self):
method draw (line 666) | def draw(self):
method _draw_header (line 684) | def _draw_header(self):
method _draw_banner (line 765) | def _draw_banner(self):
method _draw_content (line 789) | def _draw_content(self):
method _draw_footer (line 864) | def _draw_footer(self):
method _move_cursor (line 877) | def _move_cursor(self, direction):
method _move_cursor_to_unread (line 884) | def _move_cursor_to_unread(self, direction):
method _move_page (line 895) | def _move_page(self, direction):
method _prompt_period (line 900) | def _prompt_period(self, order):
FILE: ttrv/submission_page.py
class SubmissionController (line 10) | class SubmissionController(PageController):
class SubmissionPage (line 14) | class SubmissionPage(Page):
method __init__ (line 20) | def __init__(self, reddit, term, config, oauth, url=None, submission=N...
method handle_selected_page (line 37) | def handle_selected_page(self):
method refresh_content (line 53) | def refresh_content(self, order=None, name=None):
method sort_content_hot (line 73) | def sort_content_hot(self):
method sort_content_top (line 77) | def sort_content_top(self):
method sort_content_rising (line 81) | def sort_content_rising(self):
method sort_content_new (line 85) | def sort_content_new(self):
method sort_content_controversial (line 89) | def sort_content_controversial(self):
method toggle_comment (line 93) | def toggle_comment(self):
method exit_submission (line 114) | def exit_submission(self):
method open_link (line 121) | def open_link(self):
method open_pager (line 142) | def open_pager(self):
method add_comment (line 163) | def add_comment(self):
method delete_comment (line 171) | def delete_comment(self):
method comment_urlview (line 181) | def comment_urlview(self):
method move_parent_up (line 193) | def move_parent_up(self):
method move_sibling_next (line 211) | def move_sibling_next(self):
method _draw_item (line 236) | def _draw_item(self, win, data, inverted):
method _draw_comment (line 247) | def _draw_comment(self, win, data, inverted):
method _draw_more_comments (line 323) | def _draw_more_comments(self, win, data):
method _draw_submission (line 339) | def _draw_submission(self, win, data):
FILE: ttrv/subreddit_page.py
class SubredditController (line 13) | class SubredditController(PageController):
class SubredditPage (line 17) | class SubredditPage(Page):
method __init__ (line 23) | def __init__(self, reddit, term, config, oauth, name):
method handle_selected_page (line 35) | def handle_selected_page(self):
method refresh_content (line 50) | def refresh_content(self, order=None, name=None):
method sort_content_hot (line 76) | def sort_content_hot(self):
method sort_content_top (line 83) | def sort_content_top(self):
method sort_content_rising (line 91) | def sort_content_rising(self):
method sort_content_new (line 102) | def sort_content_new(self):
method sort_content_controversial (line 106) | def sort_content_controversial(self):
method sort_content_gilded (line 117) | def sort_content_gilded(self):
method search_subreddit (line 124) | def search_subreddit(self, name=None):
method show_frontpage (line 141) | def show_frontpage(self):
method open_submission (line 158) | def open_submission(self, url=None):
method open_link (line 171) | def open_link(self):
method post_submission (line 190) | def post_submission(self):
method hide (line 224) | def hide(self):
method _draw_item (line 237) | def _draw_item(self, win, data, inverted):
FILE: ttrv/subscription_page.py
class SubscriptionController (line 10) | class SubscriptionController(PageController):
class SubscriptionPage (line 14) | class SubscriptionPage(Page):
method __init__ (line 20) | def __init__(self, reddit, term, config, oauth, content_type='subreddi...
method handle_selected_page (line 29) | def handle_selected_page(self):
method refresh_content (line 36) | def refresh_content(self, order=None, name=None):
method select_subreddit (line 52) | def select_subreddit(self):
method close_subscriptions (line 60) | def close_subscriptions(self):
method _draw_banner (line 66) | def _draw_banner(self):
method _draw_item (line 70) | def _draw_item(self, win, data, inverted):
FILE: ttrv/terminal.py
class Terminal (line 49) | class Terminal(object):
method __init__ (line 59) | def __init__(self, stdscr, config):
method up_arrow (line 76) | def up_arrow(self):
method down_arrow (line 80) | def down_arrow(self):
method neutral_arrow (line 84) | def neutral_arrow(self):
method gilded (line 88) | def gilded(self):
method vline (line 92) | def vline(self):
method display (line 96) | def display(self):
method flash (line 126) | def flash(self):
method curs_set (line 136) | def curs_set(val):
method addch (line 147) | def addch(window, y, x, ch, attr):
method getch (line 159) | def getch(self):
method suspend (line 167) | def suspend():
method no_delay (line 179) | def no_delay(self):
method get_arrow (line 192) | def get_arrow(self, likes):
method clean (line 208) | def clean(self, string, n_cols=None):
method add_line (line 255) | def add_line(self, window, text, row=None, col=None, attr=None):
method add_space (line 291) | def add_space(window):
method show_notification (line 305) | def show_notification(self, message, timeout=None, style='Info'):
method prompt_user_to_select_link (line 360) | def prompt_user_to_select_link(self, links):
method get_link_pages (line 401) | def get_link_pages(links):
method get_link_page_text (line 417) | def get_link_page_text(link_page):
method open_link (line 428) | def open_link(self, url):
method get_mailcap_entry (line 511) | def get_mailcap_entry(self, url):
method open_browser (line 559) | def open_browser(self, url):
method open_pager (line 643) | def open_pager(self, data, wrap=None):
method open_editor (line 675) | def open_editor(self, data=''):
method open_urlview (line 739) | def open_urlview(self, data):
method text_input (line 771) | def text_input(self, window, allow_resize=False):
method prompt_input (line 815) | def prompt_input(self, prompt, key=False):
method prompt_y_or_n (line 866) | def prompt_y_or_n(self, prompt):
method strip_textpad (line 881) | def strip_textpad(text):
method strip_instructions (line 916) | def strip_instructions(text):
method clear_screen (line 929) | def clear_screen(self):
method attr (line 956) | def attr(self, element):
method check_theme (line 966) | def check_theme(theme):
method set_theme (line 979) | def set_theme(self, theme=None):
FILE: ttrv/theme.py
class Theme (line 19) | class Theme(object):
method __init__ (line 131) | def __init__(self, name=None, source=None, elements=None, use_color=Tr...
method display_string (line 222) | def display_string(self):
method bind_curses (line 225) | def bind_curses(self):
method get (line 254) | def get(self, element, selected=False):
method turn_on_selected (line 268) | def turn_on_selected(self):
method list_themes (line 293) | def list_themes(cls, path=THEMES):
method print_themes (line 325) | def print_themes(cls, path=THEMES):
method from_name (line 366) | def from_name(cls, name, path=THEMES):
method from_file (line 388) | def from_file(cls, filename, source):
method _parse_line (line 426) | def _parse_line(cls, element, line, filename=None):
method _set_fallback (line 477) | def _set_fallback(elements, src_field, fallback, dest_field=None):
method rgb_to_ansi (line 495) | def rgb_to_ansi(color):
class ThemeList (line 523) | class ThemeList(object):
method __init__ (line 529) | def __init__(self):
method reload (line 533) | def reload(self):
method _step (line 540) | def _step(self, theme, direction):
method next (line 563) | def next(self, theme):
method previous (line 566) | def previous(self, theme):
Condensed preview — 72 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,232K chars).
[
{
"path": ".coveragerc",
"chars": 67,
"preview": "[run]\nsource = tvr\nomit = \n */__main__.py\n */packages/praw/*\n"
},
{
"path": ".gitattributes",
"chars": 25,
"preview": "tests/cassettes/* binary\n"
},
{
"path": ".gitignore",
"chars": 133,
"preview": ".*\n!.travis.yml\n!.pylintrc\n!.gitignore\n!.gitattributes\n!.coveragerc\n*~\n*.pyc\n*.log\nbuild\ndist\nrtv.egg-info\ntests/refresh"
},
{
"path": ".pylintrc",
"chars": 12609,
"preview": "[MASTER]\n\n# Specify a configuration file.\n#rcfile=\n\n# Python code to execute, usually for sys.path manipulation such as\n"
},
{
"path": "AUTHORS.rst",
"chars": 2944,
"preview": "================\nTTRV Contributors\n================\n* `deepend <https://github.com/deepend-tildeclub>`_\n\n\n=============="
},
{
"path": "CHANGELOG.rst",
"chars": 24469,
"preview": "=============\nTTVR Changelog\n=============\n\n.. _1.27.0: https://github.com/tildeclub/ttrv/releases/tag/v1.27.0\n.. _1.26."
},
{
"path": "CONTRIBUTING.rst",
"chars": 4156,
"preview": "----------------------\nContributor Guidelines\n----------------------\n\nBefore you start\n================\n\n- Post an issue"
},
{
"path": "CONTROLS.md",
"chars": 4946,
"preview": "# Controls\n\n## Basic Commands\n\n- <kbd>j</kbd> or <kbd>▼</kbd> - Move the cursor down\n- <kbd>k</kbd> or <kbd>▲</kbd> - Mo"
},
{
"path": "LICENSE",
"chars": 1081,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2015 michael-lazar\n\nPermission is hereby granted, free of charge, to any person obt"
},
{
"path": "MANIFEST.in",
"chars": 157,
"preview": "include version.py\ninclude CHANGELOG.rst\ninclude AUTHORS.rst\ninclude README.md\ninclude LICENSE\ninclude ttrv.1\ninclude tt"
},
{
"path": "README.md",
"chars": 7894,
"preview": "<h1 align=\"center\">Tilde Terminal Reddit Viewer (TTRV)</h1>\n<p>Forked from Original source/development at: <a href=\"http"
},
{
"path": "THEMES.md",
"chars": 8462,
"preview": "# Themes\n\n## Installing Themes\n\nYou can install custom themes by copying them into your **~/.config/ttrv/themes/**\ndirec"
},
{
"path": "requirements.txt",
"chars": 165,
"preview": "beautifulsoup4==4.5.1\ndecorator==4.0.10\nkitchen==1.2.4\nmailcap-fix==0.1.3\nrequests==2.20.0\nsix==1.10.0\npytest==3.2.3\nvcr"
},
{
"path": "scripts/build_authors.py",
"chars": 1386,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\"\"\"\nScrape the project contributors list from Github and update AUTHORS.r"
},
{
"path": "scripts/build_manpage.py",
"chars": 2840,
"preview": "#!/usr/bin/env python\n\n\"\"\"\nInternal tool used to automatically generate an up-to-date version of the tvr\nman page. Curre"
},
{
"path": "scripts/cassettes/demo_theme.yaml",
"chars": 531828,
"preview": "interactions:\n- request:\n body: grant_type=refresh_token&redirect_uri=http%3A%2F%2F127.0.0.1%3A65000%2F&refresh_token"
},
{
"path": "scripts/count_lines.sh",
"chars": 405,
"preview": "#!/usr/bin/env bash\n\nROOT=\"$(dirname \"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\")\"\n\ncd ${ROOT}\necho -e \"\\nTests:"
},
{
"path": "scripts/demo_theme.py",
"chars": 9062,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\nfrom __future__ import print_funct"
},
{
"path": "scripts/initialize_session.py",
"chars": 776,
"preview": "\"\"\"\nInitialize an authenticated instance of PRAW to interact with.\n\n$ python -i initialize_session.py\n\"\"\"\nfrom ttrv.docs"
},
{
"path": "scripts/inspect_webbrowser.py",
"chars": 814,
"preview": "#!/usr/bin/env python\n\n\"\"\"\nUtility script used to examine the python webbrowser module with different OSs.\n\"\"\"\n\nimport o"
},
{
"path": "scripts/pip_clean.sh",
"chars": 364,
"preview": "#!/usr/bin/env bash\n# Removes any lingering build/release files from the project directory\n\nfind . -type f -name '*.pyc'"
},
{
"path": "scripts/ttrv.1.template",
"chars": 1349,
"preview": ".TH \"TTRV\" \"1\" \"{release_date}\" \"Version {version}\" \"Usage and Commands\"\n.SH NAME\nTTRV - Reddit Terminal Viewer\n.SH SYNO"
},
{
"path": "scripts/update_packages.py",
"chars": 1384,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\"\"\"\nUpdate the project's bundled dependencies by downloading the git repo"
},
{
"path": "setup.cfg",
"chars": 21,
"preview": "[wheel]\nuniversal = 1"
},
{
"path": "setup.py",
"chars": 2544,
"preview": "import sys\nimport codecs\nimport setuptools\n\nfrom version import __version__ as version\n\n\ninstall_requires = [\n 'beaut"
},
{
"path": "test",
"chars": 5,
"preview": "test\n"
},
{
"path": "ttrv/__init__.py",
"chars": 916,
"preview": "# -*- coding: utf-8 -*-\nr\"\"\"\n________ _____ ______\n___ __/__________________ ______(_"
},
{
"path": "ttrv/__main__.py",
"chars": 10717,
"preview": "# -*- coding: utf-8 -*-\n# pylint: disable=wrong-import-position\n\nfrom __future__ import unicode_literals\nfrom __future__"
},
{
"path": "ttrv/__version__.py",
"chars": 88,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\n__version__ = '1.27.3'\n"
},
{
"path": "ttrv/clipboard.py",
"chars": 1200,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport sys\nimport subprocess\n\nfrom .exceptions import P"
},
{
"path": "ttrv/config.py",
"chars": 10468,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport os\nimport codecs\nimport shutil\nimport argparse\nf"
},
{
"path": "ttrv/content.py",
"chars": 45047,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport re\nimport time\nimport logging\nfrom datetime impo"
},
{
"path": "ttrv/docs.py",
"chars": 7282,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nAGENT = \"\"\"\\\ndesktop:https://github.com/tildeclub/ttrv:"
},
{
"path": "ttrv/exceptions.py",
"chars": 1367,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\n\nclass EscapeInterrupt(Exception):\n \"Signal that the"
},
{
"path": "ttrv/inbox_page.py",
"chars": 7289,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nfrom . import docs\nfrom .content import InboxContent\nfr"
},
{
"path": "ttrv/mime_parsers.py",
"chars": 16147,
"preview": "import re\nimport logging\nimport mimetypes\nimport json\n\nimport requests\nfrom bs4 import BeautifulSoup\n\n_logger = logging."
},
{
"path": "ttrv/oauth.py",
"chars": 9365,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport os\nimport time\nimport uuid\nimport string\nimport "
},
{
"path": "ttrv/objects.py",
"chars": 26247,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport re\nimport os\nimport sys\nimport time\nimport signa"
},
{
"path": "ttrv/packages/__init__.py",
"chars": 775,
"preview": "\"\"\"\nThis stub allows the user to fallback to their system installation of\npraw if the bundled package is missing. This t"
},
{
"path": "ttrv/packages/praw/__init__.py",
"chars": 120714,
"preview": "# This file is part of PRAW.\n#\n# PRAW is free software: you can redistribute it and/or modify it under the\n# terms of th"
},
{
"path": "ttrv/packages/praw/decorator_helpers.py",
"chars": 1428,
"preview": "\"\"\"Internal helper functions used by praw.decorators.\"\"\"\nimport inspect\nfrom requests.compat import urljoin\nimport six\ni"
},
{
"path": "ttrv/packages/praw/decorators.py",
"chars": 11985,
"preview": "# This file is part of PRAW.\n#\n# PRAW is free software: you can redistribute it and/or modify it under the\n# terms of th"
},
{
"path": "ttrv/packages/praw/errors.py",
"chars": 14188,
"preview": "# This file is part of PRAW.\n#\n# PRAW is free software: you can redistribute it and/or modify it under the\n# terms of th"
},
{
"path": "ttrv/packages/praw/handlers.py",
"chars": 9418,
"preview": "\"\"\"Provides classes that handle request dispatching.\"\"\"\n\nfrom __future__ import print_function, unicode_literals\n\nimport"
},
{
"path": "ttrv/packages/praw/helpers.py",
"chars": 19086,
"preview": "# This file is part of PRAW.\n#\n# PRAW is free software: you can redistribute it and/or modify it under the\n# terms of th"
},
{
"path": "ttrv/packages/praw/internal.py",
"chars": 10243,
"preview": "# This file is part of PRAW.\n#\n# PRAW is free software: you can redistribute it and/or modify it under the\n# terms of th"
},
{
"path": "ttrv/packages/praw/multiprocess.py",
"chars": 3895,
"preview": "\"\"\"Provides a request server to be used with the multiprocess handler.\"\"\"\n\nfrom __future__ import print_function, unicod"
},
{
"path": "ttrv/packages/praw/objects.py",
"chars": 80907,
"preview": "# This file is part of PRAW.\n#\n# PRAW is free software: you can redistribute it and/or modify it under the\n# terms of th"
},
{
"path": "ttrv/packages/praw/praw.ini",
"chars": 2233,
"preview": "[DEFAULT]\n# The domain name PRAW will use to interact with the reddit site via its API.\napi_domain: api.reddit.com\n\n# Ti"
},
{
"path": "ttrv/packages/praw/settings.py",
"chars": 1778,
"preview": "# This file is part of PRAW.\n#\n# PRAW is free software: you can redistribute it and/or modify it under the\n# terms of th"
},
{
"path": "ttrv/page.py",
"chars": 32396,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport re\nimport os\nimport sys\nimport time\nimport loggi"
},
{
"path": "ttrv/submission_page.py",
"chars": 15317,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nfrom . import docs\nfrom .content import SubmissionConte"
},
{
"path": "ttrv/subreddit_page.py",
"chars": 11886,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport time\n\nfrom . import docs\nfrom .content import Su"
},
{
"path": "ttrv/subscription_page.py",
"chars": 3352,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nfrom . import docs\nfrom .content import SubscriptionCon"
},
{
"path": "ttrv/templates/index.html",
"chars": 692,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <title>RTV OAuth2 Helper</title>\n <!-- style borrowed from http://bettermotherfucki"
},
{
"path": "ttrv/templates/mailcap",
"chars": 3550,
"preview": "# Example mailcap file for Terminal Viewer for Reddit\n# https://github.com/tildeclub/ttrv/\n#\n# Copy the contents of this"
},
{
"path": "ttrv/templates/ttrv.cfg",
"chars": 5482,
"preview": "; Tilde Terminal Reddit Viewer Configuration File\n; https://github.com/tildeclub/ttrv\n;\n; This file should be placed in "
},
{
"path": "ttrv/terminal.py",
"chars": 37361,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport os\nimport re\nimport sys\nimport time\nimport shlex"
},
{
"path": "ttrv/theme.py",
"chars": 22143,
"preview": "# pylint: disable=bad-whitespace\n\nimport os\nimport codecs\nimport curses\nimport logging\nfrom collections import OrderedDi"
},
{
"path": "ttrv/themes/colorblind-dark.cfg",
"chars": 3385,
"preview": "# Black ansi_235\n# White ansi_253\n\n# Sky Blue ansi_81\n# Bluish Green ansi_36\n# Yel"
},
{
"path": "ttrv/themes/default.cfg.example",
"chars": 3148,
"preview": "[theme]\n;<element> = <foreground> <background> <attributes>\nNormal = default default "
},
{
"path": "ttrv/themes/molokai.cfg",
"chars": 3716,
"preview": "# https://github.com/tomasr/molokai\n\n# normal ansi_252, ansi_234\n# line number ansi_239, ansi_235\n# cur"
},
{
"path": "ttrv/themes/papercolor.cfg",
"chars": 3664,
"preview": "# https://github.com/NLKNguyen/papercolor-theme\n\n# background ansi_255\n# negative ansi_124\n# positive ansi_"
},
{
"path": "ttrv/themes/solarized-dark.cfg",
"chars": 3658,
"preview": "# http://ethanschoonover.com/solarized\n\n# base3 ansi_230\n# base2 ansi_254\n# base1 ansi_245 (optional emphas"
},
{
"path": "ttrv/themes/solarized-light.cfg",
"chars": 3674,
"preview": "# http://ethanschoonover.com/solarized\n\n# base03 ansi_234\n# base02 ansi_235\n# base01 ansi_240 (optional emphas"
},
{
"path": "ttrv.1",
"chars": 2702,
"preview": ".TH \"TTRV\" \"1\" \"June 03, 2019\" \"Version 1.27.0\" \"Usage and Commands\"\n.SH NAME\nTTRV - Tilde Terminal Reddit Viewer\n.SH SY"
},
{
"path": "ttrv.egg-info/PKG-INFO",
"chars": 8932,
"preview": "Metadata-Version: 2.1\nName: ttrv\nVersion: 1.27.3\nSummary: Tilde Terminal Reddit Viewer\nHome-page: https://github.com/til"
},
{
"path": "ttrv.egg-info/SOURCES.txt",
"chars": 1210,
"preview": "AUTHORS.rst\nCHANGELOG.rst\nLICENSE\nMANIFEST.in\nREADME.md\nsetup.cfg\nsetup.py\nttrv.1\nversion.py\nttrv/__init__.py\nttrv/__mai"
},
{
"path": "ttrv.egg-info/dependency_links.txt",
"chars": 1,
"preview": "\n"
},
{
"path": "ttrv.egg-info/entry_points.txt",
"chars": 45,
"preview": "[console_scripts]\nttrv = ttrv.__main__:main\n\n"
},
{
"path": "ttrv.egg-info/requires.txt",
"chars": 149,
"preview": "beautifulsoup4\ndecorator\nkitchen\nrequests>=2.4.0\nsix\n\n[:python_version<'3.6']\nmailcap-fix\n\n[test]\ncoveralls\npytest>=3.1."
},
{
"path": "ttrv.egg-info/top_level.txt",
"chars": 5,
"preview": "ttrv\n"
}
]
About this extraction
This page contains the full source code of the tildeclub/ttrv GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 72 files (1.1 MB), approximately 487.3k tokens, and a symbol index with 775 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.