#compdef unalias _aliases_add() { if zstyle -t ":completion:${curcontext}:$2" extra-verbose; then local -a items=() printf -v items "%s\:%s" "${(@q)${(@kvq)${(PAA)1}}}" args+=( "${2}:${3}:(( ${items:#'\:'} ))" ) else args+=( "${2}:${3}:compadd -k $1" ) fi } _aliases() { local -a args=() sel=( -s rgs ) zparseopts -D -E -K s:=sel shift sel case $sel in ( *r* ) _aliases_add aliases aliases 'regular alias' ;| ( *g* ) _aliases_add galiases global-aliases 'global alias' ;| ( *s* ) _aliases_add saliases suffix-aliases 'suffix alias' ;| ( *R* ) _aliases_add dis_aliases disabled-aliases 'disabled regular alias' ;| ( *G* ) _aliases_add dis_galiases disabled-global-aliases 'disabled global alias' ;| ( *S* ) _aliases_add dis_saliases disabled-suffix-aliases 'disabled suffix alias' ;| esac local -a opts=( "$@" ) _alternative -O opts "$args[@]" } _aliases "$@"