@@ -10,24 +10,46 @@ give_comps() {
1010 echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
1111 echo $' local result=()'
1212 echo $' '
13+ echo $' # words the user already typed (excluding the command itself)'
14+ echo $' local used=()'
15+ echo $' if ((COMP_CWORD > 1)); then'
16+ echo $' used=("${COMP_WORDS[@]:1:$((COMP_CWORD - 1))}")'
17+ echo $' fi'
18+ echo $' '
1319 echo $' if [[ "${cur:0:1}" == "-" ]]; then'
20+ echo $' # Completing an option: offer everything (including options)'
1421 echo $' echo "$words"'
1522 echo $' '
1623 echo $' else'
24+ echo $' # Completing a non-option: offer only non-options,'
25+ echo $' # and don\' t re-offer ones already used earlier in the line.'
1726 echo $' for word in $words; do'
18- echo $' [[ "${word:0:1}" != "-" ]] && result+=("$word")'
27+ echo $' [[ "${word:0:1}" == "-" ]] && continue'
28+ echo $' '
29+ echo $' local seen=0'
30+ echo $' for u in "${used[@]}"; do'
31+ echo $' if [[ "$u" == "$word" ]]; then'
32+ echo $' seen=1'
33+ echo $' break'
34+ echo $' fi'
35+ echo $' done'
36+ echo $' ((!seen)) && result+=("$word")'
1937 echo $' done'
2038 echo $' '
2139 echo $' echo "${result[*]}"'
22- echo $' '
2340 echo $' fi'
2441 echo $' }'
2542 echo $' '
2643 echo $' _mygit_completions() {'
2744 echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
28- echo $' local compwords=("${COMP_WORDS[@]:1:$COMP_CWORD-1}")'
45+ echo $' local compwords=()'
46+ echo $' if ((COMP_CWORD > 0)); then'
47+ echo $' compwords=("${COMP_WORDS[@]:1:$((COMP_CWORD - 1))}")'
48+ echo $' fi'
2949 echo $' local compline="${compwords[*]}"'
3050 echo $' '
51+ echo $' COMPREPLY=()'
52+ echo $' '
3153 echo $' case "$compline" in'
3254 echo $' \' status\' *\' --branch\' )'
3355 echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_mygit_completions_filter "$(git branch --format=\' %(refname:short)\' 2>/dev/null)")" -- "$cur")'
0 commit comments