{ ... }: { 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 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 only first argument and the rest with files. function _autocomplete_first_ls() { 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 else COMPREPLY=( $(compgen -W "$(ls)" -- ''${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 } ''; }