mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			315 lines
		
	
	
	
		
			9.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			315 lines
		
	
	
	
		
			9.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef perlbrew
 | |
| 
 | |
| #
 | |
| # A zsh completion script for perlbrew (https://metacpan.org/dist/App-perlbrew/)
 | |
| #
 | |
| 
 | |
| local curcontext="$curcontext" state state_descr line ret=1
 | |
| local -a args_common args_install
 | |
| typeset -A opt_args
 | |
| # others local variables
 | |
| typeset -g perlbrew_subcommands
 | |
| 
 | |
| ##
 | |
| ## get the list of perl available versions
 | |
| ##
 | |
| (( $+functions[_perlbrew_caching_policy] )) ||
 | |
| _perlbrew_caching_policy() {
 | |
|   # rebuild if cached data are more than one week old
 | |
|   local -a newer=( "$1"(Nmw-1) )
 | |
|   return $#newer
 | |
| }
 | |
| 
 | |
| (( $+functions[_perl_available] )) ||
 | |
| _perl_available() {
 | |
|   local -a available_versions
 | |
|   local update_policy
 | |
| 
 | |
|   zstyle -s ":completion:${curcontext}:" cache-policy update_policy
 | |
|   if [[ -z "$update_policy" ]]; then
 | |
|     zstyle ":completion:${curcontext}:" cache-policy _perlbrew_caching_policy
 | |
|   fi
 | |
| 
 | |
|   if _cache_invalid perlbrew-available-versions || ! _retrieve_cache perlbrew-available-versions; then
 | |
|     # this can be slow
 | |
|     available_versions=( ${${${${(f)"$(_call_program perl_releases perlbrew available)"}/\# (cp|p)erl/}/(#s)i /}// /} \
 | |
|                          perl-stable \
 | |
|                          perl-blead )
 | |
|     _store_cache perlbrew-available-versions available_versions
 | |
|   fi
 | |
|   _values 'available version' ${(n)available_versions}
 | |
| }
 | |
| 
 | |
| ##
 | |
| ## get the list of local perl installations
 | |
| ##
 | |
| (( $+functions[_perl_installations] )) ||
 | |
| _perl_installations() {
 | |
|   local text
 | |
|   local -a installed alias_link
 | |
| 
 | |
|   case "$1" in
 | |
|     (-with-lib)
 | |
|       installed=( ${${${(f)"$(_call_program perl_installed perlbrew list)"}/(#s)\*/}// /} )
 | |
|       text="perl installation"
 | |
|       ;;
 | |
|     (-only-lib)
 | |
|       installed=( ${(M)${${${(f)"$(_call_program perl_installed perlbrew list)"}/(#s)\*/}// /}:#*@*} )
 | |
|       text="perl installation"
 | |
|       ;;
 | |
|     (-without-lib)
 | |
|       installed=( ${${${${(f)"$(_call_program perl_installed perlbrew list)"}/(#s)\*/}// /}:#*@*} )
 | |
|       text="perl installation"
 | |
|       ;;
 | |
|     (-alias)
 | |
|       if [[ -n "$PERLBREW_ROOT" ]]; then
 | |
|         if [[ -d "$PERLBREW_ROOT/perls" ]]; then
 | |
|           alias_link=( $PERLBREW_ROOT/perls/*(@) )
 | |
|         fi
 | |
|       fi
 | |
|       installed=( ${(q)${alias_link:t}[@]} )
 | |
|       text="alias"
 | |
|       ;;
 | |
|   esac
 | |
| 
 | |
|   if [[ ${#installed[@]} -eq 0 ]]; then
 | |
|     _message 'no local perl installation found'
 | |
|   else
 | |
|     case "$2" in
 | |
|       (-comma-separated)
 | |
|         _values -s , "$text" $installed
 | |
|         ;;
 | |
|       (*)
 | |
|         _values "$text" $installed
 | |
|         ;;
 | |
|     esac
 | |
|   fi
 | |
| }
 | |
| 
 | |
| ##
 | |
| ## completion for the alias subcommand
 | |
| ##
 | |
| (( $+functions[_perlbrew_alias] )) ||
 | |
| _perlbrew_alias() {
 | |
|   local line state ret=1
 | |
| 
 | |
|   _arguments -C \
 | |
|     -f'[force]' \
 | |
|     "1: :->actions" \
 | |
|     "*::arg:->args" && ret 0
 | |
| 
 | |
|   case "$state" in
 | |
|     (actions)
 | |
|       local -a alias_actions
 | |
|       alias_actions=(
 | |
|         "create:create an alias for the installation named <name>"
 | |
|         "rename:rename the alias to a new name"
 | |
|         "delete:delete the given alias"
 | |
|       )
 | |
|       _describe -t commands 'alias action' alias_actions && ret=0
 | |
|       ;;
 | |
|     (args)
 | |
|       case $line[1] in
 | |
|         (create)
 | |
|           _arguments \
 | |
|             '1:perl installation: _perl_installations -without-lib' \
 | |
|             '2: : _message "alias name"' && ret=0
 | |
|           ;;
 | |
|         (rename)
 | |
|           _arguments \
 | |
|             '1:perl installation: _perl_installations -alias' \
 | |
|             '2: : _message "new name"' && ret=0
 | |
|           ;;
 | |
|         (delete)
 | |
|           _arguments \
 | |
|             ':perl installation: _perl_installations -alias' && ret=0
 | |
|           ;;
 | |
|       esac
 | |
|       ;;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| ##
 | |
| ## completion for the lib subcommand
 | |
| ##
 | |
| (( $+functions[_perlbrew_lib] )) ||
 | |
| _perlbrew_lib() {
 | |
|   local line state ret=1
 | |
| 
 | |
|   _arguments -C \
 | |
|     "1: :->actions" \
 | |
|     "*::arg:->args" && ret=0
 | |
| 
 | |
|   case "$state" in
 | |
|     (actions)
 | |
|       local -a lib_actions
 | |
|       lib_actions=(
 | |
|         "list:list existing local libs"
 | |
|         "create:create a local lib"
 | |
|         "delete:delete a local lib"
 | |
|       )
 | |
|       _describe -t commands 'lib action' lib_actions && ret=0
 | |
|       ;;
 | |
|     (args)
 | |
|       case $line[1] in
 | |
|         (list)
 | |
|           _nothing && ret=0
 | |
|           ;;
 | |
|         (create)
 | |
|           _message 'lib name' && ret=0
 | |
|           ;;
 | |
|         (delete)
 | |
|           _arguments \
 | |
|             ':perl installation: _perl_installations -only-lib' && ret=0
 | |
|           ;;
 | |
|       esac
 | |
|       ;;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| ##
 | |
| ## main completion script
 | |
| ##
 | |
| 
 | |
| args_common=(
 | |
|   '(-q --quiet)'{-q,--quiet}'[be quiet on informative output message]' \
 | |
|   '(-v --verbose)'{-v,--verbose}'[tell me more about it]' \
 | |
|   ':perlbrew command:->subcommands' \
 | |
|   '*::: := ->option-or-argument'
 | |
| )
 | |
| 
 | |
| args_install=(
 | |
|   '(-f --force)'{-f,--force}'[force installation]' \
 | |
|   -j"[number of building jobs run in parallel]::number" \
 | |
|   '(-n --notest)'{-n,--notest}'[skip testing]' \
 | |
|   --switch"[automatically switch to this perl version once installed]" \
 | |
|   --as"[install the given version of perl by a name]:alias name" \
 | |
|   --noman"[skip installation of manpages]" \
 | |
|   --thread"[build perl with usethreads enabled]" \
 | |
|   --multi"[build perl with usemultiplicity enabled]" \
 | |
|   --64int"[build perl with use64bitint enabled]" \
 | |
|   --64all"[build perl with use64bitall enabled]" \
 | |
|   --ld"[build perl with uselongdouble enabled]" \
 | |
|   --debug"[build perl with DEBUGGING enabled]" \
 | |
|   --clang"[build perl using the clang compiler]" \
 | |
|   --no-patchperl"[skip calling patchperl]" \
 | |
|   {-D,-U,-A}"[switches passed to perl Configure script]:value:" \
 | |
|   --destdir"[install perl as per 'make install DESTDIR=\$path']: :_files -/" \
 | |
|   --sitecustomize"[specify a file to be installed as sitecustomize.pl]: :_files" \
 | |
|   --mirror"[specify a CPAN-mirror url]:URL:_urls"
 | |
| )
 | |
| 
 | |
| _arguments -C $args_common && ret=0
 | |
| 
 | |
| case $state in
 | |
|   (subcommands)
 | |
| 
 | |
|     perlbrew_subcommands=(
 | |
|       "init:initialize perlbrew environment"
 | |
|       "info:show useful information about the perlbrew installation"
 | |
|       "install:install perl"
 | |
|       "uninstall:uninstall the given installation"
 | |
|       "available:list perls available to install"
 | |
|       "lib:manage local::lib directories"
 | |
|       "alias:give perl installations a new name"
 | |
|       "upgrade-perl:upgrade the current perl"
 | |
|       "list:list perl installations"
 | |
|       "use:use the specified perl in current shell"
 | |
|       "off:turn off perlbrew in current shell"
 | |
|       "switch:permanently use the specified perl as default"
 | |
|       "switch-off:permanently turn off perlbrew (revert to system perl)"
 | |
|       "exec:exec programs with specified perl environments"
 | |
|       "clone-modules:re-installs all CPAN modules from one installation to another"
 | |
|       "self-install:install perlbrew itself under PERLBREW_ROOT/bin"
 | |
|       "self-upgrade:upgrade perlbrew itself"
 | |
|       "install-patchperl:install patchperl"
 | |
|       "install-cpanm:install cpanm, a friendly companion"
 | |
|       "install-cpm:install cpm, a faster but still friendly companion"
 | |
|       "install-multiple:install multiple versions and flavors of perl"
 | |
|       "download:download the specified perl distribution tarball"
 | |
|       "clean:purge tarballs and build directories"
 | |
|       "version:display version"
 | |
|       "help:read more detailed instructions"
 | |
|     )
 | |
| 
 | |
|     _describe -t commands 'perlbrew command' perlbrew_subcommands && ret=0
 | |
| 
 | |
|     ;;
 | |
|   (option-or-argument)
 | |
|     curcontext=${curcontext%:*}-$line[1]:
 | |
|     case $line[1] in
 | |
|       (info)
 | |
|         _message 'perl module name' && ret=0
 | |
|         ;;
 | |
|       (install)
 | |
|         _arguments \
 | |
|            $args_install \
 | |
|            '1:perl release: _perl_available' && ret=0
 | |
|         ;;
 | |
|       (install-multiple)
 | |
|         _arguments \
 | |
|            $args_install \
 | |
|            '*'--both"[perl flavor]: :(thread multi ld 64int 64all debug clang )" \
 | |
|            --common-variations"[equivalent to '--both thread --both ld --both 64int']" \
 | |
|            --all-variations"[generates all the possible flavor combinations]" \
 | |
|            --append"[appends the given string to the generated names]:string" \
 | |
|            '*:perl release: _perl_available' && ret=0
 | |
|         ;;
 | |
|       (uninstall)
 | |
|         _arguments \
 | |
|           ":perl installation: _perl_installations -without-lib" && ret=0
 | |
|         ;;
 | |
|       (use|switch)
 | |
|         _arguments \
 | |
|           ':perl installation: _perl_installations -with-lib' && ret=0
 | |
|         ;;
 | |
|       (available)
 | |
|         _arguments \
 | |
|           '--all[list of all perls ever released, including development and RC versions]' \
 | |
|           '*: :' && ret=0
 | |
|         ;;
 | |
|       (alias)
 | |
|         _perlbrew_alias && ret=0
 | |
|         ;;
 | |
|       (exec)
 | |
|         _arguments -C \
 | |
|           --with'[specify one or more perl installations to use]: : _perl_installations -without-lib -comma-separated' \
 | |
|           --min'[minimum perl version]:version number (n.nnnnn):' \
 | |
|           --max'[maximum perl version]:version number (n.nnnnn):' \
 | |
|           --halt-on-error'[stop on first nonzero exit status]' \
 | |
|           "1:command:" \
 | |
|           "*:args:" && ret=0
 | |
|         ;;
 | |
|       (env) # NOTE: Low level command
 | |
|         _arguments \
 | |
|           ':perl installation: _perl_installations -with-lib' && ret=0
 | |
|         ;;
 | |
|       (symlink-executables) # NOTE: Low level command
 | |
|         _arguments \
 | |
|           ':perl installation: _perl_installations -with-lib' && ret=0
 | |
|         ;;
 | |
|       (lib)
 | |
|         _perlbrew_lib && ret=0
 | |
|         ;;
 | |
|       (download)
 | |
|         _arguments \
 | |
|           ':perl release: _perl_available' && ret=0
 | |
|         ;;
 | |
|       (clone-modules)
 | |
|         _arguments \
 | |
|           '--notest[skip all module tests]' \
 | |
|           ':perl installation: _perl_installations -with-lib' \
 | |
|           ':perl installation: _perl_installations -with-lib' && ret=0
 | |
|         ;;
 | |
|       (init|list|off|switch-off|install-cpanm|install-patchperl|self-upgrade|\
 | |
|         self-install|clean|version|upgrade-perl|list-modules)
 | |
|         _nothing && ret=0
 | |
|         ;;
 | |
|       (*)
 | |
|         _default && ret=0
 | |
|         ;;
 | |
|     esac
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| return ret
 |