Added --copy-mailcap command
This commit is contained in:
@@ -10,7 +10,7 @@ import praw
|
||||
import tornado
|
||||
|
||||
from . import docs
|
||||
from .config import Config, copy_default_config
|
||||
from .config import Config, copy_default_config, copy_default_mailcap
|
||||
from .oauth import OAuthHelper
|
||||
from .terminal import Terminal
|
||||
from .objects import curses_session, Color
|
||||
@@ -59,6 +59,10 @@ def main():
|
||||
copy_default_config()
|
||||
return
|
||||
|
||||
if config['copy_mailcap']:
|
||||
copy_default_mailcap()
|
||||
return
|
||||
|
||||
# Load the browsing history from previous sessions
|
||||
config.load_history()
|
||||
|
||||
|
||||
@@ -16,9 +16,11 @@ from .objects import KeyMap
|
||||
PACKAGE = os.path.dirname(__file__)
|
||||
HOME = os.path.expanduser('~')
|
||||
TEMPLATE = os.path.join(PACKAGE, 'templates')
|
||||
DEFAULT_CONFIG = os.path.join(PACKAGE, 'rtv.cfg')
|
||||
DEFAULT_CONFIG = os.path.join(TEMPLATE, 'rtv.cfg')
|
||||
DEFAULT_MAILCAP = os.path.join(TEMPLATE 'mailcap')
|
||||
XDG_HOME = os.getenv('XDG_CONFIG_HOME', os.path.join(HOME, '.config'))
|
||||
CONFIG = os.path.join(XDG_HOME, 'rtv', 'rtv.cfg')
|
||||
MAILCAP = os.path.join(XDG_HOME, '.mailcap')
|
||||
TOKEN = os.path.join(XDG_HOME, 'rtv', 'refresh-token')
|
||||
HISTORY = os.path.join(XDG_HOME, 'rtv', 'history.log')
|
||||
|
||||
@@ -59,33 +61,50 @@ def build_parser():
|
||||
parser.add_argument(
|
||||
'--copy-config', dest='copy_config', action='store_const', const=True,
|
||||
help='Copy the default configuration to {HOME}/.config/rtv/rtv.cfg')
|
||||
parser.add_argument(
|
||||
'--copy-mailcap', dest='copy_mailcap', action='store_const', const=True,
|
||||
help='Copy an example mailcap configuration to {HOME}/.mailcap')
|
||||
parser.add_argument(
|
||||
'--enable-media', dest='enable_media', action='store_const', const=True,
|
||||
help='Open external links using programs defined in the mailcap config')
|
||||
return parser
|
||||
|
||||
|
||||
def copy_default_mailcap(filename=MAILCAP):
|
||||
"""
|
||||
Copy the example mailcap configuration to the specified file.
|
||||
"""
|
||||
return _copy_settings_file(DEFAULT_MAILCAP, filename, 'mailcap')
|
||||
|
||||
|
||||
def copy_default_config(filename=CONFIG):
|
||||
"""
|
||||
Copy the default configuration file to the user's {HOME}/.config/rtv
|
||||
Copy the default rtv user configuration to the specified file.
|
||||
"""
|
||||
return _copy_settings_file(DEFAULT_CONFIG, filename, 'config')
|
||||
|
||||
|
||||
def _copy_settings_file(source, destination, name):
|
||||
"""
|
||||
Copy a file from the repo to the user's home directory.
|
||||
"""
|
||||
|
||||
if os.path.exists(filename):
|
||||
if os.path.exists(destination):
|
||||
try:
|
||||
ch = six.moves.input(
|
||||
'File %s already exists, overwrite? y/[n]):' % filename)
|
||||
'File %s already exists, overwrite? y/[n]):' % destination)
|
||||
if ch not in ('Y', 'y'):
|
||||
return
|
||||
except KeyboardInterrupt:
|
||||
return
|
||||
|
||||
filepath = os.path.dirname(filename)
|
||||
filepath = os.path.dirname(destination)
|
||||
if not os.path.exists(filepath):
|
||||
os.makedirs(filepath)
|
||||
|
||||
print('Copying default settings to %s' % filename)
|
||||
shutil.copy(DEFAULT_CONFIG, filename)
|
||||
os.chmod(filename, 0o664)
|
||||
print('Copying default %s to %s' % (name, destination))
|
||||
shutil.copy(source, destination)
|
||||
os.chmod(destination, 0o664)
|
||||
|
||||
|
||||
class OrderedSet(object):
|
||||
@@ -243,4 +262,4 @@ class Config(object):
|
||||
|
||||
filepath = os.path.dirname(filename)
|
||||
if not os.path.exists(filepath):
|
||||
os.makedirs(filepath)
|
||||
os.makedirs(filepath)
|
||||
|
||||
55
rtv/templates/mailcap
Normal file
55
rtv/templates/mailcap
Normal file
@@ -0,0 +1,55 @@
|
||||
# Example mailcap file for Reddit Terminal Viewer
|
||||
|
||||
# Copy the contents of this file to {HOME}/.mailcap, or point to using $MAILCAPS
|
||||
# Then launch RTV using the --enable-media flag. All shell commands defined in
|
||||
# this file depend on external programs that must be installed on your system.
|
||||
#
|
||||
# See https://github.com/michael-lazar/rtv/
|
||||
# If something is not working, you can save debug stderr messages to a log file
|
||||
# by launching rtv with the --log flag.
|
||||
# If you come up with your own commands and would like to share them, post an
|
||||
# issue on the GitHub tracker and they will be added as examples.
|
||||
|
||||
###############################################################################
|
||||
# Commands below this point will open media in a separate window without
|
||||
# pausing execution of RTV.
|
||||
###############################################################################
|
||||
|
||||
# Feh is a simple and effective image viewer
|
||||
# Note that rtv returns a list of urls for imgur albums, so we don't put quotes
|
||||
# around the `%s`
|
||||
image/x-imgur-album; feh -g 640x480 %s; test=test -n "$DISPLAY"
|
||||
image/*; feh -g 640x480 '%s'; test=test -n "$DISPLAY"
|
||||
|
||||
# Youtube videos are assigned a custom mime-type, which can be streamed with
|
||||
# vlc or youtube-dl.
|
||||
video/x-youtube; vlc '%s' --width 640 --height 480; test=test -n "$DISPLAY"
|
||||
video/x-youtube; youtube-dl -q -o - '%s' | mpv - --autofit 640x480; test=test -n "$DISPLAY"
|
||||
|
||||
# Mpv is a simple and effective video streamer
|
||||
video/webm; mpv '%s' --autofit 640x480; test=test -n "$DISPLAY"
|
||||
video/*; mpv '%s' --autofit 640x480; test=test -n "$DISPLAY"
|
||||
|
||||
###############################################################################
|
||||
# Commands below this point will attempt to display media directly in the
|
||||
# terminal when X is not available.
|
||||
###############################################################################
|
||||
|
||||
# View true images in the terminal, supported by rxvt-unicode, xterm and st
|
||||
# Requires the w3m-img package
|
||||
# image/*; w3m -o 'ext_image_viewer=off' '%s'; needsterminal
|
||||
|
||||
# Don't have a solution for albums yet
|
||||
image/x-imgur-album; echo
|
||||
|
||||
# 256 color images using half-width unicode characters
|
||||
# Much higher quality that img2txt, but must be built from source
|
||||
# https://github.com/rossy/img2xterm
|
||||
image/*; curl -s '%s' | convert -resize 80x80 - jpg:/tmp/rtv.jpg && img2xterm /tmp/rtv.jpg; needsterminal; copiousoutput
|
||||
|
||||
# Display images in classic ascii using img2txt and lib-caca
|
||||
image/*; curl -s '%s' | convert - jpg:/tmp/rtv.jpg && img2txt -f utf8 /tmp/rtv.jpg; needsterminal; copiousoutput
|
||||
|
||||
# Ascii videos
|
||||
video/x-youtube; youtube-dl -q -o - '%s' | mplayer -cache 8192 -vo caca -quiet -; needsterminal
|
||||
video/*; wget '%s' -O - | mplayer -cache 8192 -vo caca -quiet -; needsterminal
|
||||
Reference in New Issue
Block a user