#autoload

# Provides completion for file modes (formerly part of _chmod)

local curcontext=$curcontext
local -a context line state state_descr copts=( "${@}" ) privs
local -A val_args

privs=(
  'r[read]' 'w[write]' 'x[execute]'
  's[set uid/gid]' 't[sticky]'
  'X[execute only if directory or executable to another]'
  "u[owner's current permissions]"
  "g[group's current permissions]"
  "o[others' current permissions]"
)

[[ $OSTYPE == solaris* ]] &&
privs+=( 'l[mandatory locking]' )

compset -P '*,'
compset -S ',*'

if [[ -prefix [0-7] ]]; then
  _message -e number 'numeric mode'
elif compset -P '[a-z]#[+-=]'; then
  _values -O copts -S '' privilege $privs && return 0
else
  compset -P '*'
  copts=( -S '' )
  _alternative -O copts \
    'who:who:((a\:all u\:owner g\:group o\:others))' \
    'operators:operator:(+ - =)' \
  && return 0
fi

return 1
