#compdef shuf gshuf

local ret=1
local -a context line state state_descr
local -A opt_args

_arguments -s -S : \
  '(: -)--help[display help information]' \
  '(: -)--version[display version information]' \
  '(-n --head-count)'{-n+,--head-count=}'[limit output to specified number of lines]:output line limit' \
  '(-o --output)'{-o+,--output=}'[write result to specified file]:output file:_files' \
  '--random-source=[use specified file as source of random bytes]: :_files' \
  '(-r --repeat)'{-r,--repeat}'[allow output lines to repeat]' \
  '(-z --zero-terminated)'{-z,--zero-terminated}'[use NUL as line delimiter]' \
  '(-i --input-range)*: :->operands' \
  + '(excl)' \
  {-e,--echo}'[treat operands as input lines]' \
  '(:)'{-i+,--input-range=}'[treat specified numbers as input lines]:number range (x-y)' \
&& ret=0

[[ $state == operands ]] &&
if [[ -n ${opt_args[(i)excl-(-e|--echo)]} ]]; then
  _message 'input line' && ret=0
else
  _files && ret=0
fi

return ret
