#compdef vagrant # ------------------------------------------------------------------------------ # Description # ----------- # # Completion script for Vagrant (http://vagrantup.com). # # Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/vagrant # # ------------------------------------------------------------------------------ # Authors # ------- # # * Nikita Fedyashev (https://github.com/nfedyashev) # # ------------------------------------------------------------------------------ # -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- # vim: ft=zsh sw=2 ts=2 et # ------------------------------------------------------------------------------ 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.' ) __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 } __box_list () { _wanted application expl 'command' compadd $(command ls -1 $HOME/.vagrant/boxes 2>/dev/null| sed -e 's/ /\\ /g') } __vm_list () { _wanted application expl 'command' compadd $(command grep Vagrantfile -oe '^[^#]*\.vm\.define *:\([a-zA-Z0-9]\+\)' 2>/dev/null | cut -d: -f2) } __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 ;; (up|provision|package|destroy|reload|ssh|halt|resume|status) _arguments ':feature:__vm_list' esac ;; esac