summaryrefslogtreecommitdiff
path: root/Completion/Core
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Core')
-rw-r--r--Completion/Core/_compalso16
-rw-r--r--Completion/Core/_complete16
-rw-r--r--Completion/Core/_main_complete6
3 files changed, 15 insertions, 23 deletions
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