# Mailman completion by Guillaume Rousse <rousse@ccr.jussieu.fr>
#
# $Id: mailman,v 1.1 2004/03/30 23:05:34 ianmacd Exp $
#
_mailman_lists()
{
	COMPREPLY=( $( list_lists -b | grep "^$cur") )
}

_add_members()
{
	local cur prev

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

	case "$prev" in
		-@(r|d|-regular-members-file=|-digest-members-file=))
			_filedir
			return 0
			;;
		-@(w|a|-welcome-msg=|-admin-notify=))
			COMPREPLY=( $( compgen -W 'y n' -- $cur) )
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--regular-members-file= -r \
			--digest-members-file= -d --welcome-msg= -w \
			--admin-notify= -a --help -h' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _add_members add_members

_remove_members()
{

	local cur prev

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

	case "$prev" in
		-@(f|-file=))
			_filedir
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--file= -f --all -a \
			--fromall --nouserack -n --noadminack -N \
			--help -h' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _remove_members remove_members

_find_member()
{

	local cur prev

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

	case "$prev" in
		-@(l|x|-listname=|-exclude=))
			_mailman_lists
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-l --listname= -x \
			--exclude= --owners -w --help -h' -- $cur ) )
	fi

}
complete -F _find_member find_member

_clone_member()
{

	local cur prev

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

	case "$prev" in
		-@(l|-listname=))
			_mailman_lists
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-l --listname= --remove -r \
		--admin -a --quiet -q --nomodify -n --help -h' -- $cur ) )
	fi

}
complete -F _clone_member clone_member

_sync_members()
{
	local cur prev

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

	case "$prev" in
		-@(w|g|d|--welcome-msg=|-goodbye-msg|-digest=))
			COMPREPLY=( $( compgen -W 'y n' -- $cur) )
			return 0
			;;
		-@(d|-file))
			_filedir
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--no-change -n --welcome-msg= -w \
			--goodbye-msg= -g --digest= -d --notifyadmin= -a \
			-f --file -h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _sync_members sync_members

_list_lists()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --advertised \
			--virtual-host-overview= -V -b --bare \
			-h --help' -- $cur ) )
	fi

}
complete -F _list_lists list_lists

_unshunt()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-h --help' -- $cur ) )
	else
		_filedir -d
	fi

}
complete -F _unshunt unshunt

_list_admins()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--all-vhost= -v \
			--all -a -h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _list_admins list_admins

_list_owners()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-w --with-listnames \
			-m --moderators -h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _list_owners list_owners

_list_members()
{
	local cur prev

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

	case "$prev" in
		-@(o|-output))
			_filedir
			return 0
			;;
		-@(d|-digest=))
			COMPREPLY=( $( compgen -W 'mime plain' -- $cur) )
			return 0
			;;
		-@(n|-nomail=))
			COMPREPLY=( $( compgen -W 'byadmin byuser bybounce unknown' -- $cur) )
			return 0
			;;
	esac


	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--output -o --regular -r \
			--digest= -d --nomail= -n --fullnames -f \
			--preserve -p -h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _list_members list_members

_change_pw()
{
	local cur prev

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

	case "$prev" in
		-@(l|-listname=))
			_mailman_lists
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-a --all --domain= -d --listname= -l \
			--password= -p --quiet -q -h --help' -- $cur ) )
	fi

}
complete -F _change_pw change_pw

_withlist()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-l --lock -i --interactive \
			-r --run -a --all -q --quiet -h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _withlist withlist

_newlist()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-l --language -q --quiet -h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _newlist newlist

_rmlist()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--archives -a \
			-h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _rmlist rmlist

_config_list()
{
	local cur prev

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

	case "$prev" in
		-@(i|o|-inputfile|-outputfile))
			_filedir
			return 0
			;;
	esac


	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--inputfile -i --outputfile -o \
		--checkonly -c --verbose -v -h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _config_list $filenames config_list

_arch()
{
	local cur prev

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

	case "$prev" in
		-@(w|g|d|--welcome-msg=|-goodbye-msg|-digest=))
			COMPREPLY=( $( compgen -W 'y n' -- $cur) )
			return 0
			;;
		-@(d|-file))
			_filedir
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--wipe -s --start= -e --end= \
			-q --quiet -h --help' -- $cur ) )
	else
		args=$COMP_CWORD
		for (( i=1; i < COMP_CWORD; i++ )); do
			if [[ "${COMP_WORDS[i]}" == -* ]]; then
				args=$(($args-1))
			fi
		done
		case $args in
			1)
				_mailman_lists
				;;
			2)	
				_filedir
				;;
		esac
	fi

}
complete -F _arch $filenames arch

_cleanarch()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-s --status -n --dry-run \
			-q --quiet -h --help' -- $cur ) )
	fi

}
complete -F _cleanarch cleanarch

_inject()
{
	local cur prev

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

	case "$prev" in
		-@(l|-listname=))
			_mailman_lists
			return 0
			;;
	esac

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-l --listname= -q --queue= \
			-h --help' -- $cur ) )
	else
		_filedir
	fi

}
complete -F _inject $filenames inject

_dumpdb()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--marshal -m --pickle -p --noprint -n -h --help' -- $cur ) )
	else
		_filedir
	fi

}
complete -F _dumpdb $filenames dumpdb

_check_db()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '--all -a --verbose -v \
			-h --help' -- $cur ) )
	else
		_mailman_lists
	fi

}
complete -F _check_db check_db

_check_perms()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-f -v -h' -- $cur ) )
	fi

}
complete -F _check_perms check_perms

_genaliases()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-q --quiet -h --help' -- $cur ) )
	fi

}
complete -F _genaliases genaliases

_mmsitepass()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-c --listcreator -h --help' -- $cur ) )
	fi

}
complete -F _mmsitepass mmsitepass

_qrunner()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-r --runner= --once -o \
			-l --list -v --verbose -s --subproc -h --help' -- $cur ) )
	fi

}
complete -F _qrunner qrunner

_mailmanctl()
{
	local cur

	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}

	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-n --no-restart -u --run-as-user \
			-s --stale-lock-cleanup --quiet -q -h --help' -- $cur ) )
	else
		COMPREPLY=( $( compgen -W 'start stop restart reopen' -- $cur ) )
	fi

}
complete -F _mailmanctl mailmanctl
