Subject: Re: [PATCH 00/11] completion: general cleanups

From: Manlio Perillo <[email-masked]>
Date: Sat, 27 Apr 2013 17:40:23 +0200

Il 27/04/2013 15:07, Felipe Contreras ha scritto:
> [...]
> This should do the trick. No?
> 
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -262,16 +262,17 @@ __git_ls_files_helper ()
>  #    If provided, only files within the specified directory are listed.
>  #    Sub directories are never recursed.  Path must have a trailing
>  #    slash.
> +# 3. Compat mode; set to enable.
>  __git_index_files ()
>  {
> -       local dir="$(__gitdir)" root="${2-.}" file
> +       local dir="$(__gitdir)" root="${2-.}" file old="${3-}"
> 
>         if [ -d "$dir" ]; then
>                 __git_ls_files_helper "$root" "$1" |
>                 while read -r file; do
>                         case "$file" in
> -                       ?*/*) echo "${file%%/*}/" ;;
> -                       *) echo "$file " ;;
> +                       ?*/*) echo "${file%%/*}${old:+/}" ;;
> +                       *) echo "${file}${old:+ }" ;;
>                         esac
>                 done | sort | uniq
>         fi
> @@ -480,7 +481,7 @@ __git_complete_revlist_file ()
>  # The exception is --committable, which finds the files appropriate commit.
>  __git_complete_index_file ()
>  {
> -       local pfx="" cur_="$cur"
> +       local pfx="" cur_="$cur" old
> 
>         case "$cur_" in
>         ?*/*)
> @@ -490,7 +491,8 @@ __git_complete_index_file ()
>                 ;;
>         esac
> 
> -       __gitcomp_nl "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_" ""
> +       compopt -o filenames +o nospace 2> /dev/null || old=1
> +       __gitcomp_nl "$(__git_index_files "$1" "$pfx" "$old")" "$pfx" "$cur_" ""
>  }
> 
>  __git_complete_file ()
> 

I like the idea (but I have not tested it), however compopt is called
two times, for each completion.

Maybe we can test for `-o filenames` support when script is loaded,
where currently there is a Bash version check, and set a global variable?

Regards   Manlio