summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Shawn O. Pearce <spearce@spearce.org>2007-02-04 02:38:27 -0500
committerLibravatar Junio C Hamano <junkio@cox.net>2007-02-04 00:18:41 -0800
commit72e5e989b8c22dc6dd2b4f889d5d0dabf698b387 (patch)
tree52e57db95dff8d8f5a7bb8e798dcb02cb264d062
parentbash: Complete long options to git-add. (diff)
downloadtgif-72e5e989b8c22dc6dd2b4f889d5d0dabf698b387.tar.xz
bash: Add space after unique command name is completed.
Because we use the nospace option for our completion function for the main 'git' wrapper bash won't automatically add a space after a unique completion has been made by the user. This has been pointed out in the past by Linus Torvalds as an undesired behavior. I agree. We have to use the nospace option to ensure path completion for a command such as `git show` works properly, but that breaks the common case of getting the space for a unique completion. So now we set IFS=$'\n' (linefeed) and add a trailing space to every possible completion option. This causes bash to insert the space when the completion is unique. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-xcontrib/completion/git-completion.bash26
1 files changed, 20 insertions, 6 deletions
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 93f2af5e1f..1cf576e1e5 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -61,6 +61,20 @@ __git_ps1 ()
fi
}
+__gitcomp ()
+{
+ local all c s=$'\n' IFS=' '$'\t'$'\n'
+ for c in $1; do
+ case "$c" in
+ --*=*) all="$all$c$s" ;;
+ *) all="$all$c $s" ;;
+ esac
+ done
+ IFS=$s
+ COMPREPLY=($(compgen -W "$all" -- "${COMP_WORDS[COMP_CWORD]}"))
+ return
+}
+
__git_heads ()
{
local cmd i is_hash=y dir="$(__gitdir "$1")"
@@ -787,12 +801,12 @@ _git ()
done
if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
- COMPREPLY=($(compgen -W "
- --git-dir= --version --exec-path
- $(__git_commands)
- $(__git_aliases)
- " -- "${COMP_WORDS[COMP_CWORD]}"))
- return;
+ case "${COMP_WORDS[COMP_CWORD]}" in
+ --*=*) COMPREPLY=() ;;
+ --*) __gitcomp "--git-dir= --bare --version --exec-path" ;;
+ *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
+ esac
+ return
fi
local expansion=$(__git_aliased_command "$command")