#compdef locale # TODO: FreeBSD: locale -k list [prefix] local curcontext="$curcontext" state line expl ret=1 if _pick_variant gnu='(GNU|EGLIBC)' unix --version; then local exargs="-? --help --usage -V --version" _arguments -A "-*" -C -S -s \ '(- *)'{-\?,--help}'[display help information]' \ '(- *)--usage[display a short usage message]' \ '(- *)'{-V,--version}'[print program version]' \ - set1 \ "(-a --all-locales $exargs)"{-a,--all-locales}'[list all available locales]' \ "(-v --verbose $exargs)"{-v,--verbose}'[display additional information]' \ - set2 \ "(-m --charmaps $exargs)"{-m,--charmaps}'[list all available charmaps]' \ - set3 \ "(-c --category-name $exargs)"{-c,--category-name}'[print also locale category]' \ "(-k --keyword-name $exargs)"{-k,--keyword-name}'[print also keyword of each value]' \ '*:name:->catkey' \ && return 0 if [[ $state == catkey ]]; then typeset -a cats keys cats=( ${${${(f)"$(locale)"}%=*}%(LANG|LANGUAGE|LC_ALL)} ) keys=( ${${(f)"$(locale -k $cats 2>/dev/null)"}%=*} ) _wanted values expl name compadd "$@" -a - cats keys && ret=0 fi return ret elif [[ $OSTYPE == openbsd* ]]; then _arguments \ - set1 \ "(-a)"-a'[list all available locales]' \ - set2 \ "(-m)"-m'[list all available charmaps]' \ && return 0 return ret else _arguments -A "-*" -C \ - set1 \ "(-a)"-a'[list all available locales]' \ - set2 \ "(-m)"-m'[list all available charmaps]' \ - set3 \ "(-c)"-c'[print also locale category]' \ "(-k)"-k'[print also keyword of each value]' \ '*:name:->catkey' \ && return 0 if [[ $state == catkey ]]; then typeset -a cats keys cats=( ${${${(f)"$(locale)"}%=*}%(LANG|LANGUAGE|LC_ALL)} ) keys=( ${${(f)"$(locale -k $cats 2>/dev/null)"}%=*} ) _wanted values expl name compadd "$@" -a - cats keys && ret=0 fi return ret fi