#compdef timeout gtimeout

local args

[[ $service = g* || $OSTYPE != *(netbsd|openbsd)* ]] && args=(
  '(-v --verbose)'{-v,--verbose}'[indicate when signal is sent upon timeout]'
)
[[ $service = g* || $OSTYPE != *(#i)(dragonfly|(free|net|open)bsd)* ]] && args+=(
  '(- *)--help[display usage information]'
  '(- *)--version[display version information]'
)

_arguments -S -A "-" $args \
  '(-p --preserve-status)'{-p,--preserve-status}'[always exit with the same status as command even if it times out]' \
  '(-f --foreground)'{-f,--foreground}"[don't propagate timeout to the command children]" \
  '(-s --signal)'{-s,--signal}'[specify the signal to send on timeout]:signal:_signals' \
  '(-k --kill-after)'{-k+,--kill-after=}'[followup first signal with SIGKILL if command persists after specified time]: :_numbers -f -u seconds duration \:s\:seconds m\:minutes h\:hours d\:days' \
  '1: :_numbers -f -u seconds duration :s:seconds m:minutes h:hours d:days' \
  '*:::command: _normal -p $service'
