diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2007-02-04 02:38:27 -0500 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-02-04 00:18:41 -0800 |
commit | 72e5e989b8c22dc6dd2b4f889d5d0dabf698b387 (patch) | |
tree | 52e57db95dff8d8f5a7bb8e798dcb02cb264d062 | |
parent | bash: Complete long options to git-add. (diff) | |
download | tgif-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-x | contrib/completion/git-completion.bash | 26 |
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") |