#compdef lha local expl if (( CURRENT == 2 )); then compset -P - local lhacmds lhacmds=( '( x l v u d m c p t)a[add \(or replace\) to archive]' '(a l v u d m c p t)x[extract from archive]' '(a x v u d m c p t)l[list]' '(a x l u d m c p t)v[verbose List]' '(a x l v d m c p t)u[update newer files to archive]' '(a x l v u m c p t)d[delete from archive]' '(a x l v u d c p t)m[move to archive]' '(a x l v u d m p t)c[re-construct new archive]' '(a x l v u d m c t)p[print to stdout from archive]' '(a x l v u d m c p )t[test file CRC in archive]' ) if [ "${words[2]#-}" != "" ]; then lhacmds=($lhacmds 'v[verbose]' 'q[quiet]' 'n[not execute]' 'f[force\(over write at extract\)]' 't[files are text files]' 'e[text code convert from/to EUC]' 'g[use generic format \(for compatibility\)]' ) case ${words[2]#-} in a*|u*) lhacmds=($lhacmds 'd[delete files after]' "z[don't compress files]" '( 1 2)0[header level 0]' '(0 2)1[header level 1]' '(0 1 )2[header level 2]' ) ;; c*) lhacmds=($lhacmds 'd[delete files after]') ;; x*) lhacmds=($lhacmds 'i[ignore directory path]') ;; esac fi _values -s '' 'lha command' $lhacmds elif (( CURRENT == 3 )); then _wanted files expl 'lha file' _files -g '*.lzh(-.)' else case ${words[2]#-} in l*|x*|d*) if [ -f "$words[3]" ]; then _lzh_cache_list=`$words[1] lq $words[3] | awk '{print $NF}'` _lzh_cache_list=("${(@f)${_lzh_cache_list}}") _wanted files expl 'file from archive' _multi_parts / _lzh_cache_list else _message -r "archive file is not found : ${words[3]}" return 1 fi ;; *) _files ;; esac fi