{ ... }: { text = '' # 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 } ''; }