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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html