about summary refs log tree commit diff
path: root/Completion/Base/_subscript
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-06-27 05:33:04 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-06-27 05:33:04 +0000
commit346825df86466cf151be61b9429ef2c1734e66ea (patch)
treebd3e1ccd947b47f974c62b4113c5276416de2c9f /Completion/Base/_subscript
parenta2159285e80508bb682d90a71270fbddada8bd05 (diff)
downloadzsh-3.1.5-pws-24.tar.gz
zsh-3.1.5-pws-24.tar.xz
zsh-3.1.5-pws-24.zip
zsh-3.1.5-pws-24 zsh-3.1.5-pws-24
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