Skip to content

Instantly share code, notes, and snippets.

@ssh0
Last active January 26, 2024 09:10
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ssh0/436e906765dfe8d1b3d6 to your computer and use it in GitHub Desktop.
Save ssh0/436e906765dfe8d1b3d6 to your computer and use it in GitHub Desktop.
zsh-completion function for youtube-dl
#-------- youtube-dl completion
# put this script in your .zshrc
# generated by:
# https://github.com/rg3/youtube-dl/blob/master/devscripts/zsh-completion.in
# https://github.com/rg3/youtube-dl/blob/master/devscripts/zsh-completion.py
# and modified manually by Shotaro Fujimoto (https://github.com/ssh0)
__youtube_dl() {
local curcontext="$curcontext" fileopts diropts cur prev
typeset -A opt_args
fileopts="--download-archive|-a|--batch-file|--load-info|--cookies|--ffmpeg-location"
diropts="--cache-dir"
local ddir="/media/shotaro/STOCK/Videos"
cur=$words[CURRENT]
case $cur in
:)
_arguments '*: :(::ytfavorites ::ytrecommended ::ytsubscriptions ::ytwatchlater ::ythistory)'
;;
*)
prev=$words[CURRENT-1]
if [[ ${prev} =~ ${fileopts} ]]; then
_path_files
elif [[ ${prev} =~ ${diropts} ]]; then
_path_files -/
elif [[ ${prev} == "--recode-video" ]]; then
_arguments '*: :(mp4 flv ogg webm mkv)'
elif [[ ${prev} == "--audio-format" ]]; then
_arguments '*: :(best aac vorbis mp3 m4a opus wav)'
elif [[ ${prev} == "--convert-subtitle" ]]; then
_arguments '*: :(srt ass vtt)'
elif [[ ${prev} =~ "-o|--output" ]]; then
_arguments "*: :(\
'${ddir}/%(title)s.%(ext)s' \
'${ddir}/%(autonumber)s - %(title)s.%(ext)s' \
'${ddir}/%(extractor)s/%(title)s.%(ext)s' \
'-' \
)"
elif [[ ${prev} == "--proxy" ]]; then
_arguments "*: :( `echo ${http_proxy}` )"
else
_arguments -S\
'-h[Print help]: :' \
'-U[Update the program (run with root)]: :' \
'-i[Continue on download errors]' \
'(-6)-4[Make all connections via IPv4]' \
'(-4)-6[Make all connections via IPv6]' \
'-r[Maximum download rate in bytes per second (e.g. 50K or 4.2M)]' \
'-R[Number of retries (default is 10), or "infinite"]' \
'-a[File containg URLs to download ('-' for stdin)]' \
'-o[Output filename template. (See manpage)]' \
'-q[Activate quiet mode]' \
'-s[Do not download the video and do not write anything to disk]' \
'-g[Simulate, quiet but print URL]' \
'-e[Simulate, quiet but print title]' \
'-j[Simulate, quiet but print JSON information]' \
'-J[Simulate, quiet but print JSON information for each command-line argument]' \
'-f[Video format code, see the "FORMAT SELECTION" for all the info]' \
'-F[List all available formats]' \
'-u[Login with this account ID]' \
'-p[Account pass word. If this option is left out, youtube-dl will ask interactively]' \
'-2[Two-factor auth code]' \
'-n[Use .netrc authentication data]' \
'-x[Convert video files to audio-only files]' \
'-k[Keep the video file on disk after the post-processing; the video is erased by default]' \
'*: :(--help --version --update --ignore-errors --abort-on-error --dump-user-agent --list-extractors --extractor-descriptions --default-search --ignore-config --flat-playlist --no-color --proxy --socket-timeout --source-address --force-ipv3 --force-ipv6 --cn-verification-proxy --playlist-start --playlist-end --playlist-items --match-title --reject-title --max-downloads --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filter --no-playlist --yes-playlist --age-limit --download-archive --include-ads --rate-limit --retries --buffer-size --no-resize-buffer --test --playlist-reverse --xattr-set-filesize --hls-prefer-native --external-downloader --external-downloader-args --batch-file --id --output --autonumber-size --restrict-filenames --no-overwrites --continue --no-continue --no-part --no-mtime --write-description --write-info-json --write-annotations --load-info --cookies --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --write-all-thumbnails --list-thumbnails --quiet --no-warnings --simulate --skip-download --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --newline --no-progress --console-title --verbose --dump-pages --write-pages --youtube-print-sig-code --print-traffic --call-home --no-call-home --no-check-certificate --prefer-insecure --user-agent --referer --add-header --bidi-workaround --sleep-interval --format --all-formats --prefer-free-formats --list-formats --youtube-include-dash-manifest --youtube-skip-dash-manifest --merge-output-format --write-sub --write-auto-sub --all-subs --list-subs --sub-format --sub-lang --username --password --twofactor --netrc --video-password --extract-audio --audio-format --audio-quality --recode-video --keep-video --no-post-overwrites --embed-subs --embed-thumbnail --add-metadata --metadata-from-title --xattrs --fixup --prefer-avconv --prefer-ffmpeg --ffmpeg-location --exec --convert-subtitles)'
fi
;;
esac
}
compdef __youtube_dl youtube-dl
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment