about summary refs log tree commit diff
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