#compdef compdef local func base=2 while [[ $words[base] = -* ]]; do case $words[base] in -d) delete=yes ;; -p) type=pattern ;; -k) type=key ;; esac (( base++ )) done if [ "$delete" ]; then compadd ${(k)_comps} else if [[ CURRENT -eq base ]]; then for func in ${^~fpath:/.}/_(|*[^~])(N:t); compadd -P_ - ${func#_} else compgen -c fi fi