diff --git a/etc/new.triton.completion b/etc/new.triton.completion new file mode 100644 index 0000000..7ae9fe3 --- /dev/null +++ b/etc/new.triton.completion @@ -0,0 +1,99 @@ +#!/usr/bin/env bash + +_triton_default_words() { + # main command + local words=( + -h --help + --version + -v --verbose + help ? + account whoami + info + keys + create-instance create + instances insts + instance inst + instance-audit + start-instance start + stop-instance stop + reboot-instance reboot + delete-instance delete + wait-instance wait + ssh + images imgs + image img + packages pkgs + package pkg + networks + network + ) + echo "${words[*]}" +} + +_triton_words() { + local cmd=$1 + local curword=${COMP_WORDS[COMP_CWORD]} + if [[ $cmd == $curword ]]; then + COMPREPLY=($(compgen -W "$(_triton_default_words)" -- "$curword")) + return + fi + + # assume everything supports this + local words=(-j --json -h --help) + + case "$cmd" in + account|whoami) ;; + info) ;; + keys) ;; + create|create-instance) + words+=(-n --name --dry-run -w --wait -q --quiet) + ;; + start|start-instance|stop|stop-instance|reboot|reboot-instance|delete|delete-instance) + words=(-h --help -w --wait) + ;; + wait|wait-instance) + words+=(-q --quiet) + ;; + insts|instances) + words+=(-H -o -s) + ;; + inst|instance) ;; + images|imgs) + words+=(-a --all -H -o -s -l --long) + ;; + image|img) ;; + packages|pkgs) + words+=(-H -o -s -l --long) + ;; + package|pkg) ;; + networks) + words+=(-H -o -s -l --long) + ;; + network) ;; + ssh) + words+=() + ;; + *) + words=($(_triton_default_words)) + ;; + esac + + COMPREPLY=($(compgen -W "${words[*]}" -- "$curword")) +} + +_triton() { + local cur=$COMP_CWORD + + local i word + for ((i = 1; i <= COMP_CWORD; i++)); do + word=${COMP_WORDS[i]} + if ((i < COMP_CWORD)) && [[ ${word:0:1} == '-' ]]; then + continue + fi + _triton_words "$word" + break + done + +} + +complete -F _triton triton