diff options
Diffstat (limited to '')
-rw-r--r-- | completions/psql | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/completions/psql b/completions/psql new file mode 100644 index 0000000..4bc6049 --- /dev/null +++ b/completions/psql @@ -0,0 +1,188 @@ +# bash completion for Postgresql -*- shell-script -*- + +_pg_databases() +{ + # -w was introduced in 8.4, https://launchpad.net/bugs/164772 + # "Access privileges" in output may contain linefeeds, hence the NF > 1 + COMPREPLY=($(compgen -W "$(psql -XAtqwlF $'\t' 2>/dev/null | + awk 'NF > 1 { print $1 }')" -- "$cur")) +} + +_pg_users() +{ + # -w was introduced in 8.4, https://launchpad.net/bugs/164772 + COMPREPLY=($(compgen -W "$(psql -XAtqwc 'select usename from pg_user' \ + template1 2>/dev/null)" -- "$cur")) + ((${#COMPREPLY[@]} == 0)) && COMPREPLY=($(compgen -u -- "$cur")) +} + +# createdb(1) completion +# +_createdb() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + --host | -!(-*)h) + _known_hosts_real -- "$cur" + return + ;; + --username | --owner | -!(-*)[UO]) + _pg_users + return + ;; + --help | --version | --port | --tablespace | --encoding | --template | -!(-*)[pDET]) + return + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + else + _pg_databases + fi +} && + complete -F _createdb createdb + +# createuser(1) completion +# +_createuser() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + --help | --version | --port | --connection-limit | -!(-*)[pc]) + return + ;; + --host | -!(-*)h) + _known_hosts_real -- "$cur" + return + ;; + --username | -!(-*)U) + _pg_users + return + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + fi +} && + complete -F _createuser createuser + +# dropdb(1) completion +# +_dropdb() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + --host | -!(-*)h) + _known_hosts_real -- "$cur" + return + ;; + --username | -!(-*)U) + _pg_users + return + ;; + --help | --version) + return + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + else + _pg_databases + fi +} && + complete -F _dropdb dropdb + +# dropuser(1) completion +# +_dropuser() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + --help | --version | --port | -!(-*)p) + return + ;; + --host | -!(-*)h) + _known_hosts_real -- "$cur" + return + ;; + --username | -!(-*)U) + _pg_users + return + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + else + _pg_users + fi +} && + complete -F _dropuser dropuser + +# psql(1) completion +# +_psql() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + --host | -!(-*)h) + _known_hosts_real -- "$cur" + return + ;; + --username | -!(-*)U) + _pg_users + return + ;; + --dbname | -!(-*)d) + _pg_databases + return + ;; + --output | --file | --log-file | -!(-*)[ofL]) + _filedir + return + ;; + --help | --version | --command | --field-separator | --port | --pset | \ + --record-separator | --table-attr | --set | --variable | -!(-*)[?VcFpPRTv]) + return + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + # return list of available options + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + else + # return list of available databases + _pg_databases + fi +} && + complete -F _psql psql + +# ex: filetype=sh |