#compdef -command-line-

local _comp_command1 _comp_command2 _comp_command precommand
local -A opts

zparseopts -A opts -D - P p+:-=precommand s
(( $+opts[-s] )) || _compskip=
(( $+opts[-P] )) && precommands=()
(( $#precommand )) && precommands+=(${precommand#-p})

# Check for a history reference to complete modifiers.
# $PREFIX has a quoted form of the !, so we can't test that
# (it might the start of a real argument), but words has the
# raw McCoy.
if [[ -o BANG_HIST &&
     ( ( $words[CURRENT] = \!*: && -z $compstate[quote] ) ||
       ( $words[CURRENT] = \"\!*: && $compstate[all_quotes] = \" ) ) ]]; then
  # This looks like a real history expansion; in that case
  # we'd better put the !'s back the way pfalstad intended.
  PREFIX=${PREFIX//\\!/!}
  compset -P '*:'
  _history_modifiers h
  return
fi

# Completing in command position?

if [[ CURRENT -eq 1 ]]; then
  curcontext="${curcontext%:*:*}:-command-:"

  comp="$_comps[-command-]"
  [[ -n "$comp" ]] && eval "$comp" && return

  return 1
fi

_set_command

_dispatch ${(k)opts[-s]} "$_comp_command" \
          "$_comp_command1" "$_comp_command2" -default-
