summary refs log tree commit diff
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2000-05-15 13:19:26 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2000-05-15 13:19:26 +0000
commit1dc5677a419456cc23a5e9fa763fc01c35ff1791 (patch)
tree18cd0867fc321be62d4fc7abdfd7f322f173f474
parent6ba3ec5ec416f5249dc94674a1ff76846321a25b (diff)
downloadzsh-1dc5677a419456cc23a5e9fa763fc01c35ff1791.tar.gz
zsh-1dc5677a419456cc23a5e9fa763fc01c35ff1791.tar.xz
zsh-1dc5677a419456cc23a5e9fa763fc01c35ff1791.zip
add _in_vared for completion inside vared; make insert-tab default to `false' there
-rw-r--r--Completion/Base/.distfiles6
-rwxr-xr-xCompletion/Base/_in_vared28
-rw-r--r--Completion/Core/_compalso16
-rw-r--r--Completion/Core/_complete16
-rw-r--r--Completion/Core/_main_complete6
-rw-r--r--Doc/Zsh/compsys.yo3
6 files changed, 48 insertions, 27 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"
diff --git a/Completion/Core/_compalso b/Completion/Core/_compalso
index 23a40e2d0..8df6b4a6f 100644
--- a/Completion/Core/_compalso
+++ b/Completion/Core/_compalso
@@ -1,13 +1,17 @@
 #autoload
 
-# This searches $1 in the array for normal completions and calls the result.
+# This searches $* in the array for normal completions and calls the result.
 # It is used to include completions for another command or special context
 # into the list generated by the calling function.
 # For example the function for `-subscript-' could call this as in
-# `_compalso -math- "$@"' to get the completions that would be generated
-# for a mathematical context.
+# `_compalso -math-' to get the completions that would be generated for a
+# mathematical context.
 
-local tmp
+local i tmp ret=1
 
-tmp="$_comps[$1]"
-[[ -z "$tmp" ]] || "$tmp" "$@"
+for i; do
+  tmp="$_comps[$1]"
+  [[ -z "$tmp" ]] || "$tmp" && ret=0
+done
+
+return ret
diff --git a/Completion/Core/_complete b/Completion/Core/_complete
index e50f73b2e..83b918135 100644
--- a/Completion/Core/_complete
+++ b/Completion/Core/_complete
@@ -36,21 +36,7 @@ fi
 # If we are inside `vared' and we don't have a $compcontext, we treat
 # this like a parameter assignment. Which it is.
 
-if [[ -n $compstate[vared] ]]; then
-  if [[ $compstate[vared] = *\[* ]]; then
-    # vared on an array-element
-    compstate[parameter]=${compstate[vared]%%\[*}
-    compstate[context]=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
-    else
-      compstate[context]=value
-    fi
-  fi
-fi
+[[ -n $compstate[vared] ]] && compstate[context]=vared
 
 # For arguments and command names we use the `_normal' function.
 
diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete
index 1b1fdd0e6..34566d2d4 100644
--- a/Completion/Core/_main_complete
+++ b/Completion/Core/_main_complete
@@ -35,8 +35,10 @@ typeset -U _lastdescr _comp_ignore
 
 [[ -z "$curcontext" ]] && curcontext=:::
 
-if [[ "$compstate[insert]" = tab* ]]; then
-  zstyle -T ":completion:${curcontext}:" insert-tab && return 1
+if [[ "$compstate[insert]" = tab* && "$WIDGET" != *list* ]]; then
+  { zstyle -T ":completion:${curcontext}:" insert-tab &&
+    { [[ "$curcontext" != :* || -z "$compstate[vared]" ]] ||
+        zstyle -t ":completion:vared${curcontext}:" insert-tab } } && return 1
 
   compstate[insert]="${compstate[insert]//tab /}"
 fi
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index af17d9434..45bae9f0d 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -1258,7 +1258,8 @@ insert the TAB character if the completion code would normally do that
 (i.e. when there is no non-blank character to the left of the cursor
 yet). If set to `false', completion will be done even there.
 
-The default value of this style is `true'.
+The default value of this style is `true' unless when completing
+inside the tt(vared) builtin command, where it defaults to `false'.
 )
 kindex(insert-unambiguous, completion style)
 item(tt(insert-unambiguous))(