#####
#From: ian@linuxcare.com (Ian Macdonald)
#Newsgroups: comp.unix.shell
#Subject: More bash 2.04 completions
#Date: 12 Aug 2000 09:53:40 GMT
#Organization: Linuxcare, Inc.
#Lines: 274
#Message-ID: <slrn8pa7l2.jgm.ian@lovelorn.linuxcare.com>
#Reply-To: ian@linuxcare.com
#####

# Turn on extended globbing
shopt -s extglob

# cvs(1) completion
#
_cvs ()
{
	local cur prev

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

	if [ $COMP_CWORD -eq 1 ] || [ "${prev:0:1}" = "-" ]; then
		COMPREPLY=( $( compgen -W 'add admin checkout commit diff \
		export history import log rdiff release remove rtag status \
		tag update' $cur ))
	else
		COMPREPLY=( $( compgen -f $cur ))
	fi
	return 0
}
complete -F _cvs cvs

# rpm(8) completion. This isn't exhaustive yet, but still provides
# quite a lot of functionality.
# 
_rpm()
{
	dashify()
	{
		local i

		for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
			if [ ${#COMPREPLY[i]} -le 2 ]; then
				COMPREPLY[i]=-${COMPREPLY[i]}
			else
				COMPREPLY[i]=--${COMPREPLY[i]}
			fi
		done
	}

	local cur cur_nodash prev

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

	if [ $COMP_CWORD = 1 ]; then
		# first parameter on line
		case "$cur" in
		-b*)
			COMPREPLY=( $( compgen -W 'ba bb bc bi bl bp bs' \
				       $cur_nodash ) )
			dashify
			return 0
			;;
		-t*)
			COMPREPLY=( $( compgen -W 'ta tb tc ti tl tp ts' \
				       $cur_nodash ) )
			dashify
			return 0
			;;
		--*)
			COMPREPLY=( $( compgen -W 'help version initdb \
			checksig recompile rebuild resign addsign rebuilddb \
			showrc setperms setgids' ${cur_nodash#-} ) )
			dashify;
			return 0
			;;
		*)
			COMPREPLY=( $( compgen -W 'b e F i q t U V' \
				       $cur_nodash ) )
			dashify
			return 0
			;;
		esac
	fi

	case "${COMP_WORDS[1]}" in
	-[iFU]*)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'percent force test replacepkgs \
		replacefiles root excludedocs includedocs noscripts rcfile \
		ignorearch dbpath prefix ignoreos nodeps allfiles ftpproxy \
		ftpport justdb httpproxy httpport noorder relocate badreloc \
		notriggers excludepath ignoresize oldpackage' ${cur_nodash#-} ))
		dashify;
		# return if $cur is an option
		[ "${cur:0:1}" = "-" ] && return 0
		# add a list of RPMS to possible completions
		COMPREPLY=( ${COMPREPLY[@]} $( compgen -G $cur\*.rpm ) )
		return 0
		;;
	-qp*)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'scripts root rcfile whatprovides \
		whatrequires requires triggeredby ftpport ftpproxy httpproxy \
		httpport provides triggers dump changelog dbpath filesbypkg' \
		${cur_nodash#-} ) )
		dashify;
		# return if $cur is an option
		[ "${cur:0:1}" = "-" ] && return 0
		# add a list of RPMS to possible completions
		COMPREPLY=( ${COMPREPLY[@]} $( compgen -G $cur\*.rpm ) )
		return 0
		;;
	-*f)
		# standard filename completion
		COMPREPLY=( $( compgen -f $cur ) )
		return 0
		;;
	-e)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'allmatches noscripts notriggers \
		nodeps test' ${cur_nodash#-} ) )
		dashify;
		# return if $cur is an option
		[ "${cur:0:1}" = "-" ] && return 0
		# complete on basename of installed RPMs
		COMPREPLY=( $( rpm -qa | \
		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
		return 0
		;;
	-qa*)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'scripts root rcfile whatprovides \
		whatrequires requires triggeredby ftpport ftpproxy httpproxy \
		httpport provides triggers dump changelog dbpath specfile \
		querybynumber last filesbypkg' ${cur_nodash#-} ) )
		dashify;
		return 0
		;;
	-q*)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'scripts root rcfile whatprovides \
		whatrequires requires triggeredby ftpport ftpproxy httpproxy \
		httpport provides triggers dump changelog dbpath specfile \
		querybynumber last filesbypkg' ${cur_nodash#-} ) )
		dashify;
		# return if $cur is an option
		[ "${cur:0:1}" = "-" ] && return 0
		# add a list of RPMS to possible completions
		COMPREPLY=( ${COMPREPLY[@]} $( rpm -qa | \
		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
		return 0
		;;
	-[Vy]*)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'root rcfile dbpath nodeps nofiles \
		noscripts nomd5 nopgp' ${cur_nodash#-} ) )
		dashify;
		# return if $cur is an option
		[ "${cur:0:1}" = "-" ] && return 0
		# add a list of RPMS to possible completions
		COMPREPLY=( ${COMPREPLY[@]} $( rpm -qa | \
		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
		return 0
		;;
	-b*)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'short-circuit timecheck clean \
		rmsource test sign buildroot target buildarch buildos' \
		${cur_nodash#-} ) )
		dashify;
		# return if $cur is an option
		[ "${cur:0:1}" = "-" ] && return 0
		# complete on .spec files
		COMPREPLY=( $( compgen -G $cur\*.spec ) )
		return 0
		;;
	-t*)
		# complete on list of relevant options
		COMPREPLY=( $( compgen -W 'short-circuit timecheck clean \
		rmsource test sign buildroot target buildarch buildos' \
		${cur_nodash#-} ) )
		dashify;
		# return if $cur is an option
		[ "${cur:0:1}" = "-" ] && return 0
		# complete on .tar.gz files
		COMPREPLY=( $( compgen -G $cur\*.tar.gz ) )
		return 0
		;;
	--re@(build|compile))
		# complete on source RPMs
		COMPREPLY=( $( compgen -G $cur\*.src.rpm ) )
		return 0
		;;
	--@(checksig|@(re|add)sign))
		# complete on RPMs
		COMPREPLY=( $( compgen -G $cur\*.rpm ) )
		return 0
		;;
	--set@(perms|gids))
		# complete on installed RPMs
		COMPREPLY=( ${COMPREPLY[@]} $( rpm -qa | \
		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
		return 0
		;;
	esac
}
complete -F _rpm rpm

# chsh(1) completion
#
_chsh()
{
	local cur prev

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

	if [ "$prev" = "-s" ]; then
		COMPREPLY=( $( chsh -l | grep ^$cur ) )
	else
		COMPREPLY=( $( compgen -u $cur ) )
	fi
}
complete -F _chsh chsh

# chkconfig(8) completion
#
_chkconfig()
{
	local cur prev

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

	if [ $COMP_CWORD -eq 1 ]; then
		COMPREPLY=( $( compgen -W 'list add del level' $cur_nodash ) )
		for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
			COMPREPLY[i]=--${COMPREPLY[i]}
		done
		return 0
	fi

	if [ $COMP_CWORD -eq 4 ]; then
		COMPREPLY=( $( compgen -W 'on off reset' $cur ) )
		return 0
	fi

	case "$prev" in
	@([1-6]|--@(list|add|del)))
		COMPREPLY=( $( compgen -W "`(cd /etc/rc.d/init.d; echo *)`" \
			       $cur) )
		return 0
		;;
	--level)
		COMPREPLY=( $( compgen -W '1 2 3 4 5 6' $cur ) )
		return 0
		;;
	esac
}
complete -F _chkconfig chkconfig
###
