1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-19 23:41:31 +01:00

zsh-workers/10108

This commit is contained in:
Tanaka Akira 2000-03-13 10:26:17 +00:00
parent 963043760f
commit 8b53e5de54
8 changed files with 92 additions and 7 deletions

View file

@ -2,4 +2,5 @@ DISTFILES_SRC='
.distfiles
_bash_completions _correct_filename _correct_word _expand_word
_history_complete_word _read_comp _most_recent_file _complete_help
_next_tags
'

View file

@ -0,0 +1,70 @@
#compdef -k complete-word \C-xn
# Main widget/completer.
_next_tags() {
if [[ $#funcstack -gt 1 ]]; then
# Called as completer, probably `remove' our helper function. A better
# test would be nice, but I think one should still be able to edit the
# current word between attempts to complete it.
[[ $_next_tags_pre != ${LBUFFER%${PREFIX}} ]] && unset _sort_tags
return 1
else
local comp
if [[ -z $compstate[old_list] ]]; then
comp=()
else
comp=(_next_tags _complete)
fi
(( $+_sort_tags )) || _next_tags_not=
_sort_tags=_next_tags_sort
_next_tags_pre="${LBUFFER%${PREFIX}}"
_next_tags_not="$_next_tags_not $_lastcomp[tags]"
_main_complete "$comp[@]"
[[ $compstate[insert] = automenu ]] &&
compstate[insert]=automenu-unambiguous
compstate[insert]=''
compstate[list]='list force'
fi
}
# Helper function for sorting tags. Most of this is copied from _tags.
_next_tags_sort() {
local order tags tag nodef
zstyle -a ":completion:${curcontext}:" tag-order order ||
order=( 'arguments values' options globbed-files directories all-files )
# But we also remove the tags we've already tried...
tags=( "${(@)order:#(${(j:|:)~${=_next_tags_not}})}" )
# ... unless that would remove all offered tags.
[[ $#tags -ne $#order && "$tags" != *(${(j:|:)~argv})* ]] &&
tags=( $order ) _next_tags_not=
for tag in $tags; do
case $tag in
-) nodef=yes;;
*\(\)) "${${tag%%[ ]#\(\)}##[ ]#}" "$@";;
\!*) comptry "${(@)argv:#(${(j:|:)~${=tag[2,-1]}})}";;
?*) comptry ${=tag};;
esac
done
[[ -z "$nodef" ]] && comptry "$@"
}
[[ -o kshautoload ]] || _next_tags "$@"

View file

@ -33,7 +33,7 @@ if zstyle -s ":completion:${curcontext}:directories" file-patterns tmp &&
type="${type}/"
fi
else
dopts=()
dopts=(-/)
fi
if zstyle -s ":completion:${curcontext}:globbed-files" file-patterns tmp &&
[[ -n "$tmp" ]]; then

View file

@ -21,7 +21,7 @@ unsetopt markdirs globsubst shwordsplit nounset ksharrays
local ctxt post ret=1 tmp _compskip format _comp_ignore \
_completers _completer _completer_num \
_matchers _matcher _matcher_num \
_matchers _matcher _matcher_num _comp_tags \
context state line opt_args val_args curcontext="$curcontext" \
_last_nmatches=-1 _last_menu_style _def_menu_style _menu_style sel \
_saved_exact="${compstate[exact]}" \
@ -193,12 +193,13 @@ done
comppostfuncs=()
_lastcomp=( "${(@kv)compstate}" )
_lastcomp[completer]="$comp"
_lastcomp[completer]="$_completer"
_lastcomp[prefix]="$PREFIX"
_lastcomp[suffix]="$SUFFIX"
_lastcomp[iprefix]="$IPREFIX"
_lastcomp[isuffix]="$ISUFFIX"
_lastcomp[qiprefix]="$QIPREFIX"
_lastcomp[qisuffix]="$QISUFFIX"
_lastcomp[tags]="$_comp_tags"
return ret

View file

@ -8,7 +8,7 @@ else
tag="$1"
fi
comptags -R "$tag" &&
comptags -R "$tag" && _comp_tags="$_comp_tags $tag" &&
if [[ $# -gt 1 ]]; then
_description "$@"
return 0

View file

@ -19,7 +19,8 @@ else
fi
if [[ $# -gt 1 ]]; then
_tags "$targs[@]" "$tag" && _description "$@"
_tags "$targs[@]" "$tag" && _comp_tags="$_comp_tags $tag" &&
_description "$@"
else
_tags "$targs[@]" "$tag"
_tags "$targs[@]" "$tag" && _comp_tags="$_comp_tags $tag"
fi

View file

@ -1861,6 +1861,18 @@ on the command line (which may be blank). If given a numeric argument
var(N), complete the var(N)th most recently modified file. Note the
completion, if any, is always unique.
)
findex(_next_tags (^Xn))
item(tt(_next_tags (^Xn)))(
This allows to complete types of matches that are not immediately
offered because of the setting of the tt(tag-order) style. After a
normal completion was tried, invoking this command makes the matches
for the next tag (or set of tags) be used. Repeatedly invoking this
command makes the following tags be used. To be able to complete the
matches selected by tt(_next_tags), the tt(completer) style should
contain tt(_next_tags) as its first string. With that, the normal key
binding (normally tt(TAB)) can be used to complete the matches shown
after the call to tt(_next_tags).
)
findex(_read_comp (^X^R))
item(tt(_read_comp (^X^R)))(
Prompt the user for a string, and use that to perform completion on the

View file

@ -2,5 +2,5 @@ DISTFILES_SRC='
.distfiles
acx allopt cat cdmatch cdmatch2 checkmail colors cx harden
is-at-least mere multicomp nslookup proto pushd randline
run-help yp yu zed zless zls zmv
run-help yp yu zed zless zls zmv zrecompile
'