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:
parent
963043760f
commit
8b53e5de54
8 changed files with 92 additions and 7 deletions
|
@ -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
|
||||
'
|
||||
|
|
70
Completion/Commands/_next_tags
Normal file
70
Completion/Commands/_next_tags
Normal 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 "$@"
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
Loading…
Reference in a new issue