* David T-G <[EMAIL PROTECTED]> [2002-07-05 00:08]:
> In tcsh, as discussed on the list quite a while back, one can
> construct a command to complete mutt folders as shown in the attached
> snippet (I watched the ideas come across and saved all of the various
> flavors, so I have more than just one line).
>
> Can the same thing be done in bash? I see that bash also has a
> complete command but the man pages are a little obtuse and I can't
> tell if such delightful magic is possible. I know that I sure miss it
> already, though!
Here's a simple bash function/complete pair that is a (good?) place to
begin. I've only been using bash's programmable completion for a few
weeks, and I'm still pretty new at it. The gist of it is, fill the
COMPREPLY array with the output of compgen; the trick is getting the
correct thing into COMPREPLY, of course.
There is a bug in here, somewhere; if you do mutt -f =mb<tab>, and have
a mailbox beginning with mb, or course, it ends up with two ='s at the
beginning. This doesn't happen if you define your lists with + and not
=, so there's probably something special about using = as a beginning
character.
Another fun thing this does is give a command-line arg summary unless
you are typing -f, in which case it gives you mailboxes. A good
improvement would be that -a<tab>, -i<tab>, -F<tab>, and -H<tab> give
you file completions, and -c<tab> and -b<tab> give you email address
completions from your ~/.mail_aliases file.
Be sure to set MBOXLIST and MUTT appropriately, BTW.
_mutt() {
local MBOXLIST="$HOME/.mutt/lists"
local MUTT=/usr/bin/mutt
local mboxes cur prev
mboxes=$(grep '^ *mailboxes' $MBOXLIST | sed -e "s/mailboxes//" | tr -d "\012")
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
if [[ "$prev" == -f ]]
then
COMPREPLY=( $(compgen -W "$mboxes" $cur) );
else
COMPREPLY=( $(compgen -W "$($MUTT -h | awk '/^ *\-/{printf "%s ", $1}')") )
fi
return 0;
}
complete -F _mutt -o default mutt
Good luck.
(darren)
--
It ain't those parts of the Bible that I can't understand that bother
me, it's the parts that I do understand.
-- Mark Twain