python-novaclient/tools/nova.bash_completion
Rick Harris f196ed0176 Fix tab-completion of --flags under OS X
--flags were not tab-completing under OS X. This was due to the whitespace
collapsing regular expression using the '+' token (meaning one-or-more), which
isn't supported in OS X's version of sed.

Using the more portable '  *' instead of '[  ]+' fixes this.

Additional cleanups

* Remove unecessary embedding of tabs in the file (nova bash-complete doesn't
  emit tabs, so the regular expressions don't have to handle them)

* Restore logic to exclude -h from tab-completion (was lost in last
  tab-completion cleanup)

* Add similar exclude logic for -i

Fixes bug 1266667

Change-Id: I7e1fe8382d9b5295d0bbc1cde2b89550d5a4e21c
2014-01-07 01:51:58 -06:00

28 lines
885 B
Plaintext

_nova_opts="" # lazy init
_nova_flags="" # lazy init
_nova_opts_exp="" # lazy init
_nova()
{
local cur prev nbc cflags
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [ "x$_nova_opts" == "x" ] ; then
nbc="`nova bash-completion | sed -e "s/ *-h */ /" -e "s/ *-i */ /"`"
_nova_opts="`echo "$nbc" | sed -e "s/--[a-z0-9_-]*//g" -e "s/ */ /g"`"
_nova_flags="`echo " $nbc" | sed -e "s/ [^-][^-][a-z0-9_-]*//g" -e "s/ */ /g"`"
_nova_opts_exp="`echo "$_nova_opts" | tr ' ' '|'`"
fi
if [[ " ${COMP_WORDS[@]} " =~ " "($_nova_opts_exp)" " && "$prev" != "help" ]] ; then
COMPLETION_CACHE=~/.novaclient/*/*-cache
cflags="$_nova_flags "$(cat $COMPLETION_CACHE 2> /dev/null | tr '\n' ' ')
COMPREPLY=($(compgen -W "${cflags}" -- ${cur}))
else
COMPREPLY=($(compgen -W "${_nova_opts}" -- ${cur}))
fi
return 0
}
complete -F _nova nova