#compdef efa typeset -a arguments typeset -A argument_pairs argument_postfix typeset arg argument_pairs=( time t+ arrive a+ date d+ bike b exclude e+ max-change m+ prefer P+ proximity p include i+ walk-speed w+ ignore-info I+ version v ) argument_postfix=( time '[Journey start time]:timestamp' arrive '[Journey end time]:timestamp' date '[Journey date]:date' bike '[Prefer connections where you can take a bike with you]' exclude '[Exclude transport types]:transport type:_efa_transports' max-change '[Maximum interchanges]:maximum interchange number' prefer '[Prefer connections]:connection type:(speed nowait nowalk)' proximity '[Take close stops into account]' include '[Include extra connection types]:connection type:(local ic ice)' walk-speed '[Walk speed]:walk speed:(normal fast slow)' ignore-info '[Ignore additional information]:regex' verison '[Print version information]' ) arguments=( '--'{from,to,via}':city: :stop: ' '--'{from,to,via}'-type:type:(stop address poi)' '(--depart --arrive)--time:time' '(--depart --time)--arrive:time' '(--arrive --time)--depart:time' '*--post:POST key=value' ) for arg in ${(k)argument_pairs}; { arguments+='(--'${arg}')-'${argument_pairs[$arg]}${argument_postfix[$arg]} arguments+='(-'${${argument_pairs[$arg]}[1]}')--'${arg}${argument_postfix[$arg]} } 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