22function _example_completion {
33 local words=${words[@]: 0: $CURRENT }
44 local IFS=$' \n '
5-
5+
66 # shellcheck disable=SC2086,SC2154,SC2155
77 local completion_input
88 if echo ${words} " ''" | xargs echo 2> /dev/null > /dev/null; then
@@ -12,60 +12,41 @@ function _example_completion {
1212 else
1313 completion_input=" ${words[1,-2]} ${words[-1]} \\ "
1414 fi
15-
15+
1616 local lines
1717 lines=" $( echo " ${completion_input} " | CARAPACE_COMPLINE=" ${words} " CARAPACE_ZSH_HASH_DIRS=" $( hash -d) " xargs example _carapace zsh) "
18-
18+
1919 local zstyle message data
2020 IFS=$' \001 ' read -r -d ' ' zstyle message data <<< " ${lines}"
2121 # shellcheck disable=SC2154
2222 zstyle " :completion:${curcontext} :*" list-colors " ${zstyle} "
2323 zstyle " :completion:${curcontext} :*" group-name ' '
2424 [ -z " $message " ] || _message -r " ${message} "
2525
26- local block tag displays values suffixes
26+ local block tag suffix displays values
27+ local -A tags
2728 while IFS=$' \002 ' read -r -d $' \002 ' block; do
28- IFS=$' \003 ' read -r -d ' ' tag displays values suffixes <<< " ${block}"
29-
29+ IFS=$' \003 ' read -r -d ' ' tag suffix displays values <<< " ${block}"
30+
3031 local -a displaysArr=(" ${(f@ )displays} " )
3132 local -a valuesArr=(" ${(f@ )values} " )
32- local -a suffixesArr=(" ${(f@ )suffixes} " )
33-
34- typeset -A grouped_values=()
35- typeset -A grouped_displays=()
36-
37- for i in {1..${# valuesArr[@]} }; do
38- local suffix_key=" ${suffixesArr[$i]:- __NOSUFFIX__} "
39- grouped_values[$suffix_key ]+=" ${valuesArr[$i]} " $' \n '
40- grouped_displays[$suffix_key ]+=" ${displaysArr[$i]} " $' \n '
41- done
42-
43- local first_call=1
44- for suffix_key in " ${(@ k)grouped_values} " ; do
45- local -a s_values=(" ${(f@ )${grouped_values[$suffix_key]% $' \n ' } } " )
46- local -a s_displays=(" ${(f@ )${grouped_displays[$suffix_key]% $' \n ' } } " )
47-
48- if [[ ${# s_values[@]} -eq 0 ]]; then
49- continue
50- fi
51-
52- local -a describe_args
53- if (( first_call )) ; then
54- describe_args=(-t " ${tag} " " ${tag} " )
55- first_call=0
56- else
57- describe_args=(-t " ${tag} " " " )
58- fi
5933
60- local separators=" /,.':@"
61- if [[ " $suffix_key " == " __NOSUFFIX__" ]]; then
62- _describe " ${describe_args[@]} " s_displays s_values -Q
63- elif [[ " $separators " == * " $suffix_key " * ]]; then
64- _describe " ${describe_args[@]} " s_displays s_values -Q -S " $suffix_key " -r ' '
65- else
66- _describe " ${describe_args[@]} " s_displays s_values -Q -S " $suffix_key " -r " 0-9a-zA-Z"
67- fi
68- done
34+ local -a describe_args
35+ if [[ -z ${tags[$tag]} ]]; then
36+ describe_args=(-t " ${tag} " " ${tag} " )
37+ tags[$tag ]=1
38+ else
39+ describe_args=(-t " ${tag} " " " )
40+ fi
41+
42+ local separators=" /,.':@="
43+ if [[ " $suffix " == " " ]]; then
44+ _describe " ${describe_args[@]} " displaysArr valuesArr -Q -S ' ' -r " ${separators} 0-9a-zA-Z"
45+ elif [[ " $separators " == * " $suffix " * ]]; then
46+ _describe " ${describe_args[@]} " displaysArr valuesArr -Q -S " $suffix " -r ' '
47+ else
48+ _describe " ${describe_args[@]} " displaysArr valuesArr -Q -S " $suffix " -r " 0-9a-zA-Z"
49+ fi
6950 done <<< " ${data}"
7051}
7152compquote ' ' 2> /dev/null && _example_completion
0 commit comments