@@ -10,6 +10,7 @@ give_comps() {
1010 echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
1111 echo $' local result=()'
1212 echo $' local want_options=0'
13+ echo $' local dynamic_prefix="__completely_dynamic__"'
1314 echo $' '
1415 echo $' # words the user already typed (excluding the command itself)'
1516 echo $' local used=()'
@@ -21,19 +22,29 @@ give_comps() {
2122 echo $' # Completing a non-option: drop options and already-used words.'
2223 echo $' [[ "${cur:0:1}" == "-" ]] && want_options=1'
2324 echo $' for word in "${words[@]}"; do'
24- echo $' if ((!want_options)); then'
25- echo $' [[ "${word:0:1}" == "-" ]] && continue'
26- echo $' '
27- echo $' for u in "${used[@]}"; do'
28- echo $' if [[ "$u" == "$word" ]]; then'
29- echo $' continue 2'
30- echo $' fi'
31- echo $' done'
25+ echo $' local candidates=("$word")'
26+ echo $' if [[ "$word" == "$dynamic_prefix"* ]]; then'
27+ echo $' word="${word#"$dynamic_prefix"}"'
28+ echo $' word="${word//$\'\r\' / }"'
29+ echo $' word="${word//$\'\n\' / }"'
30+ echo $' read -r -a candidates <<<"$word"'
3231 echo $' fi'
3332 echo $' '
34- echo $' # compgen -W expects shell-escaped words in one space-delimited string.'
35- echo $' printf -v word \' %q\' "$word"'
36- echo $' result+=("$word")'
33+ echo $' for candidate in "${candidates[@]}"; do'
34+ echo $' if ((!want_options)); then'
35+ echo $' [[ "${candidate:0:1}" == "-" ]] && continue'
36+ echo $' '
37+ echo $' for u in "${used[@]}"; do'
38+ echo $' if [[ "$u" == "$candidate" ]]; then'
39+ echo $' continue 2'
40+ echo $' fi'
41+ echo $' done'
42+ echo $' fi'
43+ echo $' '
44+ echo $' # compgen -W expects shell-escaped words in one space-delimited string.'
45+ echo $' printf -v candidate \' %q\' "$candidate"'
46+ echo $' result+=("$candidate")'
47+ echo $' done'
3748 echo $' done'
3849 echo $' '
3950 echo $' echo "${result[*]}"'
@@ -51,11 +62,11 @@ give_comps() {
5162 echo $' '
5263 echo $' case "$compline" in'
5364 echo $' \' status\' *\' --branch\' )'
54- echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_mygit_completions_filter "$(git branch --format=\' %(refname:short)\' 2>/dev/null)")" -- "$cur")'
65+ echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_mygit_completions_filter "__completely_dynamic__ $(git branch --format=\' %(refname:short)\' 2>/dev/null)")" -- "$cur")'
5566 echo $' ;;'
5667 echo $' '
5768 echo $' \' status\' *\' -b\' )'
58- echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_mygit_completions_filter "$(git branch --format=\' %(refname:short)\' 2>/dev/null)")" -- "$cur")'
69+ echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_mygit_completions_filter "__completely_dynamic__ $(git branch --format=\' %(refname:short)\' 2>/dev/null)")" -- "$cur")'
5970 echo $' ;;'
6071 echo $' '
6172 echo $' \' status\' *)'
0 commit comments