diff options
author | antoniotrkdz <antoniotrkdz@gmail.com> | 2020-04-04 00:15:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-03 15:15:53 -0700 |
commit | 93c14f844ee33e4d47ae07688f0e5ca7219df7de (patch) | |
tree | 50422afe25476ac0e83c79ae8dd69fb2466417f2 | |
parent | d9ea18d3a0f93c7990bc5e7df76daf3e608ae3d9 (diff) |
pgcli bash completion script (#892)
This file is a bash completion script for pgcli.
It allows to <tab> complete database names, users and hosts, plus showing the other available options when calling pgcli atthe terminal prompt.
In order to work it steals a couple of functions from psql, which is the postgres CLI client installed by default.
It is intended to be packaged with the debian package and to be copied on /usr/share/bash-completion/completions/pgcli (filename changes for consistency) upon installation of the package.
Please make the debian package mantainer aware of it and include it in the relevant section of the installation scripts/package.
I hope it is useful.
-rw-r--r-- | pgcli-completion.bash | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/pgcli-completion.bash b/pgcli-completion.bash new file mode 100644 index 00000000..3549b561 --- /dev/null +++ b/pgcli-completion.bash @@ -0,0 +1,61 @@ +_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 -AtqwlF $'\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 -Atqwc 'select usename from pg_user' \ + template1 2>/dev/null )" -- "$cur" ) ) + [[ ${#COMPREPLY[@]} -eq 0 ]] && COMPREPLY=( $( compgen -u -- "$cur" ) ) +} + +_pgcli() +{ + local cur prev words cword + _init_completion -s || return + + case $prev in + -h|--host) + _known_hosts_real "$cur" + return 0 + ;; + -U|--user) + _pg_users + return 0 + ;; + -d|--dbname) + _pg_databases + return 0 + ;; + --help|-v|--version|-p|--port|-R|--row-limit) + # all other arguments are noop with these + return 0 + ;; + esac + + case "$cur" in + --*) + # return list of available options + COMPREPLY=( $( compgen -W '--host --port --user --password --no-password + --single-connection --version --dbname --pgclirc --dsn + --row-limit --help' -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + return 0 + ;; + -) + # only complete long options + compopt -o nospace + COMPREPLY=( -- ) + return 0 + ;; + *) + # return list of available databases + _pg_databases + esac +} && +complete -F _pgcli pgcli |