On Thu, 18 Feb 2016, Jani Nikula <jani.nik...@intel.com> wrote:
> The bash completion package makes life a whole lot easier than using the
> builtin bash completion features. It's quite likely anyone using
> completion in bash already has it installed.

I boldly went ahead and pushed the lot. Please scream if
https://xkcd.com/1172/.

BR,
Jani.


>
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>
> ---
>  bash_completion | 62 
> ++++++++++++++++++++++++++++++++-------------------------
>  1 file changed, 35 insertions(+), 27 deletions(-)
>
> diff --git a/bash_completion b/bash_completion
> index e44e5fc844b4..6a3a88cc80f8 100644
> --- a/bash_completion
> +++ b/bash_completion
> @@ -11,7 +11,21 @@ dim ()
>  
>  _dim ()
>  {
> -     local cur cmds opts i
> +     local args arg cur prev words cword split
> +     local cmds
> +
> +     # require bash-completion with _init_completion
> +     type -t _init_completion >/dev/null 2>&1 || return
> +
> +     _init_completion || return
> +
> +     COMPREPLY=()
> +
> +     # arg = subcommand
> +     _get_first_arg
> +
> +     # args = number of arguments
> +     _count_args
>  
>       if [ -f ~/linux/drm-intel-rerere/nightly.conf ] ; then
>               local nightly_branches=`(source 
> ~/linux/drm-intel-rerere/nightly.conf ; echo $nightly_branches) | \
> @@ -35,27 +49,21 @@ _dim ()
>       cmds="$cmds create-branch remove-branch create-workdir 
> for-each-workdirs fw"
>       cmds="$cmds tag-next checker"
>  
> -     opts="-d -f -i"
> -
> -     i=1
> -
> -     COMPREPLY=()   # Array variable storing the possible completions.
> -     cur=${COMP_WORDS[COMP_CWORD]}
> -
> -     for comp in "${COMP_WORDS[@]}" ; do
> -             for opt in $opts ; do
> -                     if [[ $opt = $comp ]] ; then
> -                             i=$((i+1))
> -                     fi
> -             done
> -     done
> -
> -     if [[ $COMP_CWORD == "$i" ]] ; then
> -             COMPREPLY=( $( compgen -W "$cmds $opts" -- $cur ) )
> +     if [ -z "${arg}" ]; then
> +             # top level completion
> +             case "${cur}" in
> +                     -*)
> +                             local opts="-d -f -i"
> +                             COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
> +                             ;;
> +                     *)
> +                             COMPREPLY=( $(compgen -W "${cmds}" -- ${cur}) )
> +                             ;;
> +             esac
>               return 0
>       fi
>  
> -     case "${COMP_WORDS[i]}" in
> +     case "${arg}" in
>               push-branch)
>                       COMPREPLY=( $( compgen -W "-f $nightly_branches" -- 
> $cur ) )
>                       ;;
> @@ -69,7 +77,7 @@ _dim ()
>                       COMPREPLY=( $( compgen -W "-s" -- $cur ) )
>                       ;;
>               magic-patch|mp)
> -                     if [[ $COMP_CWORD == "$((i+1))" ]] ; then
> +                     if [[ $args == 2 ]]; then
>                               COMPREPLY=( $( compgen -o nospace -W "-a" -- 
> $cur ) )
>                       fi
>                       ;;
> @@ -80,34 +88,34 @@ _dim ()
>                       # FIXME needs a git sha1
>                       ;;
>               pull-request)
> -                     if [[ $COMP_CWORD == "$((i+1))" ]] ; then
> +                     if [[ $args == 2 ]]; then
>                               COMPREPLY=( $( compgen -W "$nightly_branches" 
> -- $cur ) )
> -                     elif [[ $COMP_CWORD == "$((i+2))" ]] ; then
> +                     elif [[ $args == 3 ]]; then
>                               COMPREPLY=( $( compgen -W "$upstream_branches" 
> -- $cur ) )
>                       fi
>                       ;;
>               pull-request-next|pull-request-fixes|pull-request-next-fixes)
> -                     if [[ $COMP_CWORD == "$((i+1))" ]] ; then
> +                     if [[ $args == 2 ]]; then
>                               COMPREPLY=( $( compgen -W "$upstream_branches" 
> -- $cur ) )
>                       fi
>                       ;;
>               create-branch)
> -                     if [[ $COMP_CWORD == "$((i+1))" ]] ; then
> +                     if [[ $args == 2 ]]; then
>                               COMPREPLY=( $( compgen -o nospace -W "drm- 
> topic/" -- $cur ) )
>                       fi
>                       ;;
>               checkout|co)
> -                     if [[ $COMP_CWORD == "$((i+1))" ]] ; then
> +                     if [[ $args == 2 ]]; then
>                               COMPREPLY=( $( compgen -W "$nightly_branches" 
> -- $cur ) )
>                       fi
>                       ;;
>               remove-branch)
> -                     if [[ $COMP_CWORD == "$((i+1))" ]] ; then
> +                     if [[ $args == 2 ]]; then
>                               COMPREPLY=( $( compgen -W "$nightly_branches" 
> -- $cur ) )
>                       fi
>                       ;;
>               create-workdir)
> -                     if [[ $COMP_CWORD == "$((i+1))" ]] ; then
> +                     if [[ $args == 2 ]]; then
>                               COMPREPLY=( $( compgen -W "$nightly_branches 
> all" -- $cur ) )
>                       fi
>                       ;;

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to