* [PATCH] git bash completion handles alias options
@ 2012-08-09 20:52 Jerome Reybert
2012-08-09 20:52 ` Jerome Reybert
0 siblings, 1 reply; 2+ messages in thread
From: Jerome Reybert @ 2012-08-09 20:52 UTC (permalink / raw)
To: git; +Cc: Jerome Reybert
git bash completion now handles git alias options. It means that options which
change the completion behavior for complete commands will also change the
behavior of completion for aliased command.
bash completion now handle git alias options. I did a use case in another
commit: a checkout alias which only complete local branches, ie. only 'refs'
ones, not 'remotes'. With this new alias completion, I added an option to do
that in checkout command and hacked _git_checkout complete function.
Best,
Jerome
Jerome Reybert (1):
git bash completion handles alias options
contrib/completion/git-completion.bash | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
--
1.7.12.rc0.91.gf4edd99
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH] git bash completion handles alias options
2012-08-09 20:52 [PATCH] git bash completion handles alias options Jerome Reybert
@ 2012-08-09 20:52 ` Jerome Reybert
0 siblings, 0 replies; 2+ messages in thread
From: Jerome Reybert @ 2012-08-09 20:52 UTC (permalink / raw)
To: git; +Cc: Jerome Reybert
git bash completion now handles git alias options. It means that options
which change the completion behavior for complete commands will also
change the behavior of completion for aliased command.
bash completion now handle git alias options. I did a use case in another
commit: a checkout alias which only complete local branches, ie. only
'refs' ones, not 'remotes'. With this new alias completion, I added an
option to do that in checkout command and hacked _git_checkout complete
function.
This is a draft version, bash usage should be improved. To achieve this:
* a global array $alias_words is filled. As it is global and this file
sourced, this variable can be seen from the terminal
* __git_aliased_command fills $alias_words
* __git_aliased_command must be called differently (not in a subshell)
to fill the global variable. The return value $expansion is
passed by reference as a parameter
* __git_find_on_cmdline now search in $words and $alias_words
Signed-off-by: Jerome Reybert <jreybert@gmail.com>
---
contrib/completion/git-completion.bash | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index ffedce7..dfceda0 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -23,6 +23,9 @@
# 3) Consider changing your PS1 to also show the current branch,
# see git-prompt.sh for details.
+alias_words=()
+alias_cword=0
+
if [[ -n ${ZSH_VERSION-} ]]; then
autoload -U +X bashcompinit && bashcompinit
fi
@@ -708,19 +711,22 @@ __git_aliased_command ()
{
local word cmdline=$(git --git-dir="$(__gitdir)" \
config --get "alias.$1")
+
for word in $cmdline; do
case "$word" in
\!gitk|gitk)
- echo "gitk"
+ eval "$2='gitk'"
return
;;
\!*) : shell command alias ;;
- -*) : option ;;
+ -*) : option
+ alias_words=("${alias_words[@]}" "$word")
+ ((alias_cword++))
+ ;;
*=*) : setting env ;;
git) : git itself ;;
*)
- echo "$word"
- return
+ eval "$2='$word'"
esac
done
}
@@ -739,6 +745,17 @@ __git_find_on_cmdline ()
done
((c++))
done
+ c=0
+ while [ $c -lt $alias_cword ]; do
+ word="${alias_words[c]}"
+ for subcommand in $1; do
+ if [ "$subcommand" = "$word" ]; then
+ echo "$subcommand"
+ return
+ fi
+ done
+ ((c++))
+ done
}
__git_has_doubledash ()
@@ -2353,6 +2370,8 @@ _git_whatchanged ()
__git_main ()
{
+ alias_words=()
+ alias_cword=0
local i c=1 command __git_dir
while [ $c -lt $cword ]; do
@@ -2394,8 +2413,8 @@ __git_main ()
local completion_func="_git_${command//-/_}"
declare -f $completion_func >/dev/null && $completion_func && return
-
- local expansion=$(__git_aliased_command "$command")
+ local expansion=''
+ __git_aliased_command $command expansion
if [ -n "$expansion" ]; then
completion_func="_git_${expansion//-/_}"
declare -f $completion_func >/dev/null && $completion_func
--
1.7.12.rc0.91.gf4edd99
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-08-09 20:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-09 20:52 [PATCH] git bash completion handles alias options Jerome Reybert
2012-08-09 20:52 ` Jerome Reybert
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).