#compdef efa typeset -a arguments arguments=( '--from:city: :stop: ' '--to:city: :stop: ' '--via:city: :stop: ' '--bike' '--debug' '(--depart --arrive)--time:time' '(--depart --time)--arrive:time' '(--arrive --time)--depart:time' '--date:date' '*--exclude:transports:_efa_transports' '--max-change:number' '--prefer:type:(speed nowait nowalk)' '--proximity' '--restrict:type:(local ic ice)' '--walk-speed:speed:(normal fast slow)' '--ignore-info:regex' '*--post:POST key=value' ) function _efa_transports { typeset -a keys used_prefixes typeset prefix='' keys=(zug s-bahn u-bahn stadtbahn tram stadtbus regionalbus schnellbus seilbahn schiff ast sonstige) if [[ -prefix *, ]] { prefix=${words[$CURRENT]%,*}, used_prefixes=(${(s:,:)prefix}) } _wanted expression expl 'sort expression' \ compadd -F used_prefixes -qS , -P "$prefix" $keys } _arguments -s $arguments