summary refs log tree commit diff
path: root/Completion/Base
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Base')
-rw-r--r--Completion/Base/.distfiles6
-rwxr-xr-xCompletion/Base/_in_vared28
2 files changed, 31 insertions, 3 deletions
diff --git a/Completion/Base/.distfiles b/Completion/Base/.distfiles
index 377a56c82..b447accf4 100644
--- a/Completion/Base/.distfiles
+++ b/Completion/Base/.distfiles
@@ -1,7 +1,7 @@
 DISTFILES_SRC='
     .distfiles 
     _arg_compile _argument_sets _arguments _brace_parameter _combination
-    _command_names _condition _default _describe _equal _first _jobs _math
-    _parameter _precommand _redirect _regex_arguments _subscript _tilde
-    _value _values
+    _command_names _condition _default _describe _equal _first _in_vared
+    _jobs _math _parameter _precommand _redirect _regex_arguments _subscript
+    _tilde _value _values
 '
diff --git a/Completion/Base/_in_vared b/Completion/Base/_in_vared
new file mode 100755
index 000000000..4d8e814db
--- /dev/null
+++ b/Completion/Base/_in_vared
@@ -0,0 +1,28 @@
+#compdef -vared-
+
+local also
+
+# Completion inside vared.
+
+if [[ $compstate[vared] = *\[* ]]; then
+  # vared on an array-element
+  compstate[parameter]=${compstate[vared]%%\[*}
+  compstate[context]=-value-
+  also=value
+else
+  # vared on a parameter, let's see if it is an array
+  compstate[parameter]=$compstate[vared]
+  if [[ ${(tP)compstate[vared]} = *(array|assoc)* ]]; then
+    compstate[context]=array_value
+    also=-array-value-
+  else
+    compstate[context]=value
+    also=-value-
+  fi
+fi
+
+# Don't insert TAB in first column. Never.
+
+compstate[insert]="${compstate[insert]//tab /}"
+
+_compalso "$also"