John Szakmeister <j...@szakmeister.net> writes: > The current definition results in an incorrect expansion of the term under > zsh. > For instance "/^${1////\\/}/" under zsh with the argument "hi" results in: > /^/\/h/\/i/ > > This results in an output similar to this when trying to complete `git grep > chartab` under zsh: > > :: git grep chartabawk: cmd. line:1: /^/\/c/\/h/\/a/\/r/\/t/\/a/\/b/ { > print $1 } > awk: cmd. line:1: ^ backslash not last character on line > awk: cmd. line:1: /^/\/c/\/h/\/a/\/r/\/t/\/a/\/b/ { print $1 } > awk: cmd. line:1: ^ syntax error > > Leaving the prompt in a goofy state until the user hits a key. > > Escaping the literal / in the parameter expansion (using "/^${1//\//\\/}/") > results in: > /^chartab/ > > allowing the completion to work correctly. > > This formulation also works under bash. > > Signed-off-by: John Szakmeister <j...@szakmeister.net> > --- > > I've been bit by this bug quite a bit, but didn't have time to track it down > until today. I hope the proposed solution is acceptable. > > contrib/completion/git-completion.bash | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/contrib/completion/git-completion.bash > b/contrib/completion/git-completion.bash > index c21190d..a899234 100644 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -1305,7 +1305,7 @@ _git_gitk () > } > > __git_match_ctag() { > - awk "/^${1////\\/}/ { print \$1 }" "$2" > + awk "/^${1//\//\\/}/ { print \$1 }" "$2"
The updated pattern look sensible to me. / to start the pattern part, extra / to say "repeatedly replace all", \/ to say "a single slash is what is to be replaced, / to say "here is where the pattern ends", and then \\/ to say "replace with backslash-slash". In fact, I have to suspect that the original working by pure accident or a bug. Thanks. > } > > _git_grep () -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html