mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 21:44:11 +01:00
move pattern matching in the loop to make sure all match specs are used (15487)
This commit is contained in:
parent
1df4b6620b
commit
f29d50fe9c
@ -1,5 +1,9 @@
|
||||
2001-07-25 Sven Wischnowsky <wischnow@zsh.org>
|
||||
|
||||
* 15487: Completion/Base/Utility/_describe, Src/Zle/complete.c:
|
||||
move pattern matching in the loop to make sure all match specs
|
||||
are used
|
||||
|
||||
* 15485: Completion/Unix/Command/_lzop,
|
||||
Completion/Zsh/Type/_directory_stack,
|
||||
Completion/Zsh/Type/_file_descriptors, Completion/Zsh/Type/_jobs:
|
||||
|
@ -5,6 +5,7 @@
|
||||
local _opt _expl _tmpm _tmpd
|
||||
local _type=values _descr _ret=1 _showd _nm _hide _args _grp _sep
|
||||
local csl="$compstate[list]" csl2
|
||||
local _oargv _argv _new _strs _mats _opts _i _try=0
|
||||
|
||||
# Get the option.
|
||||
|
||||
@ -25,55 +26,17 @@ zstyle -T ":completion:${curcontext}:$_type" verbose && _showd=yes
|
||||
|
||||
zstyle -s ":completion:${curcontext}:$_type" list-separator _sep || _sep=--
|
||||
|
||||
if zstyle -T ":completion:${curcontext}:$_type" list-grouped; then
|
||||
local _argv _new _strs _mats _opts _i=2
|
||||
_descr="$1"
|
||||
shift
|
||||
|
||||
_argv=( "$@" )
|
||||
if [[ -n "$showd" ]] &&
|
||||
zstyle -T ":completion:${curcontext}:$_type" list-grouped; then
|
||||
_oargv=( "$@" )
|
||||
_grp=(-g)
|
||||
_new=( "$1" )
|
||||
shift
|
||||
|
||||
while (( $# )); do
|
||||
|
||||
_strs="_a_$_i"
|
||||
eval local "_a_$_i;_a_$_i"'=( "${'$1'[@]}" )'
|
||||
_argv[_i]="_a_$_i"
|
||||
shift
|
||||
(( _i++ ))
|
||||
|
||||
if [[ "$1" = (|-*) ]]; then
|
||||
_mats=
|
||||
else
|
||||
_matss="_a_$_i"
|
||||
eval local "_a_$_i;_a_$_i"'=( "${'$1'[@]}" )'
|
||||
_argv[_i]="_a_$_i"
|
||||
shift
|
||||
(( _i++ ))
|
||||
fi
|
||||
|
||||
_opts=( "${(@)argv[1,(i)--]:#--}" )
|
||||
shift "$#_opts"
|
||||
(( _i += $#_opts ))
|
||||
if [[ $1 == -- ]]; then
|
||||
shift
|
||||
(( _i++ ))
|
||||
fi
|
||||
|
||||
if [[ -n $_mats ]]; then
|
||||
compadd "$_opts[@]" -O $_strs -D $_mats -a $_strs
|
||||
else
|
||||
compadd "$_opts[@]" -O $_strs -a $_strs
|
||||
fi
|
||||
done
|
||||
|
||||
set - "$_argv[@]"
|
||||
else
|
||||
_grp=()
|
||||
fi
|
||||
|
||||
_descr="$1"
|
||||
shift
|
||||
|
||||
[[ "$_type" = options ]] &&
|
||||
zstyle -t ":completion:${curcontext}:options" prefix-hidden &&
|
||||
_hide="${(M)PREFIX##(--|[-+])}"
|
||||
@ -82,6 +45,47 @@ _tags "$_type"
|
||||
while _tags; do
|
||||
while _next_label "$_type" _expl "$_descr"; do
|
||||
|
||||
if (( $#_grp )); then
|
||||
|
||||
set -- "$_oargv[@]"
|
||||
_argv=( "$_oargv[@]" )
|
||||
_i=1
|
||||
(( _try++ ))
|
||||
while (( $# )); do
|
||||
|
||||
_strs="_a_$_try$_i"
|
||||
eval local "_a_$_try$_i;_a_$_try$_i"'=( "${'$1'[@]}" )'
|
||||
_argv[_i]="_a_$_try$_i"
|
||||
shift
|
||||
(( _i++ ))
|
||||
|
||||
if [[ "$1" = (|-*) ]]; then
|
||||
_mats=
|
||||
else
|
||||
_matss="_a_$_try$_i"
|
||||
eval local "_a_$_try$_i;_a_$_try$_i"'=( "${'$1'[@]}" )'
|
||||
_argv[_i]="_a_$_try$_i"
|
||||
shift
|
||||
(( _i++ ))
|
||||
fi
|
||||
|
||||
_opts=( "${(@)argv[1,(i)--]:#--}" )
|
||||
shift "$#_opts"
|
||||
(( _i += $#_opts ))
|
||||
if [[ $1 == -- ]]; then
|
||||
shift
|
||||
(( _i++ ))
|
||||
fi
|
||||
|
||||
if [[ -n $_mats ]]; then
|
||||
compadd "$_opts[@]" "$_expl[@]" -O $_strs -D $_mats -s $_strs
|
||||
else
|
||||
compadd "$_opts[@]" "$_expl[@]" -O $_strs -a $_strs
|
||||
fi
|
||||
done
|
||||
set - "$_argv[@]"
|
||||
fi
|
||||
|
||||
if [[ -n "$_showd" ]]; then
|
||||
compdescribe -I "$_hide" "$_sep " _expl "$_grp[@]" "$@"
|
||||
else
|
||||
|
@ -616,14 +616,15 @@ bin_compadd(char *name, char **argv, char *ops, int func)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ca_args:
|
||||
|
||||
if (mstr && (match = parse_cmatcher(name, mstr)) == pcm_err) {
|
||||
zsfree(mstr);
|
||||
return 1;
|
||||
}
|
||||
zsfree(mstr);
|
||||
|
||||
ca_args:
|
||||
|
||||
if (!*argv && !dat.group && !dat.mesg &&
|
||||
!(dat.aflags & (CAF_NOSORT|CAF_UNIQALL|CAF_UNIQCON|CAF_ALL)))
|
||||
return 1;
|
||||
|
Loading…
Reference in New Issue
Block a user