diff --git a/AUTHORS b/AUTHORS index 4bbaba26..97d972fb 100644 --- a/AUTHORS +++ b/AUTHORS @@ -138,6 +138,7 @@ Contributors: * Mathieu Dupuy (deronnax) * Chris Novakovic * Josh Lynch (josh-lynch) + * Fabio (3ximus) Creator: -------- diff --git a/changelog.rst b/changelog.rst index 62c1faea..304251bd 100644 --- a/changelog.rst +++ b/changelog.rst @@ -5,6 +5,7 @@ Features -------- * Add a `--ping` command line option; allows pgcli to replace `pg_isready` * Changed the packaging metadata from setup.py to pyproject.toml +* Add bash completion for services defined in the service file `~/.pg_service.conf` Bug fixes: ---------- diff --git a/pgcli-completion.bash b/pgcli-completion.bash index 3549b561..620563d2 100644 --- a/pgcli-completion.bash +++ b/pgcli-completion.bash @@ -3,9 +3,9 @@ _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" ) ) + awk 'NF > 1 { print $1 }' )" -- "$cur" ) ) } - + _pg_users() { # -w was introduced in 8.4, https://launchpad.net/bugs/164772 @@ -13,12 +13,23 @@ _pg_users() template1 2>/dev/null )" -- "$cur" ) ) [[ ${#COMPREPLY[@]} -eq 0 ]] && COMPREPLY=( $( compgen -u -- "$cur" ) ) } - + +_pg_services() +{ + # return list of available services + local services + if [[ -f "$HOME/.pg_service.conf" ]]; then + services=$(grep -oP '(?<=^\[).*?(?=\])' "$HOME/.pg_service.conf") + fi + local suffix="${cur#*=}" + COMPREPLY=( $(compgen -W "$services" -- "$suffix") ) +} + _pgcli() { local cur prev words cword _init_completion -s || return - + case $prev in -h|--host) _known_hosts_real "$cur" @@ -39,23 +50,27 @@ _pgcli() 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 - ;; - *) + service=*) + _pg_services + return 0 + ;; + --*) + # 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 + _pg_databases esac -} && +} && complete -F _pgcli pgcli