@@ -11,24 +11,46 @@ send_completions() {
1111 echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
1212 echo $' local result=()'
1313 echo $' '
14+ echo $' # words the user already typed (excluding the command itself)'
15+ echo $' local used=()'
16+ echo $' if ((COMP_CWORD > 1)); then'
17+ echo $' used=("${COMP_WORDS[@]:1:$((COMP_CWORD - 1))}")'
18+ echo $' fi'
19+ echo $' '
1420 echo $' if [[ "${cur:0:1}" == "-" ]]; then'
21+ echo $' # Completing an option: offer everything (including options)'
1522 echo $' echo "$words"'
1623 echo $' '
1724 echo $' else'
25+ echo $' # Completing a non-option: offer only non-options,'
26+ echo $' # and don\' t re-offer ones already used earlier in the line.'
1827 echo $' for word in $words; do'
19- echo $' [[ "${word:0:1}" != "-" ]] && result+=("$word")'
28+ echo $' [[ "${word:0:1}" == "-" ]] && continue'
29+ echo $' '
30+ echo $' local seen=0'
31+ echo $' for u in "${used[@]}"; do'
32+ echo $' if [[ "$u" == "$word" ]]; then'
33+ echo $' seen=1'
34+ echo $' break'
35+ echo $' fi'
36+ echo $' done'
37+ echo $' ((!seen)) && result+=("$word")'
2038 echo $' done'
2139 echo $' '
2240 echo $' echo "${result[*]}"'
23- echo $' '
2441 echo $' fi'
2542 echo $' }'
2643 echo $' '
2744 echo $' _cli_completions() {'
2845 echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
29- echo $' local compwords=("${COMP_WORDS[@]:1:$COMP_CWORD-1}")'
46+ echo $' local compwords=()'
47+ echo $' if ((COMP_CWORD > 0)); then'
48+ echo $' compwords=("${COMP_WORDS[@]:1:$((COMP_CWORD - 1))}")'
49+ echo $' fi'
3050 echo $' local compline="${compwords[*]}"'
3151 echo $' '
52+ echo $' COMPREPLY=()'
53+ echo $' '
3254 echo $' case "$compline" in'
3355 echo $' \' download\' *\' --handler\' )'
3456 echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_cli_completions_filter "curl wget")" -- "$cur")'
0 commit comments