# 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 iter use cur cur=${COMP_WORDS[COMP_CWORD]} use="${@//\\ /___}" for iter in $use; do if [[ $iter =~ ^$cur ]]; then COMPREPLY+=($(printf "%q" "${iter//___/ }")) fi done } # Autocomplete by grepping file names. function _autocomplete_grep() { local IFS=$'\n' COMPREPLY=() local pattern="${1}" local candidates=$("$(ls | grep -E ${pattern})") _autocomplete ${candidates} } # 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 }