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:
parent
aa9c315cc8
commit
e48f71e216
5 changed files with 107 additions and 40 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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]" ]]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue