diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Builtins/_vars | 16 | ||||
-rw-r--r-- | Completion/Builtins/_zstyle | 5 | ||||
-rw-r--r-- | Completion/Core/_parameters | 21 |
3 files changed, 27 insertions, 15 deletions
diff --git a/Completion/Builtins/_vars b/Completion/Builtins/_vars index 501e37b4f..dece0fecb 100644 --- a/Completion/Builtins/_vars +++ b/Completion/Builtins/_vars @@ -6,20 +6,12 @@ local ret=1 if [[ $PREFIX = *\[* ]]; then - local var=${PREFIX%%\[*} - local elt="${PREFIX#*\]}${SUFFIX%\]}" - local addclose + compstate[parameter]=${PREFIX%%(|\\)\[*} - compset -p $(( ${#var} + 1 )) - if ! compset -S \]; then - addclose=(-S "${${QIPREFIX:+]}:-\]}") - fi - if [[ ${(tP)var} = assoc* ]]; then - local expl + IPREFIX=${PREFIX%%\[*}\[ + PREFIX=${PREFIX#*\[} - _wanted -C subscript association-keys expl 'association key' \ - compadd $addclose -k "$var" - fi + _subscript -q else _parameters -g '^a*' "$@" && ret=0 diff --git a/Completion/Builtins/_zstyle b/Completion/Builtins/_zstyle index 3a485f0da..62e5369e4 100644 --- a/Completion/Builtins/_zstyle +++ b/Completion/Builtins/_zstyle @@ -25,6 +25,7 @@ styles=( domains c: expand c: fake c:fake + fake-parameters c:fake-params file-patterns c:filepat file-sort c:fsort force-list c: @@ -269,6 +270,10 @@ while [[ -n $state ]]; do _message 'prefix and names' ;; + fake-params) + _message 'name and optional type' + ;; + ignline) _wanted values expl boolean compadd true false current current-shown other ;; diff --git a/Completion/Core/_parameters b/Completion/Core/_parameters index b49d60dda..097a96760 100644 --- a/Completion/Core/_parameters +++ b/Completion/Core/_parameters @@ -6,10 +6,25 @@ # If you specify a -g option with a pattern, the pattern will be used to # restrict the type of parameters matched. -local expl pattern +local expl pattern fakes faked tmp pattern=(-g \*) zparseopts -D -K -E g:=pattern -_wanted parameters expl parameter compadd "$@" \ - -Q -k "parameters[(R)${pattern[2]}~*local*]" +fakes=() +faked=() +if zstyle -a ":completion:${curcontext}:" fake-parameters tmp; then + for i in "$tmp[@]"; do + if [[ "$i" = *:* ]]; then + faked=( "$faked[@]" "$i" ) + else + fakes=( "$fakes[@]" "$i" ) + fi + done +fi + +_wanted parameters expl parameter \ + compadd "$@" -Q - \ + "${(@k)parameters[(R)${pattern[2]}~*local*]}" \ + "$fakes[@]" \ + "${(@)${(@M)faked:#${~pattern[2]}}%%:*}" |