diff --git a/contrib/bash-completion b/contrib/bash-completion new file mode 100644 index 000000000..fa0fa9b89 --- /dev/null +++ b/contrib/bash-completion @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +_dokku_complete_goals_fetch() { + dokku --quiet help --all | awk '/^ /{ print $1 }' | sort > "/var/cache/dokku-completion" +} + +_dokku_complete_verify() { + declare desc="shows bash completion" + declare COMMAND="$1" + local COMMANDS="" + + if [[ ! -f "/var/cache/dokku-completion" ]] || [[ -s "/var/cache/dokku-completion" ]]; then + _dokku_complete_goals_fetch + fi + + _dokku_complete_goals=$(cat "/var/cache/dokku-completion") + + while read -r fn; do + if [[ -z "$COMMAND" ]] || [[ "$fn" == $COMMAND* ]]; then + COMMANDS="${COMMANDS};${fn}" + fi + done <<< "$_dokku_complete_goals" + + echo "${COMMANDS#";"}" +} + +have dokku && +_dokku_complete() { + local cur prev + _get_comp_words_by_ref -n : cur + opts=$(_dokku_complete_verify "${cur}") + COMPREPLY=($(IFS=";" compgen -W "$opts" -- "$cur")) + __ltrim_colon_completions "$cur" +} && +complete -F _dokku_complete dokku + +if [[ ! -f "/var/cache/dokku-completion" ]] || [[ -s "/var/cache/dokku-completion" ]]; then + have dokku && export -f _dokku_complete_goals_fetch && nohup bash -c _dokku_complete_goals_fetch >/dev/null 2>&1 & +fi diff --git a/deb.mk b/deb.mk index 74061f2ba..9332c5a02 100644 --- a/deb.mk +++ b/deb.mk @@ -117,6 +117,7 @@ deb-dokku: mkdir -p /tmp/tmp /tmp/build cp -r debian /tmp/build/DEBIAN + mkdir -p /tmp/build/etc/bash_completion.d mkdir -p /tmp/build/usr/bin mkdir -p /tmp/build/usr/share/doc/dokku mkdir -p /tmp/build/usr/share/dokku/contrib @@ -126,6 +127,7 @@ deb-dokku: cp dokku /tmp/build/usr/bin cp LICENSE /tmp/build/usr/share/doc/dokku/copyright + cp contrib/bash-completion /tmp/build/etc/bash_completion.d/dokku find . -name ".DS_Store" -depth -exec rm {} \; $(MAKE) go-build cp common.mk /tmp/build/var/lib/dokku/core-plugins/common.mk diff --git a/rpm.mk b/rpm.mk index ce819f239..083de3917 100644 --- a/rpm.mk +++ b/rpm.mk @@ -51,6 +51,7 @@ rpm-dokku: rm -rf /tmp/tmp /tmp/build dokku_*_$(RPM_ARCHITECTURE).rpm mkdir -p /tmp/tmp /tmp/build + mkdir -p /tmp/build/etc/bash_completion.d mkdir -p /tmp/build/usr/bin mkdir -p /tmp/build/usr/share/doc/dokku mkdir -p /tmp/build/usr/share/dokku/contrib @@ -60,6 +61,7 @@ rpm-dokku: cp dokku /tmp/build/usr/bin cp LICENSE /tmp/build/usr/share/doc/dokku/copyright + cp contrib/bash-completion /tmp/build/etc/bash_completion.d/dokku find . -name ".DS_Store" -depth -exec rm {} \; $(MAKE) go-build cp common.mk /tmp/build/var/lib/dokku/core-plugins/common.mk