#!/usr/bin/env bash proc _asdf { local cur setvar cur = ${COMP_WORDS[COMP_CWORD]} local cmd setvar cmd = ${COMP_WORDS[1]} local prev setvar prev = ${COMP_WORDS[COMP_CWORD-1]} local plugins setvar plugins = $(asdf plugin-list | tr '\n' ' ') setvar COMPREPLY = ''() case (cmd) { plugin-update { setvar COMPREPLY = ''($(compgen -W "$plugins --all" -- "$cur")) } plugin-remove|current|list|list-all { setvar COMPREPLY = ''($(compgen -W "$plugins" -- "$cur")) } install { if [[ "$plugins" == *"$prev"* ]] { local versions setvar versions = $(asdf list-all "$prev") setvar COMPREPLY = ''($(compgen -W "$versions" -- "$cur")) } else { setvar COMPREPLY = ''($(compgen -W "$plugins" -- "$cur")) } } uninstall|where|reshim|local|global { if [[ "$plugins" == *"$prev"* ]] { local versions setvar versions = $(asdf list "$prev") setvar COMPREPLY = ''($(compgen -W "$versions" -- "$cur")) } else { setvar COMPREPLY = ''($(compgen -W "$plugins" -- "$cur")) } } * { local cmds='plugin-add plugin-list plugin-remove plugin-update install uninstall update current where which list list-all local global reshim' setvar COMPREPLY = ''($(compgen -W "$cmds" -- "$cur")) } } return 0 } complete -F _asdf asdf