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

92 lines
2.9 KiB
Plaintext
Raw Normal View History

#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
2001-04-02 13:57:20 +02:00
# Completion for all possible MH commands.
2003-03-10 16:16:27 +01:00
local mymhdir=${$(_call_program mhpath mhpath + 2>/dev/null):-~/Mail}
2001-04-02 13:57:20 +02:00
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.
2003-03-10 16:16:27 +01:00
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
2001-04-02 13:57:20 +02:00
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 '*(-.)'
2003-03-10 16:16:27 +01:00
elif [[ $service = mhmail ]]; then
_email_addresses
2001-04-02 13:57:20 +02:00
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)"}%%:*}
2003-03-10 16:16:27 +01:00
elif [[ $service = ali ]]; then
_email_addresses -n MH
2001-04-02 13:57:20 +02:00
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
2001-04-02 13:57:20 +02:00
done
(( ret )) || return 0
done
return ret
fi