Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: Improved _mailboxes
- X-seq: zsh-workers 9812
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: PATCH: Improved _mailboxes
- Date: Mon, 21 Feb 2000 10:34:22 +0000
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
This works pretty well, following Sven's most recent patches to _multi_parts.
It now can handle mailboxes for elm, mail, mh, mutt, pine, and zmail.
Things I like it to do that it doesn't yet:
(1) The default style should be to make the all-files group be alternate
completions, i.e., not shown unless the -default- group is empty.
(2) The all-files group for pine (currently commented out) should contain
only full paths, not relative ones. How does one accomplish that?
(3) I'm sometimes offered a blank completion -- an empty slot at the top
of the list of all completions. I don't know where that comes from;
it shouldn't be there. Quoting problem somewhere?
And of course, I haven't yet written any actual completion functions to
call this one; it's used only from _mutt, so far.
Index: Completion/User/_mailboxes
===================================================================
@@ -5,43 +5,89 @@
# This is still needlessly mutt-biased and should be fixed.
-local -U muttboxes mboxes dirboxes MHboxes maildirboxes
+local -U dirboxes
local i j expl muttrc="${muttrc:-~/.muttrc}"
local pinedirectory="${pinedirectory:-~/mail}"
local maildirectory="${maildirectory:-~/Mail}"
if (( ! $+_mailbox_cache )) then
- [[ -f ${~muttrc:-.} ]] && muttboxes=( ${$(grep mailboxes ${~muttrc})[2,-1]} )
+ typeset -U -g _mailbox_cache
+ typeset -U -g _maildir_cache _mbox_cache _mh_cache _mutt_cache _pine_cache
- mboxes=( ${~maildirectory}/*(^/) ${~pinedirectory}/**/*(.) )
+ [[ -f ${~muttrc:-.} ]] &&
+ _mutt_cache=( ${$(grep mailboxes ${~muttrc})[2,-1]} )
+
+ _mbox_cache=( ${~maildirectory}/*(^/) )
+ _pine_cache=( ${~pinedirectory}/**/*(.) )
+
dirboxes=( ${~maildirectory}/*(/) )
while (( $#dirboxes )); do
- i=$dirboxes[1]
+ i=${dirboxes[1]}
shift dirboxes
if [[ -d "$i/cur" ]]; then
- maildirboxes=( $maildirboxes $i )
+ _maildir_cache=( "${_maildir_cache[@]}" "$i" )
elif j=( $i/<1-> ) && [[ -n "$j" ]]; then
- MHboxes=( $MHboxes $i )
+ _mh_cache=( "${_mh_cache[@]}" "$i" )
else
- mboxes=( $mboxes $i/*(.) )
+ _mbox_cache=( "${_mbox_cache[@]}" "$i"/*(.) )
dirboxes=( $dirboxes $i/*(/) )
fi
done
- [[ -n "$muttboxes" || -d ~/.elm || -d ~/.mutt ]] &&
- _mailbox_cache=(\! \< \> $muttboxes)
+ [[ -n "$_mutt_cache" || -d ~/.elm || -d ~/.mutt ]] &&
+ _mailbox_cache=( \! \< \> )
[[ -n "$mailpath" ]] &&
- _mailbox_cache=($_mailbox_cache ${mailpath//\?*/})
+ _mailbox_cache=( "${_mailbox_cache[@]}" "${(@)mailpath%%\?*}" )
- _mailbox_cache=($_mailbox_cache $mboxes $maildirboxes $MHboxes)
+ _mailbox_cache=( "${_mailbox_cache[@]}" $MAIL )
fi
if _wanted files expl 'mailbox specification'; then
- if compset -P '+|-f+' || [[ $words[CURRENT-1] = -f ]]; then
- _files -W $maildirectory
+ local -U mbox_names
+ case "${curcontext}" in
+ (*:elm:*) # I've probably got this wrong, or at least incomplete
+ compadd "${expl[@]}" - \! \< \>
+ mbox_names=( "${_mbox_cache[@]}" "${_mailbox_cache[@]}" )
+ _multi_parts "${expl[@]}" / mbox_names;;
+ (*:mail:*)
+ if compset -P '+|-f+'; then
+ mbox_names=( "${(@)_mbox_cache#$~maildirectory/}" )
+ _multi_parts "${expl[@]}" / mbox_names
+ else
+ mbox_names=( +"${(@)^_mbox_cache#$~maildirectory/}" "${_mailbox_cache[@]}" )
+ _multi_parts "${expl[@]}" / mbox_names
+ _path_files -J all-files
+ fi;;
+ (*:mh:*) # I've probably got this wrong, or at least incomplete
+ (( $#_mh_cache )) && _multi_parts "${expl[@]}" / _mh_cache;;
+ (*:mutt:*)
+ mbox_names=( "${_mutt_cache[@]}" "${_mailbox_cache[@]}" "${_maildir_cache[@]}" )
+ compadd "${expl[@]}" - \! \< \>
+ _multi_parts "${expl[@]}" / mbox_names;;
+ (*:pine:*)
+ # Pine is like mail but with no leading `+' to disambiguate;
+ # any files not in $pinedirectory must be absolute paths.
+ mbox_names=( "${(@)_pine_cache#$~pinedirectory/}" "${_mbox_cache[@]}" )
+ _multi_parts "${expl[@]}" / mbox_names
+ # _path_files -J all-files -g '/*'
+ ;;
+ (*:(zmail|zmlite):*)
+ if compset -P '+|-f+'; then
+ mbox_names=( "${(@)_mbox_cache#$~maildirectory/}" )
+ _multi_parts "${expl[@]}" / mbox_names
else
- compadd "$@" "$expl[@]" - "$_mailbox_cache[@]"
+ compadd "${expl[@]}" - % \&
+ mbox_names=( +"${(@)^_mbox_cache#$~maildirectory/}"
+ "${_mailbox_cache[@]}" "${_mh_cache[@]}" )
+ _multi_parts "${expl[@]}" / mbox_names
+ _path_files -J all-files
fi
+ ;;
+ (*) # Some other program wants mailbox names? Use them all?
+ mbox_names=( "${_mailbox_cache[@]}" "${_mbox_cache[@]}"
+ "${_mh_cache[@]}" "${_mutt_cache[@]}" "${_pine_cache[@]}" )
+ _multi_parts "${expl[@]}" / mbox_names;;
+ esac
fi
Index: Completion/User/_mutt
===================================================================
@@ -8,7 +8,7 @@
'-b:BCC recipient:->userhost' \
'-c:CC recipient:->userhost' \
'-e:post-init configuration:' \
- '-f+:mailbox:_mailboxes' \
+ '-f+:mailbox: _mailboxes' \
'-F+:init file:_files' \
'-h+:help:' \
'-H+:draft file:_files' \
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author