#!/usr/bin/env bash _conf() { COMPREPLY=() local cur="${COMP_WORDS[COMP_CWORD]}" local commands="add ls list search edit relink grep help version" if [[ $COMP_CWORD -gt 1 ]]; then local lastarg="${COMP_WORDS[$COMP_CWORD-1]}" case "${COMP_WORDS[1]}" in l|ls|list) if [[ $lastarg == "-g" ]]; then COMPREPLY=($(compgen -W "$(conf ls -G)" -- ${cur})) else COMPREPLY=($(compgen -W "$(conf ls -h 2>&1 | awk -F' ' '{print $1}')" -- ${cur})) fi ;; add|a) if [[ $lastarg == "-g" ]]; then COMPREPLY=($(compgen -W "$(conf ls -G)" -- ${cur})) else COMPREPLY=($(compgen -f -- ${cur})) fi ;; edit|e|editg|eg) COMPREPLY=($(compgen -W "$(conf ls -G) \ $(conf ls -l | xargs -If basename f) \ $(for g in $(conf ls -G); do \ conf ls -g $g | xargs -If basename f | sed -e "s#^#${g}/#"; \ done)" -- ${cur})) ;; relink) COMPREPLY=($(compgen -W "-t --test $(conf ls -G)" -- ${cur})) ;; esac else COMPREPLY=($(compgen -W "${commands}" -- ${cur})) fi } complete -F _conf conf