#!/bin/zsh
typeset -g _autocomplete__last_widget=

.autocomplete:zle-flags() {
  emulate -L zsh
  setopt $_autocomplete__func_opts[@]

  # If no arg, assume same widget as last time.
  [[ -v 1 && -n $1 ]] &&
      typeset -g _autocomplete__last_widget="$1"

  # Return 0 to continue, 1 to abort.
  case $_autocomplete__last_widget in
    ( *kill-*~vi-* )
      builtin zle -f kill
      return 0
    ;;
    ( bracketed-paste )
      builtin zle -f yank
      return 0
    ;;
    ( *yank*~vi-* | vi-*put-*after )
      builtin zle -f yank
      return 1
    ;;
    ( vi-*put-*before )
      builtin zle -f yankbefore
      return 1
    ;;
    ( * )
      return 0
    ;;
  esac
}

.autocomplete:zle-flags "$@"
