mblaze/contrib/_mblaze
Vincent Breitmoser 0afe5e3638 contrib/_mblaze: small fixes to _mhdr and _minc
Closes: #129 [via git-merge-pr]
2018-08-26 16:27:44 +02:00

403 lines
10 KiB
Plaintext

#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
curmsg=$(mseq .)
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)"} )
mseq=( ${(M)mseq:# #<->*} )
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]' \
'*:messages:_mblaze_message'
}
_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]' \
'*:message:_mblaze_message'
}
_minc() {
local context state line expl
local -A opt_args
_arguments \
'-q[quiet mode: don'\''t print filenames]' \
'*:dirs:_mblaze_dirs'
}
_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' \
'-A[mixed/alternative preference]:mime type: ' \
'-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 "$@"