On Sat, Apr 27, 2013 at 2:15 PM, Felipe Contreras <felipe.contreras@xxxxxxxxx> wrote: > On Sat, Apr 27, 2013 at 10:40 AM, Manlio Perillo > <manlio.perillo@xxxxxxxxx> wrote: >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> 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. > > Why two times? > >> 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? > > Yeah, that's the way bash-completion used to do it. But I wonder if we > should be worrying about this at this point, even bash-completion > dropped support for bash < 4 more than two years ago, and even debian > stable is at 4.1. > > http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git;a=commitdiff;h=f1b3be235722d1ea51160acf50120eb88995a5b7 Actually, there's a way to trigger this in bash < 4, I've tested it and it works: --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -270,8 +270,8 @@ __git_index_files () __git_ls_files_helper "$root" "$1" | while read -r file; do case "$file" in - ?*/*) echo "${file%%/*}/" ;; - *) echo "$file " ;; + ?*/*) echo "${file%%/*}" ;; + *) echo "${file}" ;; esac done | sort | uniq fi @@ -490,6 +490,10 @@ __git_complete_index_file () ;; esac + # use a hack to enable file mode in bash < 4 + compopt -o filenames +o nospace 2> /dev/null || + compgen -f /non-existing-dir/ > /dev/null + __gitcomp_nl "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_" "" } -- Felipe Contreras -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html