1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-28 17:10:59 +01:00

make _arguments return 300 only if given the -R option (13790)

This commit is contained in:
Sven Wischnowsky 2001-03-27 13:03:49 +00:00
parent aa9c315cc8
commit e48f71e216
5 changed files with 107 additions and 40 deletions

View file

@ -1,5 +1,9 @@
2001-03-27 Sven Wischnowsky <wischnow@zsh.org>
* 13790: Completion/Base/_arguments, Completion/X/_x_arguments,
Completion/X/_xt_arguments, Doc/Zsh/compsys.yo: make
_arguments return 300 only if given the -R option
* 13789: Completion/Base/_tilde, Completion/Builtins/_popd:
comment out looking up the prefix-needed style when
completing directory stack entries; make _tilde use _popd,

View file

@ -4,7 +4,7 @@
# descriptions given as arguments to this function.
local long cmd="$words[1]" descr mesg subopts opt usecc autod
local oldcontext="$curcontext" hasopts
local oldcontext="$curcontext" hasopts rawret
long=$argv[(I)--]
if (( long )); then
@ -173,11 +173,12 @@ if (( long )); then
fi
subopts=()
while [[ "$1" = -(O*|C) ]]; do
while [[ "$1" = -(O*|[CR]) ]]; do
case "$1" in
-C) usecc=yes; shift ;;
-O) subopts=( "${(@P)2}" ); shift 2 ;;
-O*) subopts=( "${(@P)1[3,-1]}" ); shift ;;
-C) usecc=yes; shift ;;
-O) subopts=( "${(@P)2}" ); shift 2 ;;
-O*) subopts=( "${(@P)1[3,-1]}" ); shift ;;
-R) rawret=yes; shift;;
esac
done
@ -394,10 +395,11 @@ if (( $# )) && comparguments -i "$autod" "$@"; then
[[ -z "$aret" || -z "$usecc" ]] && curcontext="$oldcontext"
[[ -n "$aret" ]] && return 300
[[ -n "$noargs" && nm -eq "$compstate[nmatches]" ]] && _message "$noargs"
if [[ -n "$aret" ]]; then
[[ -n $rawret ]] && return 300
else
[[ -n "$noargs" && nm -eq "$compstate[nmatches]" ]] && _message "$noargs"
fi
# Set the return value.
[[ nm -ne "$compstate[nmatches]" ]]

View file

@ -1,6 +1,35 @@
#compdef -P */X11/*
#compdef -P */X11(|R[456])/*
_arguments \
'-display:display:_x_display' \
'-geometry:geometry:_x_geometry' \
"$@"
local ret long xargs opts rawret nm="$compstate[nmatches]"
xargs=(
'-display:display:_x_display'
'-geometry:geometry:_x_geometry'
)
(( $# )) || xargs=( "$xargs[@]" '*:default: _default' )
long=$argv[(I)--]
if (( long )); then
argv[long]=( "$xargs[@]" -- )
else
set -- "$@" "$xargs[@]"
fi
opts=()
while [[ $1 = -(O*|[CR]) ]]; do
opts=($opts $1)
[[ $1 = -R ]] && rawret=yes
shift
done
_arguments -R "$opts[@]" "$@"
ret=$?
if [[ "$ret" = 300 ]]; then
compstate[restore]=''
[[ -z $rawret ]] && ret=$(( nm == $compstate[nmatches] ))
fi
return ret

View file

@ -20,26 +20,52 @@
# cf. XrmParseCommand(3X11), X11R6.4/xc/lib/Xt/Initialize.c, X(5)
_arguments \
'+rv' '-rv' '-reverse' \
'+synchronous' '-synchronous' \
'-background:background color:_colors' \
'-background:background color:_colors' \
'-bd:border color:_colors' \
'-bg:background color:_colors' \
'-bordercolor:border color:_colors' \
'-borderwidth:border width:_x_borderwidth' \
'-bw:border width:_x_borderwidth' \
'-display:display:_x_display' \
'-fg:foreground color:_colors' \
'-fn:font:_x_font' \
'-foreground:foreground color:_colors' \
'-geometry:geometry:_x_geometry' \
'-iconic' \
'-name:name:_x_name' \
'-selectionTimeout:selection timeout (milliseconds):_x_selection_timeout' \
'-title:title:_x_title' \
'-xnllanguage:locale:_x_locale' \
'-xrm:resource:_x_resource' \
'-xtsessionID:session ID:_xt_session_id' \
"$@"
local ret long xargs opts rawret nm="$compstate[nmatches]"
xargs=(
-+{rv,synchronous}
-{reverse,iconic}
'-background:background color:_x_color'
'-bd:border color:_x_color'
'-bg:background color:_x_color'
'-bordercolor:border color:_x_color'
'-borderwidth:border width:_x_borderwidth'
'-bw:border width:_x_borderwidth'
'-display:display:_x_display'
'-fg:foreground color:_x_color'
'-font:font:_x_font'
'-fn:font:_x_font'
'-foreground:foreground color:_x_color'
'-geometry:geometry:_x_geometry'
'-name:name:_x_name'
'-selectionTimeout:selection timeout (milliseconds):_x_selection_timeout'
'-title:title:_x_title'
'-xnllanguage:locale:_x_locale'
'*-xrm:resource:_x_resource'
'-xtsessionID:session ID:_xt_session_id'
)
long=$argv[(I)--]
if (( long )); then
argv[long]=( "$xargs[@]" -- )
else
set -- "$@" "$xargs[@]"
fi
opts=()
while [[ $1 = -(O*|[CR]) ]]; do
opts=($opts $1)
[[ $1 = -R ]] && rawret=yes
shift
done
_arguments -R "$opts[@]" "$@"
ret=$?
if [[ "$ret" = 300 ]]; then
compstate[restore]=''
[[ -z $rawret ]] && ret=$(( nm == $compstate[nmatches] ))
fi
return ret

View file

@ -3070,12 +3070,18 @@ vindex(opt_args, use of)
An var(action) of the form `tt(->)var(string)' is used by functions
that implement a state machine. In this case, the `var(string)'s (with
all leading and trailing spaces and tabs removed) of all actions that
have to be used will be stored in
the global array tt(state) and the function returns with a return
have to be used will be stored in the global array tt(state). The
function returns with a non-zero return value if the cursor is not in
a position where options can be completed or if the current word could
not be completed to an option. But if the tt(-R) option is given to
tt(_arguments), the function will instead return with a return
value of 300 (to make it distinguishable from other return values)
after setting the global `tt(context)', `tt(line)' and `tt(opt_args)'
parameters as described below, and without resetting any changes made
to the special parameters such as tt(PREFIX) and tt(words).
to the special parameters such as tt(PREFIX) and tt(words). This
allows to write wrapper functions around tt(_arguments) that have to
be able to find out if they have to make sure that the special
completion parameters are not reset when they return.
Note that this means that a function calling tt(_arguments) with at least
one action containing such a `tt(->)var(string)' has to declare