mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +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