Hey Ben, Peter, I did some hack to avoid setting the $COMP_WORDBREAKS (based on this link http://stackoverflow.com/questions/10528695/how-to-reset-comp-wordbreaks-without-effecting-other-completion-script ).
This patch breaks the unittest. Want to hear some feedback before fixing the tests. Thanks, Alex Wang, On Fri, Mar 13, 2015 at 4:57 PM, Alex Wang <al...@nicira.com> wrote: > Modifying $COMP_WORDBREAKS in completion script is not the recommended > as it is a global variable and the modification could affect the behavior > of other completion scripts. As a workaround, this commit uses the > _get_comp_words_by_ref which allows user to exclude characters out of > $COMP_WORDBREAKS and reassemble input command line. However, as a side > effect, the bash completion module cannot handle ':' and '=' correctly > in the resulting completions. Thusly, we need to remove those > completions. This will reduce the functionality of some fancy completions. > For example, COLUMN?:KEY=VALUE will not complete on KEY and VALUE. > > Signed-off-by: Alex Wang <al...@nicira.com> > --- > utilities/ovs-vsctl-bashcomp.bash | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/utilities/ovs-vsctl-bashcomp.bash > b/utilities/ovs-vsctl-bashcomp.bash > index e79c6a2..3db7165 100755 > --- a/utilities/ovs-vsctl-bashcomp.bash > +++ b/utilities/ovs-vsctl-bashcomp.bash > @@ -36,7 +36,7 @@ _OVS_VSCTL_COMMANDS="$(_ovs_vsctl --commands)" > > # This doesn't complete on short arguments, so it filters them out. > _OVS_VSCTL_OPTIONS="$(_ovs_vsctl --options | awk '/^--/ { print $0 }' \ > - | sed -e 's/\(.*\)=ARG/\1=/')" > + | sed -e 's/\(.*\)=ARG/\1/')" > IFS=$SAVE_IFS > > declare -A _OVS_VSCTL_PARSED_ARGS > @@ -358,7 +358,7 @@ _ovs_vsctl_complete_column_optkey_value () { > $_OVSDB_SERVER_LOCATION Open_vSwitch $table) > > result=$(printf "%s\n" "${columns}" \ > - | awk '/key.*value/ { print $1":"; next } > + | awk '/key.*value/ { print $1; next } > { print $1; next }' \ > | _ovs_vsctl_check_startswith_string "$1" | sort | uniq) > fi > @@ -627,7 +627,7 @@ _ovs_vsctl_process_messages () { > # status of the function _ovs_vsctl_complete_argument represents where > # it has determined that the next argument will be. > _ovs_vsctl_bashcomp () { > - local cur valid_globals cmd_args raw_cmd cmd_pos valid_globals > valid_opts > + local words cword valid_globals cmd_args raw_cmd cmd_pos > valid_globals valid_opts > local test="false" > > # Does not support BASH_VERSION < 4.0 > @@ -645,6 +645,12 @@ _ovs_vsctl_bashcomp () { > <<< "$tmp" > export COMP_WORDS > export COMP_CWORD="$((${#COMP_WORDS[@]}-1))" > + else > + # If not in test mode, reassembles the COMP_WORDS and COMP_CWORD > + # using just space as word break. > + _get_comp_words_by_ref -n "\"'><=;|&(:" -w words -i cword > + COMP_WORDS=( "${words[@]}") > + COMP_CWORD=${cword} > fi > > # Extract the conf.db path. > @@ -661,13 +667,11 @@ _ovs_vsctl_bashcomp () { > _OVS_VSCTL_PARSED_ARGS=() > _OVS_VSCTL_NEW_RECORDS=() > cmd_pos=-1 > - cur=${COMP_WORDS[COMP_CWORD]} > valid_globals=true > valid_opts=true > valid_commands=true > given_opts="" > index=1 > - export COMP_WORDBREAKS=" " > for word in "${COMP_WORDS[@]:1:${COMP_CWORD}} "; do > _OVS_VSCTL_COMP_NOSPACE=false > local completion > @@ -750,7 +754,10 @@ _ovs_vsctl_bashcomp () { > valid_commands=true > given_opts="" > fi > - completion="$(sort -u <<< "$(tr ' ' '\n' <<< ${completion})")" > + # colon, equal sign will mess up the completion output, just > deletes > + # any completion with those signs. > + completion="$(sort -u <<< "$(tr ' ' '\n' <<< ${completion})" \ > + | sed -e '/:/d; /=/d')" > if [ $index -eq $COMP_CWORD ]; then > if [ "$test" = "true" ]; then > if [ "${_OVS_VSCTL_COMP_NOSPACE}" = "true" ]; then > -- > 1.7.9.5 > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev