summaryrefslogtreecommitdiffstats
path: root/Completion/Base/_subscript
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Base/_subscript')
-rw-r--r--Completion/Base/_subscript22
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