2018-08-18 15:06:37 +00:00
|
|
|
#compdef maddr magrep mbnc mcom mdeliver mdirs mexport mflag mflow mfwd mgenmid mhdr minc mless mlist mmime mmkdir mpick mrep mscan msed mseq mshow msort mthread
|
|
|
|
|
|
|
|
_mblaze_colon_separated_headers() {
|
|
|
|
_message 'headers (colon separated)'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mblaze_message() {
|
|
|
|
local ret=1 expl tmp curmsg
|
|
|
|
local -a mseq mseqnums mshortcuts mshortcutdescrs
|
|
|
|
setopt localoptions extendedglob
|
|
|
|
|
|
|
|
if [[ -prefix './' ]]; then
|
|
|
|
_description files expl 'message file'
|
|
|
|
_files "$expl[@]" && ret=0
|
|
|
|
fi
|
|
|
|
|
2020-10-10 13:19:12 +00:00
|
|
|
curmsg=$(mseq . 2>/dev/null)
|
2018-08-18 15:06:37 +00:00
|
|
|
if [[ -z $curmsg || ! -f $curmsg ]]; then
|
|
|
|
_message 'no current sequence'
|
|
|
|
return $ret
|
|
|
|
fi
|
|
|
|
|
|
|
|
mseq=( ${(f)"$(mscan -f '%3n %c%u%r %10d %17f %t %2i%s' : 2>/dev/null)"} )
|
2018-08-22 10:12:37 +00:00
|
|
|
mseq=( ${(M)mseq:# #<->*} )
|
2018-08-18 15:06:37 +00:00
|
|
|
mseqnums=( ${(M)${mseq## #}##<->} )
|
|
|
|
mseq=( ${mseq//:/\\:} )
|
|
|
|
_describe -V -t mseq 'seq messages' mseq mseqnums && ret=0
|
|
|
|
|
|
|
|
mshortcuts=( '.' '+' '$' '^' '=' '_' )
|
|
|
|
mshortcutdescrs=(
|
|
|
|
' . current message'
|
|
|
|
' + next message'
|
|
|
|
# ' - previous message'
|
|
|
|
' $ last message'
|
|
|
|
' ^ parent message'
|
|
|
|
' = current thread'
|
|
|
|
' _ current subthread'
|
|
|
|
)
|
|
|
|
|
|
|
|
_describe -t mshortcuts 'shortcuts' mshortcutdescrs mshortcuts -S '' && ret=0
|
|
|
|
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
|
|
|
_mblaze_message_part() {
|
|
|
|
setopt localoptions noksharrays extendedglob
|
|
|
|
local ret=1 expl tmp msgarg parts partnums
|
|
|
|
tmp=$words[(i)(-O|-x)]
|
|
|
|
if (( tmp >= $#words )); then
|
|
|
|
_message -e mparts 'message parts (parse error)'
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
msgarg=$words[$tmp+1]
|
|
|
|
parts=( ${(f)"$(mshow -t $msgarg)"} )
|
|
|
|
parts=( ${(M)parts:# ##<->:*} )
|
|
|
|
if [[ -n $parts ]]; then
|
|
|
|
partnums=( ${${parts## #}%%:*} )
|
|
|
|
parts=( ${parts//:/\\:} )
|
|
|
|
_describe -V -t mparts 'message parts' parts partnums -l && ret=0
|
|
|
|
else
|
|
|
|
_message -e mparts 'message parts (none found)'
|
|
|
|
fi
|
|
|
|
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
|
|
|
_mblaze_dirs() {
|
|
|
|
local ret=1 expl countnew countcur
|
|
|
|
local -a mailboxes mailbox_descriptions
|
|
|
|
setopt localoptions extendedglob
|
|
|
|
|
|
|
|
mailboxes=( */cur(:h) )
|
|
|
|
mailbox_descriptions=( ${(f)"$(mlist -i $mailboxes)"} )
|
|
|
|
_describe -t mailboxes "mailboxes" mailbox_descriptions mailboxes && ret=0
|
|
|
|
|
|
|
|
_description files expl 'directories'
|
|
|
|
_path_files "$expl[@]" -g "^(${(j:|:)mailboxes})(/)" && ret=0
|
|
|
|
}
|
|
|
|
|
|
|
|
_mblaze_header_regex() {
|
|
|
|
_message header\ regex
|
|
|
|
}
|
|
|
|
|
|
|
|
_mblaze_flags() {
|
|
|
|
_message flags
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_maddr() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-a[print addr-spec address without display name]' \
|
|
|
|
'-h[search only given headers]:header list:_mblaze_colon_separated_headers' \
|
|
|
|
'*:message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_magrep() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-a[search for regex in RFC 2822 address header parts only]' \
|
|
|
|
'-c[only print a count of matching messages]' \
|
|
|
|
'-d[decode the header according to RFC 2047 prior to searching]' \
|
|
|
|
'-i[match regex case insensitively]' \
|
|
|
|
'-m[do not show more than max matches]:max: ' \
|
|
|
|
'(-c -q -v)-o[print matches only]' \
|
|
|
|
'(-c -q -v)-p[print filename, header and matching]' \
|
|
|
|
'-q[quiet mode: do not print anything]' \
|
|
|
|
'-v[invert match]' \
|
|
|
|
'*:message:_mblaze_header_regex'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mbnc() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
':message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mcom() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
- resume \
|
|
|
|
'-r[resume editing]:draft: ' \
|
|
|
|
- recip \
|
|
|
|
'*:recipients: '
|
|
|
|
}
|
|
|
|
|
|
|
|
_mdeliver() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-c[deliver into cur/ instead of new/]' \
|
|
|
|
'-v[print message filename after delivery]' \
|
|
|
|
'-X[override flags]:flags:_mblaze_flags' \
|
|
|
|
'-M[deliver messages from mbox]' \
|
|
|
|
':dir:_mblaze_dirs'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mdirs() {
|
|
|
|
_mblaze_dirs
|
|
|
|
}
|
|
|
|
|
|
|
|
_mexport() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-S[add Status and X-Status headers according to flags]' \
|
|
|
|
'*:messages:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mflag() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'(-d)-D[mark as draft]' \
|
|
|
|
'(-f)-F[mark as flagged]' \
|
|
|
|
'(-p)-P[mark as passed (resent/forwarded/bounced)]' \
|
|
|
|
'(-r)-R[mark as replied-to]' \
|
|
|
|
'(-s)-S[mark as seen]' \
|
|
|
|
'(-t)-T[mark as trashed]' \
|
|
|
|
'-X[mark with characters]:marking characters: ' \
|
|
|
|
'(-D)-d[unmark as draft]' \
|
|
|
|
'(-F)-f[unmark as flagged]' \
|
|
|
|
'(-P)-p[unmark as passed (resent/forwarded/bounced)]' \
|
|
|
|
'(-R)-r[unmark as replied-to]' \
|
|
|
|
'(-S)-s[unmark as seen]' \
|
|
|
|
'(-T)-t[unmark as trashed]' \
|
|
|
|
'-x[unmark with characters]:marked chacaters: ' \
|
|
|
|
'-v[read messages from standard input or current sequence]' \
|
2018-08-22 10:20:37 +00:00
|
|
|
'*:messages:_mblaze_message'
|
2018-08-18 15:06:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_mflow() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-f[force wrapping of long lines]' \
|
|
|
|
'*-q[prefix lines with >]' \
|
|
|
|
'-w[set maximum line length]:width: ' \
|
|
|
|
'*:dirs:_mblaze_dirs'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mfwd() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-r[forward as plain text]' \
|
|
|
|
':*:message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mgenmid() {
|
|
|
|
_message 'no arguments'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mhdr() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-h[print specific headers only]:headers: ' \
|
|
|
|
'-p[print specific parameter from header only]:parameter: ' \
|
|
|
|
'-d[print headers decoded]' \
|
|
|
|
'-H[prefix output with filename]' \
|
|
|
|
'-M[print all occurrences, not only the first]' \
|
|
|
|
'(-D)-A[print addresses from headers]' \
|
|
|
|
'(-A)-D[print date as unix timestamp]' \
|
2018-08-25 13:54:50 +00:00
|
|
|
'*:message:_mblaze_message'
|
2018-08-18 15:06:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_minc() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-q[quiet mode: don'\''t print filenames]' \
|
2018-08-25 13:54:50 +00:00
|
|
|
'*:dirs:_mblaze_dirs'
|
2018-08-18 15:06:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_mless() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
':message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mlist() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'(-d)-D[only list messages marked as draft]' \
|
|
|
|
'(-f)-F[only list messages marked as flagged]' \
|
|
|
|
'(-p)-P[only list messages marked as passed (resent/forwarded/bounced)]' \
|
|
|
|
'(-r)-R[only list messages marked as replied-to]' \
|
|
|
|
'(-s)-S[only list messages marked as seen]' \
|
|
|
|
'(-t)-T[only list messages marked as trashed]' \
|
|
|
|
'-X[only list messages marked with characters]:marked characters: ' \
|
|
|
|
'(-D)-d[don'\''t list messages marked as draft]' \
|
|
|
|
'(-F)-f[don'\''t list messages marked as flagged]' \
|
|
|
|
'(-P)-p[don'\''t list messages marked as passed (resent/forwarded/bounced)]' \
|
|
|
|
'(-R)-r[don'\''t list messages marked as replied-to]' \
|
|
|
|
'(-S)-s[don'\''t list messages marked as seen]' \
|
|
|
|
'(-T)-t[don'\''t list messages marked as trashed]' \
|
|
|
|
'-x[don'\''t list messages marked with characters]:marked chacaters: ' \
|
|
|
|
'(-c -N)-C[only list messages in cur]' \
|
|
|
|
'(-n -C)-N[only list messages in new]' \
|
|
|
|
'(-C -N)-c[don'\''t list messages in cur]' \
|
|
|
|
'(-N -C)-n[don'\''t list messages in new]' \
|
|
|
|
'-i[print summaries instead of folder names]' \
|
|
|
|
'*:dirs:_mblaze_dirs'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mmkdir() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'*:directory name: '
|
|
|
|
}
|
|
|
|
|
|
|
|
_mmime() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'(-r)-c[check mode (don'\''t output anything)]' \
|
|
|
|
'(-c)-r[raw mode (generate text/plain)]' \
|
|
|
|
'-t[override Content-Type of toplevel part]:Content-Type: '
|
|
|
|
}
|
|
|
|
|
|
|
|
_mpick() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-T[include whole thread]' \
|
|
|
|
'-t[limit messages to test]:test: ' \
|
|
|
|
'*:message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mrep() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
':message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mscan() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-n[only print message numbers]' \
|
|
|
|
'-I[force ISO date output]' \
|
|
|
|
'-f[specify output format]:format: ' \
|
|
|
|
'*:messages:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_msed() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
':sed script: ' \
|
|
|
|
'*:messages:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mseq() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'(Cmode)-f[fix non-existing filenames]' \
|
|
|
|
'(Cmode)-r[remove leading indentation from filenames]' \
|
|
|
|
- argmode \
|
|
|
|
'-c[use current message]:message:_mblaze_message' \
|
|
|
|
'*:messages:_mblaze_message' \
|
|
|
|
- Smode \
|
|
|
|
'-S[set message sequence from stdin]' \
|
|
|
|
- Amode \
|
|
|
|
'-A[append message sequence from stdin]' \
|
|
|
|
- Cmode \
|
|
|
|
'-C[set current message]:message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mshow() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
- regular \
|
|
|
|
'-n[only print message numbers]' \
|
|
|
|
'-h[display only given headers]:header list:_mblaze_colon_separated_headers' \
|
2021-01-17 22:09:55 +00:00
|
|
|
'-A[multipart/alternative preference]:mime type: ' \
|
2018-08-18 15:06:37 +00:00
|
|
|
'-n[don'\''t update current message link]' \
|
|
|
|
'(-r)-q[print only header]' \
|
|
|
|
'(-q)-r[print body raw]' \
|
|
|
|
'(-q)-F[don'\''t apply MIME filters]' \
|
|
|
|
'-H[print headers raw]' \
|
|
|
|
'-L[don'\''t filter headers]' \
|
|
|
|
'(-q)-N[don'\''t show MIME structure markers]' \
|
|
|
|
'*:messages:_mblaze_message' \
|
|
|
|
- xmode \
|
|
|
|
'-x[extraction mode]:message:_mblaze_message:*:part:_mblaze_message_part' \
|
|
|
|
- Omode \
|
|
|
|
'-O[extraction mode to standard output]:message:_mblaze_message:*:part:_mblaze_message_part' \
|
|
|
|
- tmode \
|
|
|
|
'-t[list mode]:*:message:_mblaze_message' \
|
|
|
|
- Rmode \
|
|
|
|
'-R[render text parts]:message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_msort() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-r[reverse order]' \
|
|
|
|
'*:message:_mblaze_message' \
|
|
|
|
+ '(order)' \
|
|
|
|
'-f[sort by From]' \
|
|
|
|
'-d[sort by Date]' \
|
|
|
|
'-s[sort by Subject]' \
|
|
|
|
'-F[sort by filename]' \
|
|
|
|
'-M[sort by file modification time]' \
|
|
|
|
'-S[sort by file size]' \
|
|
|
|
'-U[sort unread messages after read messages]' \
|
|
|
|
'-I[sort flagged messages before unflagged messages]'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mthread() {
|
|
|
|
local context state line expl
|
|
|
|
local -A opt_args
|
|
|
|
|
|
|
|
_arguments \
|
|
|
|
'-a[don'\''t prune unresolved Message-IDs]' \
|
|
|
|
'-S[treat as optional messages]:optional message:_mblaze_message' \
|
|
|
|
'*:message:_mblaze_message'
|
|
|
|
}
|
|
|
|
|
|
|
|
_mblaze() {
|
|
|
|
local ret=1
|
|
|
|
_call_function ret _$service
|
|
|
|
return ret
|
|
|
|
}
|
|
|
|
|
|
|
|
_mblaze "$@"
|