| 
									
										
										
										
											2014-10-06 18:58:25 +08:00
										 |  |  | #!/usr/bin/env python | 
					
						
							| 
									
										
										
										
											2014-11-26 20:01:20 +01:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-06 18:58:25 +08:00
										 |  |  | import os | 
					
						
							|  |  |  | from os.path import dirname as dirn | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 21:30:24 +08:00
										 |  |  | sys.path.insert(0, dirn(dirn((os.path.abspath(__file__))))) | 
					
						
							| 
									
										
										
										
											2014-10-06 18:58:25 +08:00
										 |  |  | 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) |