Proof-of-concept external completions

This commit is contained in:
Sam Stephenson 2011-09-13 10:13:27 -05:00
parent eefd5ea47d
commit 6da85246c6
3 changed files with 30 additions and 23 deletions

View file

@ -1,29 +1,14 @@
_rbenv_commands() {
COMPREPLY=()
local cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $( compgen -W "$(rbenv commands)" -- $cur ) )
}
_rbenv_versions() {
COMPREPLY=()
local cur="${COMP_WORDS[COMP_CWORD]}"
local versions="$(echo system; rbenv versions --bare)"
COMPREPLY=( $( compgen -W "$versions" -- $cur ) )
}
_rbenv() {
COMPREPLY=()
local cur="${COMP_WORDS[COMP_CWORD]}"
local prev="${COMP_WORDS[COMP_CWORD-1]}"
local word="${COMP_WORDS[COMP_CWORD]}"
case "$prev" in
set-* | global | local | shell | prefix )
_rbenv_versions
;;
* )
_rbenv_commands
;;
esac
if [ "$COMP_CWORD" -eq 1 ]; then
COMPREPLY=( $(compgen -W "$(rbenv commands)" -- "$word") )
else
local command="${COMP_WORDS[1]}"
local completions="$(rbenv completions "$command")"
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
fi
}
complete -F _rbenv rbenv

15
libexec/rbenv-completions Executable file
View file

@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x
COMMAND="$1"
if [ -z "$COMMAND" ]; then
echo "usage: rbenv completions COMMAND [arg1 arg2...]" >&2
exit 1
fi
COMMAND_PATH="$(command -v "rbenv-$COMMAND")"
if grep -i "^# provide rbenv completions" "$COMMAND_PATH" >/dev/null; then
shift
exec "$COMMAND_PATH" --complete "$@"
fi

View file

@ -2,6 +2,13 @@
set -e
[ -n "$RBENV_DEBUG" ] && set -x
# Provide rbenv completions
if [ "$1" = "--complete" ]; then
shift
echo system
exec rbenv-versions --bare
fi
RBENV_VERSION="$1"
RBENV_VERSION_FILE=".rbenv-version"