#!/usr/bin/bash _sdk() { local -r previous_word=${COMP_WORDS[COMP_CWORD - 1]} local -r current_word=${COMP_WORDS[COMP_CWORD]} if ((COMP_CWORD == 3)); then local -r before_previous_word=${COMP_WORDS[COMP_CWORD - 2]} __sdkman_complete_candidate_version "$before_previous_word" "$previous_word" "$current_word" return fi __sdkman_complete_command "$previous_word" "$current_word" } __sdkman_complete_command() { local -r command=$1 local -r current_word=$2 local -a candidates case $command in sdk) candidates=("install" "uninstall" "list" "use" "config" "default" "home" "env" "current" "upgrade" "version" "help" "selfupdate" "update" "flush") ;; current|c|default|d|home|h|uninstall|rm|upgrade|ug|use|u) local -r candidate_paths=("${SDKMAN_CANDIDATES_DIR}"/*) for candidate_path in "${candidate_paths[@]}"; do candidates+=("${candidate_path##*/}") done ;; install|i|list|ls) candidates=${SDKMAN_CANDIDATES[@]} ;; env|e) candidates=("init" "install" "clear") ;; selfupdate) candidates=("force") ;; flush) candidates=("temp" "version") ;; esac COMPREPLY=($(compgen -W "${candidates[*]}" -- "$current_word")) } __sdkman_complete_candidate_version() { local -r command=$1 local -r candidate=$2 local -r candidate_version=$3 local -a candidates case $command in default|d|home|h|uninstall|rm|use|u) local -r version_paths=("${SDKMAN_CANDIDATES_DIR}/${candidate}"/*) for version_path in "${version_paths[@]}"; do [[ $version_path = *current ]] && continue candidates+=("${version_path##*/}") done ;; install|i) while IFS= read -r -d, version || [[ -n "$version" ]]; do candidates+=("$version") done <<< "$(curl --silent "${SDKMAN_CANDIDATES_API}/candidates/$candidate/${SDKMAN_PLATFORM}/versions/all")" ;; esac COMPREPLY=($(compgen -W "${candidates[*]}" -- "$candidate_version")) } complete -o default -F _sdk sdk # Set 'sdkman_auto_complete' to 'true' in .sdkman/etc/config to enable completion