Merge remote-tracking branch 'xu-cheng/zsh-completion'
This commit is contained in:
		
							
								
								
									
										20
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,7 +1,7 @@ | |||||||
| all: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.fish | all: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish | ||||||
|  |  | ||||||
| clean: | clean: | ||||||
| 	rm -rf youtube-dl.1.temp.md youtube-dl.1 youtube-dl.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dl.tar.gz youtube-dl.fish | 	rm -rf youtube-dl.1.temp.md youtube-dl.1 youtube-dl.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dl.tar.gz youtube-dl.zsh youtube-dl.fish | ||||||
|  |  | ||||||
| cleanall: clean | cleanall: clean | ||||||
| 	rm -f youtube-dl youtube-dl.exe | 	rm -f youtube-dl youtube-dl.exe | ||||||
| @@ -9,6 +9,7 @@ cleanall: clean | |||||||
| PREFIX ?= /usr/local | PREFIX ?= /usr/local | ||||||
| BINDIR ?= $(PREFIX)/bin | BINDIR ?= $(PREFIX)/bin | ||||||
| MANDIR ?= $(PREFIX)/man | MANDIR ?= $(PREFIX)/man | ||||||
|  | SHAREDIR ?= $(PREFIX)/share | ||||||
| PYTHON ?= /usr/bin/env python | PYTHON ?= /usr/bin/env python | ||||||
|  |  | ||||||
| # set SYSCONFDIR to /etc if PREFIX=/usr or PREFIX=/usr/local | # set SYSCONFDIR to /etc if PREFIX=/usr or PREFIX=/usr/local | ||||||
| @@ -22,13 +23,15 @@ else | |||||||
| 	endif | 	endif | ||||||
| endif | endif | ||||||
|  |  | ||||||
| install: youtube-dl youtube-dl.1 youtube-dl.bash-completion | install: youtube-dl youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish | ||||||
| 	install -d $(DESTDIR)$(BINDIR) | 	install -d $(DESTDIR)$(BINDIR) | ||||||
| 	install -m 755 youtube-dl $(DESTDIR)$(BINDIR) | 	install -m 755 youtube-dl $(DESTDIR)$(BINDIR) | ||||||
| 	install -d $(DESTDIR)$(MANDIR)/man1 | 	install -d $(DESTDIR)$(MANDIR)/man1 | ||||||
| 	install -m 644 youtube-dl.1 $(DESTDIR)$(MANDIR)/man1 | 	install -m 644 youtube-dl.1 $(DESTDIR)$(MANDIR)/man1 | ||||||
| 	install -d $(DESTDIR)$(SYSCONFDIR)/bash_completion.d | 	install -d $(DESTDIR)$(SYSCONFDIR)/bash_completion.d | ||||||
| 	install -m 644 youtube-dl.bash-completion $(DESTDIR)$(SYSCONFDIR)/bash_completion.d/youtube-dl | 	install -m 644 youtube-dl.bash-completion $(DESTDIR)$(SYSCONFDIR)/bash_completion.d/youtube-dl | ||||||
|  | 	install -d $(DESTDIR)$(SHAREDIR)/zsh/site-functions | ||||||
|  | 	install -m 644 youtube-dl.zsh $(DESTDIR)$(SHAREDIR)/zsh/site-functions/_youtube-dl | ||||||
| 	install -d $(DESTDIR)$(SYSCONFDIR)/fish/completions | 	install -d $(DESTDIR)$(SYSCONFDIR)/fish/completions | ||||||
| 	install -m 644 youtube-dl.fish $(DESTDIR)$(SYSCONFDIR)/fish/completions/youtube-dl.fish | 	install -m 644 youtube-dl.fish $(DESTDIR)$(SYSCONFDIR)/fish/completions/youtube-dl.fish | ||||||
|  |  | ||||||
| @@ -38,7 +41,7 @@ test: | |||||||
|  |  | ||||||
| tar: youtube-dl.tar.gz | tar: youtube-dl.tar.gz | ||||||
|  |  | ||||||
| .PHONY: all clean install test tar bash-completion pypi-files fish-completion | .PHONY: all clean install test tar bash-completion pypi-files zsh-completion fish-completion | ||||||
|  |  | ||||||
| pypi-files: youtube-dl.bash-completion README.txt youtube-dl.1 youtube-dl.fish | pypi-files: youtube-dl.bash-completion README.txt youtube-dl.1 youtube-dl.fish | ||||||
|  |  | ||||||
| @@ -66,12 +69,17 @@ youtube-dl.bash-completion: youtube_dl/*.py youtube_dl/*/*.py devscripts/bash-co | |||||||
|  |  | ||||||
| bash-completion: youtube-dl.bash-completion | bash-completion: youtube-dl.bash-completion | ||||||
|  |  | ||||||
|  | youtube-dl.zsh: youtube_dl/*.py youtube_dl/*/*.py devscripts/zsh-completion.in | ||||||
|  | 	python devscripts/zsh-completion.py | ||||||
|  |  | ||||||
|  | zsh-completion: youtube-dl.zsh | ||||||
|  |  | ||||||
| youtube-dl.fish: youtube_dl/*.py youtube_dl/*/*.py devscripts/fish-completion.in | youtube-dl.fish: youtube_dl/*.py youtube_dl/*/*.py devscripts/fish-completion.in | ||||||
| 	python devscripts/fish-completion.py | 	python devscripts/fish-completion.py | ||||||
|  |  | ||||||
| fish-completion: youtube-dl.fish | fish-completion: youtube-dl.fish | ||||||
|  |  | ||||||
| youtube-dl.tar.gz: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.fish | youtube-dl.tar.gz: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish | ||||||
| 	@tar -czf youtube-dl.tar.gz --transform "s|^|youtube-dl/|" --owner 0 --group 0 \ | 	@tar -czf youtube-dl.tar.gz --transform "s|^|youtube-dl/|" --owner 0 --group 0 \ | ||||||
| 		--exclude '*.DS_Store' \ | 		--exclude '*.DS_Store' \ | ||||||
| 		--exclude '*.kate-swp' \ | 		--exclude '*.kate-swp' \ | ||||||
| @@ -86,5 +94,5 @@ youtube-dl.tar.gz: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash- | |||||||
| 		bin devscripts test youtube_dl docs \ | 		bin devscripts test youtube_dl docs \ | ||||||
| 		LICENSE README.md README.txt \ | 		LICENSE README.md README.txt \ | ||||||
| 		Makefile MANIFEST.in youtube-dl.1 youtube-dl.bash-completion \ | 		Makefile MANIFEST.in youtube-dl.1 youtube-dl.bash-completion \ | ||||||
| 		youtube-dl.fish setup.py \ | 		youtube-dl.zsh youtube-dl.fish setup.py \ | ||||||
| 		youtube-dl | 		youtube-dl | ||||||
|   | |||||||
							
								
								
									
										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
	 Philipp Hagemeister
					Philipp Hagemeister