#compdef vagrant #autoload local -a _1st_arguments _1st_arguments=( 'box:Box commands' 'destroy:Destroys the vagrant environment' 'halt:Halts the currently running vagrant environment' 'help:[TASK] Describe available tasks or one specific task' 'init:[box_name] [box_url] Initializes current folder for Vagrant usage' 'package:Packages a vagrant environment for distribution' 'provision:Run the provisioner' 'reload:Reload the vagrant environment' 'resume:Resumes a suspend vagrant environment' 'ssh:SSH into the currently running environment' 'ssh_config:outputs .ssh/config valid syntax for connecting to this environment via ssh.' 'status:Shows the status of the current Vagrant environment.' 'suspend:Suspends the currently running vagrant environment' 'up:Creates the vagrant environment' 'version:Prints the Vagrant version information' ) local -a _box_arguments _box_arguments=( 'add:NAME URI Add a box to the system' 'help:COMMAND Describe subcommands or one specific subcommand' 'list:Lists all installed boxes' 'remove:NAME Remove a box from the system' 'repackage:NAME Repackage an installed box into a `.box` file.' ) function __task_list() { local expl declare -a tasks tasks=(box destroy halt init package provision reload resume ssh ssh_config status suspend up version) _wanted tasks expl 'help' compadd $tasks } function __box_list() { _wanted application expl 'command' compadd $(command ls -1 $HOME/.vagrant/boxes 2>/dev/null| sed -e 's/ /\\ /g') } function __vagrant-box() { local curcontext="$curcontext" state line typeset -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gem subcommand" _box_arguments return ;; (options) case $line[1] in (repackage|remove) _arguments ':feature:__box_list' ;; esac ;; esac } local expl local -a boxes installed_boxes local curcontext="$curcontext" state line typeset -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gem subcommand" _1st_arguments return ;; (options) case $line[1] in (help) _arguments ':feature:__task_list' ;; (box) __vagrant-box ;; esac ;; esac