#autoload local comp pat val name i ret=1 _compskip="$_compskip" local curcontext="$curcontext" service str noskip # If we get the option `-s', we don't reset `_compskip'. if [[ "$1" = -s ]]; then noskip=yes shift fi [[ -z "$noskip" ]] && _compskip= curcontext="${curcontext%:*:*}:${1}:" shift # See if there are any matching pattern completions. if [[ "$_compskip" != (all|*patterns*) ]]; then for str in "$@"; do [[ -n "$str" ]] || continue service="${_services[$str]:-$str}" for i in "${(@)_patcomps[(K)$str]}"; do eval "$i" && ret=0 if [[ "$_compskip" = *patterns* ]]; then break elif [[ "$_compskip" = all ]]; then _compskip='' return ret fi done done fi # Now look up the names in the normal completion array. ret=1 for str in "$@"; do [[ -n "$str" ]] || continue name="$str" comp="${_comps[$str]}" service="${_services[$str]:-$str}" [[ -z "$comp" ]] || break done # And generate the matches, probably using default completion. if [[ -n "$comp" && "$name" != "${argv[-1]}" ]]; then _compskip=patterns eval "$comp" && ret=0 [[ "$_compskip" = (all|*patterns*) ]] && return ret fi if [[ "$_compskip" != (all|*patterns*) ]]; then for str; do [[ -n "$str" ]] || continue service="${_services[$str]:-$str}" for i in "${(@)_postpatcomps[(K)$str]}"; do _compskip=default eval "$i" && ret=0 if [[ "$_compskip" = *patterns* ]]; then break elif [[ "$_compskip" = all ]]; then _compskip='' return ret fi done done fi [[ "$name" = "${argv[-1]}" && -n "$comp" && "$_compskip" != (all|*default*) ]] && service="${_services[$name]:-$name}" && eval "$comp" && ret=0 _compskip='' return ret