@@ -11,24 +11,46 @@ send_completions() {
11
11
echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
12
12
echo $' local result=()'
13
13
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 $' '
14
20
echo $' if [[ "${cur:0:1}" == "-" ]]; then'
21
+ echo $' # Completing an option: offer everything (including options)'
15
22
echo $' echo "$words"'
16
23
echo $' '
17
24
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.'
18
27
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")'
20
38
echo $' done'
21
39
echo $' '
22
40
echo $' echo "${result[*]}"'
23
- echo $' '
24
41
echo $' fi'
25
42
echo $' }'
26
43
echo $' '
27
44
echo $' _cli_completions() {'
28
45
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'
30
50
echo $' local compline="${compwords[*]}"'
31
51
echo $' '
52
+ echo $' COMPREPLY=()'
53
+ echo $' '
32
54
echo $' case "$compline" in'
33
55
echo $' \' download\' *\' --handler\' )'
34
56
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_cli_completions_filter "curl wget")" -- "$cur")'
0 commit comments