1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-10-02 08:51:18 +02:00
zsh/Completion/Unix/Command/_mh

92 lines
2.9 KiB
Plaintext

#compdef ali burst dist flist flists folder folders forw comp inc mark refile repl scan show next prev packf rmf rmm pick whom mhn mhpath mhlist mhstore mhshow mhparam mhmail
# Completion for all possible MH commands.
local mymhdir=${$(_call_program mhpath mhpath + 2>/dev/null):-~/Mail}
local mhlib=/usr/lib/mh
local prev="$words[CURRENT-1]" expl
if compset -P 1 -; then
# get list of options, which MH commands can generate themselves
# awk is just too icky to use for this, sorry. send me one if
# you come up with it.
local -a options disp
options=(
$($words[1] -help | perl -ne 'if (/^\s*-\(?(\S+)/) {
$n = $1;
$n =~ s/\)//g;
print $n =~ s/^\[([a-z]+)\]// ? "$n\n$1$n\n" : "$n\n";
}')
)
if zstyle -t ":completion:${curcontext}:options" prefix-hidden; then
_wanted options expl option compadd -d disp - "$options[@]"
else
disp=( -${options} )
_wanted options expl option compadd -d disp - "$options[@]"
fi
return
elif compset -P 1 '[+@]' || [[ "$prev" = -draftfolder ]]; then
# Complete folder names.
local mhpath
if [[ $IPREFIX != '@' ]]; then
[[ $IPREFIX = '+' ]] || IPREFIX=+
mhpath=$mymhdir
else
mhpath=$(mhpath)
fi
_wanted files expl 'MH folder' _path_files -W mhpath -/
elif [[ "$prev" = -(editor|(whatnow|rmm|show|more)proc) ]]; then
_command_names -e
elif [[ "$prev" = -file ]]; then
_files
elif [[ "$prev" = -(form|audit|filter) ]]; then
# Need some MH template file, which may be in our own MH directory
# or with the standard library.
local mhfpath
# This is the only place we need mhlib, so leave the test till here.
mhlib=${${$(mhparam mhlproc 2>/dev/null):h}:-/usr/lib/mh}
mhfpath=($mymhdir $mhlib)
_wanted files expl 'MH template file' _files -W mhfpath -g '*(-.)'
elif [[ $service = mhmail ]]; then
_email_addresses
elif [[ "$prev" = -(no|)cc ]]; then
_wanted -C "$prev" values expl 'CC address' compadd all to cc me
elif [[ "$prev" = -[rw]cache ]]; then
_wanted -C "$prev" values expl cache compadd public private never ask
elif [[ $service = mhparam ]]; then
_wanted parameters expl 'MH parameter' compadd - \
${${(f)"$(mhparam -all)"}%%:*}
elif [[ $service = ali ]]; then
_email_addresses -n MH
else
# Generate sequences.
local foldnam folddir f ret
for f in $words; do
[[ $f = [@+]* ]] && foldnam=$f
done
if [[ $foldnam = '+'* ]]; then
folddir=$mymhdir/${foldnam#+}
elif [[ $foldnam = '@'* ]]; then
folddir=$(mhpath)/${foldnam#@}
else
folddir=$(mhpath)
# leaving foldnam empty works here
fi
_tags sequences
while _tags; do
while _next_label sequences expl sequence; do
compadd "$expl[@]" $(mark $foldnam 2>/dev/null | awk -F: '{ print $1 }') &&
ret=0
compadd "$expl[@]" reply next cur prev first last all unseen && ret=0
_path_files "$expl[@]" -W folddir -g '<->(-.)' && ret=0
done
(( ret )) || return 0
done
return ret
fi