diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Completion/Core/_main_complete | 24 | ||||
-rw-r--r-- | Doc/Zsh/compsys.yo | 6 |
3 files changed, 29 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index 02d1dd253..1e21e0d3b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 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; make compcall autoload compctl module diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete index 03fb15f31..a67e57db6 100644 --- a/Completion/Core/_main_complete +++ b/Completion/Core/_main_complete @@ -20,7 +20,7 @@ setopt localoptions nullglob rcexpandparam extendedglob unsetopt markdirs globsubst shwordsplit nounset ksharrays 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 \ _matchers _matcher _matcher_num _comp_tags _comp_mesg \ 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. if (( $# )); then - _completers=( "$@" ) + if [[ "$1" = - ]]; then + if [[ $# -lt 3 ]]; then + _completers=() + else + _completers=( "$2" ) + call=yes + fi + else + _completers=( "$@" ) + fi else zstyle -a ":completion:${curcontext}:" completer _completers || _completers=( _complete _ignored ) @@ -104,7 +113,9 @@ done for tmp in "$_completers[@]"; do - if [[ "$tmp" = *:-* ]]; then + if [[ -n "$call" ]]; then + _completer="${tmp}" + elif [[ "$tmp" = *:-* ]]; then _completer="${${tmp%:*}[2,-1]//_/-}${tmp#*:}" tmp="${tmp%:*}" elif [[ $tmp = *:* ]]; then @@ -120,7 +131,12 @@ for tmp in "$_completers[@]"; do _matcher_num=1 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 break 2 fi diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo index 1638e5406..ddd815c4a 100644 --- a/Doc/Zsh/compsys.yo +++ b/Doc/Zsh/compsys.yo @@ -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) 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 may write their own): |