1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-17 10:20:55 +01:00
zsh/Completion/Base/Utility/_regex_words

52 lines
936 B
Text

#autoload
local opt OPTARG matches end
local term=$'\0'
while getopts "t:" opt; do
case $opt in
(t)
term=$OPTARG
;;
(*)
return 1
;;
esac
done
shift $(( OPTIND - 1 ))
local tag=$1
local desc=$2
shift 2
if (( $# )); then
reply=(\()
else
# ### Is this likely to happen in callers? Should we warn?
reply=()
return
fi
integer i
local -a wds
if [[ $term = $'\0' ]]; then
matches=":${tag}:${desc}:(( "
end="))"
else
matches=":${tag}:${desc}:_values -s ${(q)term} ${(q)desc}"
fi
for (( i = 1; i <= $#; i++ )); do
wds=(${(s.:.)argv[i]})
reply+=(/${wds[1]//\**/"[^$term]#"}"$term"/)
if [[ $term = $'\0' ]]; then
matches+="${wds[1]//\*}${wds[2]:+\\:${wds[2]//(#m)[: \(\)]/\\$MATCH}} "
else
matches+=" ${(q)${${wds[1]//\*}//(#m)[:\[\]]/\\$MATCH}}\\[${(q)${wds[2]//(#m)[:\[\]]/\\$MATCH}}\\]"
fi
eval "reply+=($wds[3])"
reply+=(\|)
done
reply+=( /'[]'/ "${matches}${end}" \) )