# Debian GNU/Linux nmh (1) completion.
# Copyright 2003 "Wade Richards" <wade@wabyn.net>
# Permission granted to redistribute under the BSD license

have show &&
_nmh()
{
    # args: command comp-word prev-word
    local command current prev folder origfolder i orig_opts

    COMPREPLY=()
    current=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}
    command=$1

    orig_opts=$(shopt -p extglob) 
    shopt -s extglob

    # Get the folder, if specified
    for (( i=0; i < ${#COMP_WORDS}-1; i++ ))
    do
        case "${COMP_WORDS[i]}" in
        \++([a-zA-Z_]) )
            folder=${COMP_WORDS[i]} 
            origfolder=$( folder -f )
            ;;
        esac
    done

    case $current in 
    -* ) 
        # Command-line switches for the most common commands.
        case $command in
        ali ) 
            # no sequences or messages
            options=(-alias -list -nolist -normalize -nonormalize -user
                    -nouser -version -help)
            ;;
        burst ) 
            options=(-inplace -noinplace -quiet -noquiet -verbose
                    -noverbose -version -help)
            ;;
        comp )
            options=(-form -use -nouse -file -draftfolder -draftmessage
                    -nodraftfolder -editor -noedit -whatnowproc -nowhatnowproc
                    -version -help )
           ;; 
        flist* )
            options=(-sequence -all -noall -showzero -noshowzero
                    -recurse -norecurse -fast -nofast -alpha -noalpha -version
                    -help)
            ;;
        folder* )
            options=(-all -noall -create -nocreate -fast -nofast -header
                    -noheader -recurse -norecurse -total -nototal -list -nolist
                    -push -pop -pack -nopack -print -verbose -noverbose -version
                    -help)
            ;;
        forw )
            options=(-annotate -noannotate -form -format -noformat
                    -filter -inplace -noinplace -mime -nomime -draftfolder
                    -draftmessage -nodraftfolder -editor -noedit -whatnowproc
                    -nowhatnowproc -dashstuffing -nodashstuffing -build -file
                    -version -help)
            ;;
        inc )
            options=(-audit -noaudit -changecur -nochangecur -form -format
                    -file -silent -nosilent -truncate -notruncate -width -host
                    -user -pack -nopack -apop -noapop -kpop -sasl -saslmech -snoop
                    -version -help)
            ;;
        mark )
            options=(-sequence -add -delete -list -public -nopublic
                    -zero -nozero -version -help)
            ;;
        next )
            options=(-showmimeproc -header -noheader -checkmime
                    -nocheckmime -version -help)
            ;;
        packf )
            options=(-file -mbox -mmdf -version -help)
            ;;
        pick )
            options=(-and -or -not -lbrace -rbrace --component -cc
                    -date -from -search -subject -to -after -before -datefield
                    -sequence -public -nopublic -zero -nozero -list -nolist
                    -version -help)
            ;;
        prev )
            options=(-showproc -showmimeproc -header -noheader -checkmime
                    -nocheckmime -version -help)
            ;;
        refile )
            options=(-draft -link -nolink -preserve -nopreserve -unlink
                    -nounlink -src -file -rmmproc -normmproc -version -help)
            ;;
        repl )
            options=(-annotate -noannotate -group -nogroup -cc
                    -nocc -query -noquery -form -format -noformat -filter
                    -inplace -noinplace -mime -nomime -fcc -width -draftfolder
                    -draftmessage -nodraftfolder -editor -noedit -whatnowproc
                    -nowhatnowproc -build -file -version -help)
            ;;
        rmf )
            options=(-interactive -nointeractive -version -help)
            ;;
        rmm )
            options=(-link -nolink -version -help)
            ;;
        scan )
            options=(-clear -noclear -form -format -header -noheader
                    -width -reverse -noreverse -file -version -help )
            ;;
        show )
            options=(-draft -showproc -showmimeproc -header -noheader
                    -checkmime -nocheckmime -version -help)
            ;;
        sortm )
            options=(-datefield -textfield -notextfield -limit -nolimit
                    -verbose -noverbose -version -help)
            ;;
        whom )
            options=(-alias -check -nocheck -draft -draftfolder
                    -draftmessage -nodraftfolder -version -help)
            ;;
        * )
            options=(-help -version -seq)
            ;;
        esac
        ;;

    +* )
        # Folders
        options=( $( folder -all -r -fast | grep -v "^\." | sed "s/^/+/" ) )
        ;;

    +([0-9a-z])-* )
        # Partial range
        start=${current/%-*/}
        options=( $( scan $folder -format "%(msg)" "${start}-last" ) first prev cur next last )
        options=( ${options[@]//#/${start}-} )
        ;;

    +([0-9]) )
        # Message number, or start of range
        options=( $( scan $folder -format "%(msg)" ) first prev cur next last )
        options=( ${options[@]} ${options[@]//%/-} )
        ;;

    [fpcnlu]* )
        # special message aliases
        options=( first prev cur next last unseen )
        ;;

        # What about sequences?  I can't quite see how to get the list of possible sequences, so I
        # guess the user will have to ty                                                                                                                                                                                                                                                                                                                                                                                                                                                                