# Simple completions for Bash builtins and POSIX utilities; more specific or # complex stuff goes in ~/.bash_completion.d, for possible dynamic loading # If COMP_WORDBREAKS has a value, strip all colons from it; this allows # completing filenames correctly, since a colon is not a shell metacharacter: # (E13) if [[ -n $COMP_WORDBREAKS ]] ; then COMP_WORDBREAKS=${COMP_WORDBREAKS//:} fi # If ~/.hosts exists, use that as the host completion file rather than # /etc/hosts, so I can populate the list myself if [[ -f $HOME/.hosts ]] ; then HOSTFILE=$HOME/.hosts fi # Aliases complete -A alias \ 'unalias' # Bash builtins complete -A builtin \ 'builtin' complete -A enabled \ 'disable' complete -A disabled \ 'enable' # Bash options complete -A setopt \ 'set' # Commands complete -A command \ 'alias' \ 'command' \ 'complete' \ 'compopt' \ 'coproc' \ 'do' \ 'exec' \ 'if' \ 'hash' \ 'then' \ 'time' \ 'type' \ 'until' \ 'while' # Directories complete -A directory \ 'cd' \ 'pushd' \ 'mkdir' \ 'rmdir' # Functions and variables complete -A function \ 'function' complete -A function -A variable \ 'declare' \ 'export' \ 'local' \ 'readonly' \ 'typeset' \ 'unset' complete -A variable \ 'for' \ 'getopts' \ 'let' \ 'read' \ 'select' # Help topics complete -A helptopic \ 'help' # Jobspecs complete -P '%' -A job \ 'disown' \ 'fg' \ 'jobs' complete -P '%' -A stopped \ 'bg' # Readline bindings complete -A binding \ 'bind' # Shell options complete -A shopt \ 'shopt' # Signal names complete -A signal \ 'trap' # The `mapfile` builtin in Bash >= 4.0 if ((BASH_VERSINFO[0] >= 4)) ; then complete -A arrayvar \ 'mapfile' \ 'readarray' fi # If we have dynamic completion loading (Bash>=4.0), use it if ((BASH_VERSINFO[0] >= 4)) ; then # Handler tries to load appropriate completion for commands _completion_loader() { [[ -n $1 ]] || return local compspec compspec=$HOME/.bash_completion.d/$1.bash [[ -f $compspec ]] || return source "$compspec" >/dev/null 2>&1 && return 124 } complete -D -F _completion_loader -o bashdefault -o default # If not, load all of the completions up now else for sh in "$HOME"/.bash_completion.d/*.bash ; do [[ -e $sh ]] && source "$sh" done unset -v sh fi