# Bash autocomplete.
# There are also options like -o nospace. see man for more info.
# Usage: _foo() { _autocomplete "{foo,bar}" } ; complete -F _foo foo
function _autocomplete() {
	local IFS=$'\n'
	local commands="${*}"
	
	COMPREPLY=()

	local cur="${COMP_WORDS[COMP_CWORD]}"
	local prev="${COMP_WORDS[COMP_CWORD-1]}"
	local command="${COMP_WORDS[0]}"

	COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
	return 0
}

# Autocomplete only first argument.
function _autocomplete_first() {
	local IFS=$'\n'
	local commands="${*}"

	COMPREPLY=()

	local cur="${COMP_WORDS[COMP_CWORD]}"
	local prev="${COMP_WORDS[COMP_CWORD-1]}"
	local command="${COMP_WORDS[0]}"

	if [[ "${prev}" = "${command}" ]]; then
		COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
		return 0
	fi
}

# Autocomplete by grepping file names.
function _autocomplete_grep() {
	local IFS=$'\n'
	COMPREPLY=()

	local pattern="${1}"
	local cur="${COMP_WORDS[COMP_CWORD]}"
	local prev="${COMP_WORDS[COMP_CWORD-1]}"
	local command="${COMP_WORDS[0]}"

	COMPREPLY=( $(compgen -W "$(ls | grep -E ${pattern})" -- ${cur}) )
	return 0
}

# Autocomplete nested program.
function _autocomplete_nested() {
	# local IFS=$'\n'
	local cur prev words cword split i
	_init_completion -s || return

	for ((i = 1; i <= cword; i++)); do
		if [[ ${words[i]} != -* ]]; then
			local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
			local root_command=${words[i]}
			_command_offset ${i}
			return
		fi
	done
}