# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
# ex: ts=8 sw=8 noet filetype=sh
#
# bash completion for update-alternatives

have update-alternatives && {
_installed_alternatives()
{
	local admindir
	# find the admin dir
	for i in alternatives dpkg/alternatives rpm/alternatives; do
		[ -d /var/lib/$i ] && admindir=/var/lib/$i && break
	done
	for (( i=1; i < COMP_CWORD; i++ )); do
		if [[ "${COMP_WORDS[i]}" == --admindir ]]; then
			admindir=${COMP_WORDS[i+1]}
			break
		fi
	done
	COMPREPLY=( $( compgen -W '$( command ls $admindir )' -- $cur ) )
}

_update_alternatives()
{
	local cur prev mode args i

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

	case "$prev" in
	--@(altdir|admindir))
		_filedir -d
		return 0
		;;
	--@(help|version))
		return 0
		;;
	esac

	# find which mode to use and how many real args used so far
	for (( i=1; i < COMP_CWORD; i++ )); do
		if [[ "${COMP_WORDS[i]}" == --@(install|remove|auto|display|config|remove-all) ]]; then
			mode=${COMP_WORDS[i]}
			args=$(($COMP_CWORD - i))
			break
		fi
	done

	case $mode in
	--install)
		case $args in
		1)
			_filedir
			;;
		2)
			_installed_alternatives
			;;
		3)
			_filedir
			;;
		esac
		;;
	--remove)
		case $args in
		1)
			_installed_alternatives
			;;
		2)
			_filedir
			;;
		esac
		;;
	--auto)
		_installed_alternatives
		;;
	--remove-all)
		_installed_alternatives
		;;
	--display)
		_installed_alternatives
		;;
	--config)
		_installed_alternatives
		;;
	*)
		COMPREPLY=( $( compgen -W '--verbose --quiet --help --version \
			       --altdir --admindir' -- $cur ) \
			    $( compgen -W '--install --remove --auto --display \
			       --config' -- $cur ) )
	esac
}
complete -F _update_alternatives update-alternatives alternatives
}
