1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-19 21:44:11 +01:00

allow _main_complete to call an arbitrary command given as arguments (11459)

This commit is contained in:
Sven Wischnowsky 2000-05-18 10:48:31 +00:00
parent 781a5bd4b1
commit ca670d4d27
3 changed files with 29 additions and 4 deletions

@ -1,5 +1,8 @@
2000-05-18 Sven Wischnowsky <wischnow@zsh.org> 2000-05-18 Sven Wischnowsky <wischnow@zsh.org>
* 11459: Completion/Core/_main_complete, Doc/Zsh/compsys.yo: allow
_main_complete to call an arbitrary command given as arguments
* 11457: Doc/Zsh/compsys.yo, Src/Zle/compctl.mdd: small doc fix; * 11457: Doc/Zsh/compsys.yo, Src/Zle/compctl.mdd: small doc fix;
make compcall autoload compctl module make compcall autoload compctl module

@ -20,7 +20,7 @@ setopt localoptions nullglob rcexpandparam extendedglob
unsetopt markdirs globsubst shwordsplit nounset ksharrays unsetopt markdirs globsubst shwordsplit nounset ksharrays
exec </dev/null # ZLE closes stdin, which can cause errors exec </dev/null # ZLE closes stdin, which can cause errors
local func funcs ret=1 tmp _compskip format nm \ local func funcs ret=1 tmp _compskip format nm call \
_completers _completer _completer_num curtag _comp_force_list \ _completers _completer _completer_num curtag _comp_force_list \
_matchers _matcher _matcher_num _comp_tags _comp_mesg \ _matchers _matcher _matcher_num _comp_tags _comp_mesg \
context state line opt_args val_args curcontext="$curcontext" \ context state line opt_args val_args curcontext="$curcontext" \
@ -84,7 +84,16 @@ fi
# Get the names of the completers to use in the positional parameters. # Get the names of the completers to use in the positional parameters.
if (( $# )); then if (( $# )); then
if [[ "$1" = - ]]; then
if [[ $# -lt 3 ]]; then
_completers=()
else
_completers=( "$2" )
call=yes
fi
else
_completers=( "$@" ) _completers=( "$@" )
fi
else else
zstyle -a ":completion:${curcontext}:" completer _completers || zstyle -a ":completion:${curcontext}:" completer _completers ||
_completers=( _complete _ignored ) _completers=( _complete _ignored )
@ -104,7 +113,9 @@ done
for tmp in "$_completers[@]"; do for tmp in "$_completers[@]"; do
if [[ "$tmp" = *:-* ]]; then if [[ -n "$call" ]]; then
_completer="${tmp}"
elif [[ "$tmp" = *:-* ]]; then
_completer="${${tmp%:*}[2,-1]//_/-}${tmp#*:}" _completer="${${tmp%:*}[2,-1]//_/-}${tmp#*:}"
tmp="${tmp%:*}" tmp="${tmp%:*}"
elif [[ $tmp = *:* ]]; then elif [[ $tmp = *:* ]]; then
@ -120,7 +131,12 @@ for tmp in "$_completers[@]"; do
_matcher_num=1 _matcher_num=1
for _matcher in "$_matchers[@]"; do for _matcher in "$_matchers[@]"; do
if "$tmp"; then if [[ -n "$call" ]]; then
if "${(@)argv[3,-1]}"; then
ret=0
break 2
fi
elif "$tmp"; then
ret=0 ret=0
break 2 break 2
fi fi

@ -2003,6 +2003,12 @@ functions to decide if other completers should be called. If the return
value is zero, no other completers are tried and the tt(_main_complete) value is zero, no other completers are tried and the tt(_main_complete)
function returns. function returns.
If the first argument to tt(_main_complete) is a single hyphen, the
arguments will not be taken as names of completers. Instead, the
second argument gives a name to use in the var(completer) field of the
context and the other arguments give a command anme and arguments to
call to generate the matches.
The following completer functions are contained in the distribution (users The following completer functions are contained in the distribution (users
may write their own): may write their own):