[PATCH 2/4] completion: introduce __gitcomp_2 ()
- From
Ramkumar Ramachandra <artagnon@gmail.com>
- Date
- Dec 30, 2013, 14:52 UTC
- Message-ID
- <1388415138-11011-3-git-send-email-artagnon@gmail.com>
- In-Reply-To
- <1388415138-11011-1-git-send-email-artagnon@gmail.com>
There are situations where two classes of completions possible. For example
branch.<TAB>
should try to complete
branch.master. branch.autosetupmerge branch.autosetuprebase
The first candidate has the suffix ".", and the second/ third candidates have the suffix " ". To facilitate completions of this kind, create a variation of __gitcomp_nl () that accepts two sets of arguments and two independent suffixes.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> --- contrib/completion/git-completion.bash | 30 ++++++++++++++++++++++++++++++ contrib/completion/git-completion.zsh | 10 ++++++++++ 2 files changed, 40 insertions(+)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 51c2dd4..64b20b8 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -233,6 +233,36 @@ __gitcomp_nl () __gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }" } +# Generates completion reply from two sets of completion words, with +# configurable suffixes for each. +# +# It accepts 2 to 6 arguments: +# 1: First set of possible completion words. +# 2: Second set of possible completion words. +# 3: A prefix to be added to each completion word (both $1 and $2) +# (optional). +# 4: Generate possible completion matches for this word (optional). +# 5: A suffix to be appended to each completion word in the first set +# ($1) instead of the default space (optional). +# 6: A suffix to be appended to each completion word in the second set +# ($2) instead of the default space (optional). +__gitcomp_2 () +{ + local pfx="${3-}" cur_="${4-$cur}" sfx="${5- }" sfx2="${6- }" i=0 + local IFS=$' \t\n' + + for x in $1; do + if [[ "$x" == "$cur_"* ]]; then + COMPREPLY[i++]="$pfx$x$sfx" + fi + done + for x in $2; do + if [[ "$x" == "$cur_"* ]]; then + COMPREPLY[i++]="$pfx$x$sfx2" + fi + done +} + # Generates completion reply with compgen from newline-separated possible # completion filenames. # It accepts 1 to 3 arguments: diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh index 6fca145..261a7f5 100644 --- a/contrib/completion/git-completion.zsh +++ b/contrib/completion/git-completion.zsh @@ -76,6 +76,16 @@ __gitcomp_nl () compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0 } +__gitcomp_2 () +{ + emulate -L zsh + + local IFS=$' \t\n' + compset -P '*[=:]' + compadd -Q -S "${5- }" -p "${3-}" -- ${=1} && _ret=0 + compadd -Q -S "${6- }" -p "${3-}" -- ${=2} && _ret=0 +} + __gitcomp_file () { emulate -L zsh
-- 1.8.5.2.227.g53f3478