Re: [PATCH v2 4/4] completion: improve 'git --exec-path' completion
On Fri, Apr 13, 2012 at 01:08:45AM -0500, Jonathan Nieder wrote:
> Felipe Contreras wrote:
Show 7 quoted lines
>> +++ b/contrib/completion/git-completion.bash
>> @@ -2638,7 +2638,7 @@ _git ()
>> --git-dir=
>> --bare
>> --version
>> - --exec-path
>> + --exec-path=
Show 10 quoted lines
> Thanks.
>
> "git --exec-path" means to print the name of the directory where git
> stores its subcommands and other helpers. I have no thoughts either
> way about whether a user typing
>
> git --exec-p<TAB>
>
> is more likely to be asking for the current exec-path or intending to
> override it.
In other words, how about something like this? Tests left as an exercise to the interested reader.
-- >8 --
Subject: completion: do not add trailing space when completing --exec-path
--exec-path looks like to the completion script like an unambiguous successful completion script, but it is wrong. The user could be trying to do
git --exec-path; # print name of helper directory
or
git --exec-path=/path/to/alternative/helper/dir <subcommand>
so the most helpful thing to do is to leave out the trailing space and leave it to the operator to type an equal sign or carriage return according to the situation.
Reported-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
contrib/completion/git-completion.bash | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
Show changes to contrib/completion/git-completion.bash +8 −6
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 31f714da..ecbf2172 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -307,12 +307,14 @@ __git_ps1 ()
# __gitcomp_1 requires 2 arguments
__gitcomp_1 ()
{
- local c IFS=' '$'\t'$'\n'
+ local c word IFS=' '$'\t'$'\n'
for c in $1; do
- case "$c$2" in
- --*=*) printf %s$'\n' "$c$2" ;;
- *.) printf %s$'\n' "$c$2" ;;
- *) printf %s$'\n' "$c$2 " ;;
+ word=$c$2
+ case $word in
+ --*=*) printf %s$'\n' "$word" ;;
+ *.) printf %s$'\n' "$word" ;;
+ *\$) printf %s$'\n' "${word%\$}" ;;
+ *) printf %s$'\n' "$word " ;;
esac
done
}
@@ -2638,7 +2640,7 @@ _git ()
--git-dir=
--bare
--version
- --exec-path
+ --exec-path\$
--html-path
--work-tree=
--namespace=
--
1.7.10