diff options
Diffstat (limited to 'devscripts')
| -rw-r--r-- | devscripts/fish-completion.in | 5 | ||||
| -rwxr-xr-x | devscripts/fish-completion.py | 48 | 
2 files changed, 53 insertions, 0 deletions
| diff --git a/devscripts/fish-completion.in b/devscripts/fish-completion.in new file mode 100644 index 000000000..eb79765da --- /dev/null +++ b/devscripts/fish-completion.in @@ -0,0 +1,5 @@ + +{{commands}} + + +complete --command youtube-dl --arguments ":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory" diff --git a/devscripts/fish-completion.py b/devscripts/fish-completion.py new file mode 100755 index 000000000..f4aaf0201 --- /dev/null +++ b/devscripts/fish-completion.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +from __future__ import unicode_literals + +import optparse +import os +from os.path import dirname as dirn +import sys + +sys.path.append(dirn(dirn((os.path.abspath(__file__))))) +import youtube_dl +from youtube_dl.utils import shell_quote + +FISH_COMPLETION_FILE = 'youtube-dl.fish' +FISH_COMPLETION_TEMPLATE = 'devscripts/fish-completion.in' + +EXTRA_ARGS = { +    'recode-video': ['--arguments', 'mp4 flv ogg webm mkv', '--exclusive'], + +    # Options that need a file parameter +    'download-archive': ['--require-parameter'], +    'cookies': ['--require-parameter'], +    'load-info': ['--require-parameter'], +    'batch-file': ['--require-parameter'], +} + +def build_completion(opt_parser): +    commands = [] + +    for group in opt_parser.option_groups: +        for option in group.option_list: +            long_option = option.get_opt_string().strip('-') +            help_msg = shell_quote([option.help]) +            complete_cmd = ['complete', '--command', 'youtube-dl', '--long-option', long_option] +            if option._short_opts: +                complete_cmd += ['--short-option', option._short_opts[0].strip('-')] +            if option.help != optparse.SUPPRESS_HELP: +                complete_cmd += ['--description', option.help] +            complete_cmd.extend(EXTRA_ARGS.get(long_option, [])) +            commands.append(shell_quote(complete_cmd)) + +    with open(FISH_COMPLETION_TEMPLATE) as f: +        template = f.read() +    filled_template = template.replace('{{commands}}', '\n'.join(commands)) +    with open(FISH_COMPLETION_FILE, 'w') as f: +        f.write(filled_template) + +parser = youtube_dl.parseOpts()[0] +build_completion(parser) | 
