mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 22:55:18 +00:00 
			
		
		
		
	support zsh completion
This commit is contained in:
		
							
								
								
									
										28
									
								
								devscripts/zsh-completion.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								devscripts/zsh-completion.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | #compdef youtube-dl | ||||||
|  |  | ||||||
|  | __youtube_dl() { | ||||||
|  |     local curcontext="$curcontext" fileopts diropts cur prev | ||||||
|  |     typeset -A opt_args | ||||||
|  |     fileopts="{{fileopts}}" | ||||||
|  |     diropts="{{diropts}}" | ||||||
|  |     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)' | ||||||
|  |             else | ||||||
|  |                 _arguments '*: :({{flags}})' | ||||||
|  |             fi | ||||||
|  |         ;; | ||||||
|  |     esac | ||||||
|  | } | ||||||
|  |  | ||||||
|  | __youtube_dl | ||||||
							
								
								
									
										46
									
								
								devscripts/zsh-completion.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								devscripts/zsh-completion.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  | import os | ||||||
|  | from os.path import dirname as dirn | ||||||
|  | import sys | ||||||
|  |  | ||||||
|  | sys.path.append(dirn(dirn((os.path.abspath(__file__))))) | ||||||
|  | import youtube_dl | ||||||
|  |  | ||||||
|  | ZSH_COMPLETION_FILE = "youtube-dl.zsh" | ||||||
|  | ZSH_COMPLETION_TEMPLATE = "devscripts/zsh-completion.in" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def build_completion(opt_parser): | ||||||
|  |     opts = [opt for group in opt_parser.option_groups | ||||||
|  |             for opt in group.option_list] | ||||||
|  |     opts_file = [opt for opt in opts if opt.metavar == "FILE"] | ||||||
|  |     opts_dir = [opt for opt in opts if opt.metavar == "DIR"] | ||||||
|  |  | ||||||
|  |     fileopts = [] | ||||||
|  |     for opt in opts_file: | ||||||
|  |         if opt._short_opts: | ||||||
|  |             fileopts.extend(opt._short_opts) | ||||||
|  |         if opt._long_opts: | ||||||
|  |             fileopts.extend(opt._long_opts) | ||||||
|  |  | ||||||
|  |     diropts = [] | ||||||
|  |     for opt in opts_dir: | ||||||
|  |         if opt._short_opts: | ||||||
|  |             diropts.extend(opt._short_opts) | ||||||
|  |         if opt._long_opts: | ||||||
|  |             diropts.extend(opt._long_opts) | ||||||
|  |  | ||||||
|  |     flags = [opt.get_opt_string() for opt in opts] | ||||||
|  |  | ||||||
|  |     with open(ZSH_COMPLETION_TEMPLATE) as f: | ||||||
|  |         template = f.read() | ||||||
|  |  | ||||||
|  |     template = template.replace("{{fileopts}}", "|".join(fileopts)) | ||||||
|  |     template = template.replace("{{diropts}}", "|".join(diropts)) | ||||||
|  |     template = template.replace("{{flags}}", " ".join(flags)) | ||||||
|  |  | ||||||
|  |     with open(ZSH_COMPLETION_FILE, "w") as f: | ||||||
|  |         f.write(template) | ||||||
|  |  | ||||||
|  | parser = youtube_dl.parseOpts()[0] | ||||||
|  | build_completion(parser) | ||||||
		Reference in New Issue
	
	Block a user
	 Xu Cheng
					Xu Cheng