_chcpu_module()
{
	local cur prev OPTS
	COMPREPLY=()
	cur="${COMP_WORDS[COMP_CWORD]}"
	prev="${COMP_WORDS[COMP_CWORD-1]}"
	case $prev in
		'-e'|'--enable')
			local prefix realcur CPULIST_ALL CPULIST
			realcur="${cur##*,}"
			prefix="${cur%$realcur}"
			CPULIST_ALL=$(sed 's/^/{/; s/-/../g; s/,/} {/g; s/$/}/' /sys/devices/system/cpu/offline)
			for WORD in $(eval echo $CPULIST_ALL); do
				if ! [[ $prefix == *"$WORD"* ]]; then
					CPULIST="$WORD ${CPULIST:-""}"
				fi
			done
			compopt -o nospace
			COMPREPLY=( $(compgen -P "$prefix" -W "$CPULIST" -S ',' -- $realcur) )
			return 0
			;;
		'-d'|'--disable')
			local prefix realcur CPULIST_ALL CPULIST
			realcur="${cur##*,}"
			prefix="${cur%$realcur}"
			CPULIST_ALL=$(sed 's/^/{/; s/-/../g; s/,/} {/g; s/$/}/' /sys/devices/system/cpu/online)
			for WORD in $(eval echo $CPULIST_ALL); do
				if ! [[ $prefix == *"$WORD"* ]]; then
					CPULIST="$WORD ${CPULIST:-""}"
				fi
			done
			compopt -o nospace
			COMPREPLY=( $(compgen -P "$prefix" -W "$CPULIST" -S ',' -- $realcur) )
			return 0
			;;
		'-c'|'--configure'|'-g'|'--deconfigure')
			COMPREPLY=( $(compgen -W "cpu-list" -- $cur) )
			return 0
			;;
		'-p'|'--dispatch')
			COMPREPLY=( $(compgen -W "horizontal vertical" -- $cur) )
			return 0
			;;
		'-h'|'--help'|'-V'|'--version')
			return 0
			;;
	esac
	OPTS="--help
		--enable
		--disable
		--configure
		--deconfigure
		--dispatch
		--rescan
		--version"
	COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
	return 0
}
complete -F _chcpu_module chcpu
