diff options
Diffstat (limited to 'Completion/Base/_subscript')
-rw-r--r-- | Completion/Base/_subscript | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/Completion/Base/_subscript b/Completion/Base/_subscript index abaabec8c..66d88b00c 100644 --- a/Completion/Base/_subscript +++ b/Completion/Base/_subscript @@ -1,7 +1,27 @@ #compdef -subscript- if [[ ${(Pt)${compstate[parameter]}} = assoc* ]]; then - compgen -S ']' -k "( ${(kP)${compstate[parameter]}} )" + if [[ "$RBUFFER" = \]* ]]; then + compadd -S '' - "${(@kP)${compstate[parameter]}}" + else + compadd -S ']' - "${(@kP)${compstate[parameter]}}" + fi +elif [[ ${(Pt)${compstate[parameter]}} = array* ]]; then + local list i j + + ind=( {1..${#${(P)${compstate[parameter]}}}} ) + list=() + for i in "$ind[@]"; do + [[ "$i" = ${PREFIX}*${SUFFIX} ]] && + list=( "$list[@]" + "${(r:4:: ::):)i} $(print -D ${(P)${compstate[parameter]}[$i]})" ) + done + + if [[ "$RBUFFER" = \]* ]]; then + compadd -S '' -V default -y list - "$ind[@]" + else + compadd -S ']' -V default -y list - "$ind[@]" + fi else _compalso -math- fi |