about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Ackersviller <packersv@users.sourceforge.net>2007-12-03 02:50:39 +0000
committerPaul Ackersviller <packersv@users.sourceforge.net>2007-12-03 02:50:39 +0000
commit16dfbfa8f58859766443c41bbbb17be53768b492 (patch)
tree6576d1905078a3412e9851e6e5757099ab74478a
parent1e1aa83c61020c2d5eda967721bb7f3972eb1a77 (diff)
downloadzsh-16dfbfa8f58859766443c41bbbb17be53768b492.tar.gz
zsh-16dfbfa8f58859766443c41bbbb17be53768b492.tar.xz
zsh-16dfbfa8f58859766443c41bbbb17be53768b492.zip
Bring various .distfiles up to date and merge any extra completions onto 4.2 branch.
-rw-r--r--Completion/Unix/Command/_cvs14
-rw-r--r--Completion/Unix/Type/_mailboxes198
2 files changed, 204 insertions, 8 deletions
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 "$@"