From 16dfbfa8f58859766443c41bbbb17be53768b492 Mon Sep 17 00:00:00 2001 From: Paul Ackersviller Date: Mon, 3 Dec 2007 02:50:39 +0000 Subject: Bring various .distfiles up to date and merge any extra completions onto 4.2 branch. --- Completion/Unix/Command/_cvs | 14 ++- Completion/Unix/Type/_mailboxes | 198 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 204 insertions(+), 8 deletions(-) create mode 100644 Completion/Unix/Type/_mailboxes diff --git a/Completion/Unix/Command/_cvs b/Completion/Unix/Command/_cvs index 3a8775c5e..839075f64 100644 --- a/Completion/Unix/Command/_cvs +++ b/Completion/Unix/Command/_cvs @@ -6,14 +6,9 @@ _cvs() { local extra # "+Qqrwtnlvb:T:e:d:Hfz:s:xa" - case $OSTYPE in - freebsd*|openbsd*|dragonfly*) - extra='-R[read only access]' - ;; - esac _arguments -s \ - $extra \ + '-R[read only access]' \ '-a[authenticate]' \ '-f[disable .cvsrc]' \ '(-n)-l[disable logging]' \ @@ -868,8 +863,11 @@ _cvs_modified_entries() { : ${PREFIX:#(#b)(*/)(*)} linedir="$match[1]" realdir=${(e)~linedir} - [[ -f "$realdir"CVS/Entries ]] && - [[ -n ${pat::="${(@j:|:)${(@)${(@)${(@)${(@)${(@)${(@M)${(@f)"$(<"$realdir"CVS/Entries)"}:#/*}#/}/${slash}[^${slash}]#${slash}//}%/[^/]#/[^/]#}:#${(j:|:)~${${${${(f)"$(LC_ALL=C builtin stat -gn +mtime -F '%a %b %e %T %Y' ${realdir}*(D) 2>/dev/null)"}##*/}/ //}//(#m)[][*?()<|^~#\\]/\\$MATCH}}}%%/*}//(#m)[][*?()<|^~#\\]/\\$MATCH}"} ]] && + [[ -f "$realdir"CVS/Entries ]] && { + local -a mtime + LC_ALL=C builtin stat -A mtime -gn +mtime -F $'%a %b %e %T %Y\n' ${realdir}*(D) 2>/dev/null + [[ -n ${pat::="${(@j:|:)${(@)${(@)${(@)${(@)${(@)${(@M)${(@f)"$(<"$realdir"CVS/Entries)"}:#/*}#/}/${slash}[^${slash}]#${slash}//}%/[^/]#/[^/]#}:#${(j:|:)~${(f)${(j:/:)${mtime##*/}}//(#m)[][*?()<|^~#\\]/\\$MATCH}#/}}%%/*}//(#m)[][*?()<|^~#\\]/\\$MATCH}"} ]] + } && _wanted files expl 'modified file' _path_files -g "$pat" else _cvs_existing_entries diff --git a/Completion/Unix/Type/_mailboxes b/Completion/Unix/Type/_mailboxes new file mode 100644 index 000000000..bf5c6c2a2 --- /dev/null +++ b/Completion/Unix/Type/_mailboxes @@ -0,0 +1,198 @@ +#autoload + +_mailboxes() { + #emulate -L zsh + local expl ret=1 + local maildirectory pinedirectory + zstyle -s ":completion:${curcontext}:" mail-directory maildirectory || maildirectory="~/Mail" + zstyle -s ":completion:${curcontext}:" pine-directory pinedirectory + + if (( ! $+_mailbox_cache )) then + _mailbox_cache "$@" + fi + + case "${curcontext}:" in + (*:mail:*) + if [[ "$PREFIX" == +* ]]; then + _tags mailboxes + else + _tags mailboxes files + fi;; + (*:(mush|zmail|zmlite):*) + if [[ "$PREFIX" == [%+]* ]]; then + _tags mailboxes + else + _tags mailboxes files + fi;; + (*:mutt:*) + if [[ "$PREFIX" == (|-f)[+=]* ]]; then + _tags mailboxes + else + _tags mailboxes files + fi;; + (*:pine:*) + # Files for pine must be absolute paths. + if [[ "$PREFIX" == (|-f)[/\~]* ]]; then + pinedirectory='' + _tags mailboxes files + else + _tags mailboxes + fi;; + (*) + if [[ "$PREFIX" == (|-f)+* ]]; then + _tags mailboxes + else + _tags mailboxes files + fi;; + esac + + while _tags; do + _requested mailboxes expl 'mailbox specification' _mua_mailboxes && ret=0 + + if _requested files expl 'mailbox file'; then + [[ "${curcontext}:" != *:(mail|mush|mutt|zmail|zmlite):* ]] && + compset -P -f + _files "$expl[@]" && ret=0 + fi + (( ret )) || return 0 + done + + return 1 +} + +_mailbox_cache () { + local i j _mc_tmp + local -aU dirboxes + local maildirectory pinedirectory muttrc + typeset -aU -g _mailbox_cache + typeset -aU -g _maildir_cache _mbox_cache _mh_cache _mutt_cache _pine_cache + + zstyle -s ":completion:${curcontext}:" mail-directory maildirectory || maildirectory="~/Mail" + zstyle -s ":completion:${curcontext}:" pine-directory pinedirectory + zstyle -s ":completion:${curcontext}:" muttrc muttrc || muttrc="~/.muttrc" + + [[ -f ${~muttrc:-.} ]] && + _mc_tmp=${=${(M)${(f)"$(<${~muttrc})"}:#mailboxes *}#mailboxes *} && + _mutt_cache=( ${=${(Xe)_mc_tmp}} ) + + _mbox_cache=( ${~maildirectory}/*(^/) ) + if [[ -n $pinedirectory ]]; then + _pine_cache=( ${~pinedirectory}/**/*(.) ) + else + _pine_cache=() + fi + + dirboxes=( ${~maildirectory}/*(/) ) + + while (( $#dirboxes )); do + i=${dirboxes[1]} + shift dirboxes + if [[ -d "$i/cur" ]]; then + _maildir_cache=( "${_maildir_cache[@]}" "$i" ) + elif j=( "$i"/<1-> ) && [[ -n "$j" ]]; then + _mh_cache=( "${_mh_cache[@]}" "$i" ) + dirboxes=( $dirboxes "$i"/*(/) ) + else + _mbox_cache=( "${_mbox_cache[@]}" "$i"/*(.) ) + dirboxes=( $dirboxes "$i"/*(/) ) + fi + done + + [[ -n "$mailpath" ]] && + _mailbox_cache=( "${_mailbox_cache[@]}" "${(@)mailpath%%\?*}" ) + + [[ -n "$MAIL" ]] && _mailbox_cache=( "${_mailbox_cache[@]}" $MAIL ) +} + +_mua_mailboxes() { + local -a mbox_short + local -aU mbox_names + local ret=1 + + local maildirectory pinedirectory + zstyle -s ":completion:${curcontext}:" mail-directory maildirectory || maildirectory="~/Mail" + zstyle -s ":completion:${curcontext}:" pine-directory pinedirectory + + case "${curcontext}:" in + (*:elm:*) # I've probably got this wrong, or at least incomplete + mbox_names=( "${_mbox_cache[@]}" "${_mailbox_cache[@]}" ) + mbox_short=( \! \< \> ) + ;; + (*:mail:*) + if compset -P +; then + mbox_names=( "${(@)_mbox_cache#$~maildirectory/}" ) + else + mbox_names=( +"${(@)^_mbox_cache#$~maildirectory/}" + "${_mailbox_cache[@]}" ) + fi + ;; + (*:mh:*) + local lastmhbox=$(mhpath) + if compset -P +; then + mbox_names=( "${(@)_mh_cache#$~maildirectory/}" ) + elif compset -P @; then + mbox_names=( "${(@)${(@M)_mh_cache:#$~lastmhbox/*}#$~lastmhbox/}" ) + else + mbox_names=( +"${(@)^_mh_cache#$~maildirectory/}" + @"${(@)^${(@M)_mh_cache:#$~lastmhbox/*}#$~lastmhbox/}" + "${_mh_cache[@]}" ) + fi + ;; + (*:mush:*) + if compset -P %; then + mbox_short=( "${(@k)userdirs}" ) + elif compset -P +; then + mbox_names=( "${(@)_mbox_cache#$~maildirectory/}" ) + else + mbox_names=( +"${(@)^_mbox_cache#$~maildirectory/}" + "${_mailbox_cache[@]}" ) + mbox_short=( \& % %"${(@k)^userdirs}" ) + fi + ;; + (*:mutt:*) + if compset -P '='; then + mbox_names=( "${_mutt_cache[@]#[+=]}" "${(@)_mbox_cache#$~maildirectory/}" "${(@)_maildir_cache#$~maildirectory/}" "${(@)_mh_cache#$~maildirectory/}") + elif compset -P +; then + mbox_names=( "${_mutt_cache[@]#[+=]}" "${(@)_mbox_cache#$~maildirectory/}" "${(@)_maildir_cache#$~maildirectory/}" "${(@)_mh_cache#$~maildirectory/}") + else + mbox_names=( "${_mutt_cache[@]}" "${_mailbox_cache[@]}" + "${_maildir_cache[@]}" "${_mh_cache[@]}" ) + mbox_short=( \! \< \> ) + fi + ;; + (*:pine:*) + mbox_names=( "${_mbox_cache[@]}" + "${_mailbox_cache[@]}" "${_mh_cache[@]}" ) + # Pine is like mail but with no leading `+' to disambiguate; + # any files not in $pinedirectory must be absolute paths. + if [[ -n $pinedirectory ]]; then + mbox_names+=( "${(@)_pine_cache#$~pinedirectory/}" ) + fi + ;; + (*:tkrat:*) # Has a couple of custom formats I haven't programmed for. + mbox_names=( "${_mbox_cache[@]}" + "${_mailbox_cache[@]}" "${_mh_cache[@]}" ) + ;; + (*:(zmail|zmlite):*) + if compset -P %; then + mbox_short=( "${(@k)userdirs}" ) + elif compset -P +; then + mbox_names=( "${(@)_mbox_cache#$~maildirectory/}" ) + else + mbox_names=( +"${(@)^_mbox_cache#$~maildirectory/}" + "${_mailbox_cache[@]}" "${_mh_cache[@]}" ) + mbox_short=( \& % %"${(@k)^userdirs}" ) + fi + ;; + (*) # Some other program wants mailbox names? Use them all? + mbox_names=( "${_mailbox_cache[@]}" "${_mbox_cache[@]}" + "${_mh_cache[@]}" "${_mutt_cache[@]}" "${_pine_cache[@]}" ) + ;; + esac + + (( $#mbox_names )) && _multi_parts "$@" / mbox_names && ret=0 + (( $#mbox_short )) && compadd "$@" -a mbox_short && ret=0 + return ret +} + +_mailboxes "$@" -- cgit 1.4.1