mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-02 22:11:54 +02:00
zsh-workers/9546
This commit is contained in:
parent
52a67fbbda
commit
ed41dafd3c
53 changed files with 325 additions and 259 deletions
|
@ -162,7 +162,7 @@ while [[ "$1" = -(O*|C) ]]; do
|
|||
esac
|
||||
done
|
||||
|
||||
zstyle -s ":completion${curcontext}:options" auto-description autod
|
||||
zstyle -s ":completion:${curcontext}:options" auto-description autod
|
||||
|
||||
if (( $# )) && comparguments -i "$autod" "$@"; then
|
||||
local nm="$compstate[nmatches]" action noargs aret expl local
|
||||
|
@ -172,7 +172,7 @@ if (( $# )) && comparguments -i "$autod" "$@"; then
|
|||
|
||||
if comparguments -D descr action; then
|
||||
comparguments -C subc
|
||||
curcontext="${oldcontext}:$subc"
|
||||
curcontext="${oldcontext%:*}:$subc"
|
||||
|
||||
if comparguments -O next direct odirect equal; then
|
||||
opts=yes
|
||||
|
@ -201,7 +201,7 @@ if (( $# )) && comparguments -i "$autod" "$@"; then
|
|||
comparguments -W line opt_args
|
||||
state="${${action[3,-1]##[ ]#}%%[ ]#}"
|
||||
if [[ -n "$usecc" ]]; then
|
||||
curcontext="${oldcontext}:$subc"
|
||||
curcontext="${oldcontext%:*}:$subc"
|
||||
else
|
||||
context="$subc"
|
||||
fi
|
||||
|
@ -259,7 +259,7 @@ if (( $# )) && comparguments -i "$autod" "$@"; then
|
|||
fi
|
||||
|
||||
if [[ -z "$matched$mesg" ]] && _requested options &&
|
||||
{ ! zstyle -t ":completion${curcontext}:options" prefix-needed ||
|
||||
{ ! zstyle -t ":completion:${curcontext}:options" prefix-needed ||
|
||||
[[ "$origpre" = [-+]* ||
|
||||
( -z "$aret$mesg" && nm -eq compstate[nmatches] ) ]] } ; then
|
||||
local prevpre="$PREFIX" previpre="$IPREFIX"
|
||||
|
@ -320,7 +320,7 @@ if (( $# )) && comparguments -i "$autod" "$@"; then
|
|||
matched=yes
|
||||
|
||||
comparguments -L "${equal[1]%%:*}" descr action subc
|
||||
curcontext="${oldcontext}:$subc"
|
||||
curcontext="${oldcontext%:*}:$subc"
|
||||
|
||||
_tags arguments
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
# Assume an user sets the style `hosts-ports-users' as for the my-accounts
|
||||
# tag:
|
||||
#
|
||||
# zstyle ':completion:*:telnet*:my-accounts' hosts-ports-users \
|
||||
# zstyle ':completion:*:*:telnet:*:my-accounts' hosts-ports-users \
|
||||
# host0:: host1::user1 host2::user2
|
||||
# mail-server:{smtp,pop3}:
|
||||
# news-server:nntp:
|
||||
|
@ -78,7 +78,7 @@ key="${1%:*}"
|
|||
num="${${1##*:}:-1}"
|
||||
shift
|
||||
|
||||
if zstyle -a ":completion${curcontext}:$tag" "$style" tmp; then
|
||||
if zstyle -a ":completion:${curcontext}:$tag" "$style" tmp; then
|
||||
eval "tmp=( \"\${(@M)tmp:#\${(j($sep))~pats}}\" )"
|
||||
if (( keys[(in:num:)$key] != 1 )); then
|
||||
eval "tmp=( \${tmp#\${(j(${sep}))~\${(@)\${(@)keys[2,(rn:num:)\$key]}/*/*}}$sep} )"
|
||||
|
|
|
@ -16,7 +16,7 @@ fi
|
|||
|
||||
_tags "$_type" || return 1
|
||||
|
||||
zstyle -t ":completion${curcontext}:$_type" verbose && _showd=yes
|
||||
zstyle -t ":completion:${curcontext}:$_type" verbose && _showd=yes
|
||||
|
||||
_description "$_type" _expl "$1"
|
||||
shift
|
||||
|
@ -28,7 +28,7 @@ else
|
|||
fi
|
||||
|
||||
[[ "$_type" = options ]] &&
|
||||
zstyle -t ":completion${curcontext}:options" prefix-hidden && _hide=yes
|
||||
zstyle -t ":completion:${curcontext}:options" prefix-hidden && _hide=yes
|
||||
|
||||
while compdescribe -g _args _tmpd _tmpmd _tmps _tmpms; do
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
# # We first search in the last ten words, then in the last
|
||||
# # twenty words, and so on...
|
||||
# while [[ i -le max ]]; do
|
||||
# if zstyle -t ":completion${curcontext}:history-words" sort; then
|
||||
# if zstyle -t ":completion:${curcontext}:history-words" sort; then
|
||||
# _description history-words expl "history ($n)"
|
||||
# else
|
||||
# _description -V history-words expl "history ($n)"
|
||||
|
|
|
@ -5,12 +5,12 @@ local expl disp jobs job jids pfx='%' desc how
|
|||
_tags jobs || return 1
|
||||
|
||||
if [[ "$1" = -t ]]; then
|
||||
zstyle -t ":completion${curcontext}:jobs" prefix-needed &&
|
||||
zstyle -t ":completion:${curcontext}:jobs" prefix-needed &&
|
||||
[[ "$PREFIX" != %* && compstate[nmatches] -ne 0 ]] && return 1
|
||||
shift
|
||||
fi
|
||||
zstyle -t ":completion${curcontext}:jobs" prefix-hidden && pfx=''
|
||||
zstyle -t ":completion${curcontext}:jobs" verbose && desc=yes
|
||||
zstyle -t ":completion:${curcontext}:jobs" prefix-hidden && pfx=''
|
||||
zstyle -t ":completion:${curcontext}:jobs" verbose && desc=yes
|
||||
|
||||
if [[ "$1" = -r ]]; then
|
||||
jids=( "${(@k)jobstates[(R)running*]}" )
|
||||
|
@ -34,7 +34,7 @@ if [[ -n "$desc" ]]; then
|
|||
done
|
||||
fi
|
||||
|
||||
zstyle -s ":completion${curcontext}:jobs" numbers how
|
||||
zstyle -s ":completion:${curcontext}:jobs" numbers how
|
||||
|
||||
if [[ "$how" = (yes|true|on|1) ]]; then
|
||||
jobs=( "$jids[@]" )
|
||||
|
|
|
@ -21,7 +21,7 @@ elif [[ ${(Pt)${compstate[parameter]}} = array* ]]; then
|
|||
while _tags; do
|
||||
if _requested -V indexes expl 'array index'; then
|
||||
ind=( {1..${#${(P)${compstate[parameter]}}}} )
|
||||
if zstyle -t ":completion${curcontext}:indexes" verbose; then
|
||||
if zstyle -t ":completion:${curcontext}:indexes" verbose; then
|
||||
list=()
|
||||
for i in "$ind[@]"; do
|
||||
[[ "$i" = ${PREFIX}*${SUFFIX} ]] &&
|
||||
|
|
|
@ -22,9 +22,9 @@ while _tags; do
|
|||
compadd "$suf[@]" "$expl[@]" "$@" - "${(@k)nameddirs}"
|
||||
|
||||
if _requested -V directory-stack expl 'directory stack' &&
|
||||
{ ! zstyle -t ":completion${curcontext}:directory-stack" prefix-needed ||
|
||||
{ ! zstyle -t ":completion:${curcontext}:directory-stack" prefix-needed ||
|
||||
[[ "$PREFIX" = [-+]* || nm -eq compstate[nmatches] ]] }; then
|
||||
if zstyle -t ":completion${curcontext}:directory-stack" verbose; then
|
||||
if zstyle -t ":completion:${curcontext}:directory-stack" verbose; then
|
||||
integer i
|
||||
|
||||
lines=("${PWD}" "${dirstack[@]}")
|
||||
|
|
|
@ -20,7 +20,7 @@ if compvalues -i "$@"; then
|
|||
|
||||
_tags values || return 1
|
||||
|
||||
curcontext="${oldcontext}:values"
|
||||
curcontext="${oldcontext%:*}:values"
|
||||
|
||||
compvalues -V noargs args opts
|
||||
|
||||
|
@ -47,7 +47,7 @@ if compvalues -i "$@"; then
|
|||
SUFFIX="$suffix"
|
||||
IPREFIX="${IPREFIX}${args[1]%%:*}="
|
||||
compvalues -L "${args[1]%%:*}" descr action subc
|
||||
curcontext="${oldcontext}:$subc"
|
||||
curcontext="${oldcontext%:*}:$subc"
|
||||
fi
|
||||
else
|
||||
compvalues -d descr
|
||||
|
@ -68,7 +68,7 @@ if compvalues -i "$@"; then
|
|||
fi
|
||||
else
|
||||
compvalues -C subc
|
||||
curcontext="${oldcontext}:$subc"
|
||||
curcontext="${oldcontext%:*}:$subc"
|
||||
fi
|
||||
|
||||
if ! _tags arguments; then
|
||||
|
@ -88,7 +88,7 @@ if compvalues -i "$@"; then
|
|||
compvalues -v val_args
|
||||
state="${${action[3,-1]##[ ]#}%%[ ]#}"
|
||||
if [[ -n "$usecc" ]]; then
|
||||
curcontext="$subc"
|
||||
curcontext="${oldcontext%:*}:$subc"
|
||||
else
|
||||
context="$subc"
|
||||
fi
|
||||
|
|
|
@ -12,12 +12,12 @@ if [[ "$1" = -m ]]; then
|
|||
shift 2
|
||||
fi
|
||||
|
||||
zstyle -a ":completion${curcontext}:ps" arguments args
|
||||
zstyle -a ":completion:${curcontext}:ps" arguments args
|
||||
|
||||
out="$(command ps $args 2>/dev/null)"
|
||||
|
||||
if zstyle -t ":completion${curcontext}:processes" verbose; then
|
||||
zstyle -a ":completion${curcontext}:ps" list-arguments listargs
|
||||
if zstyle -t ":completion:${curcontext}:processes" verbose; then
|
||||
zstyle -a ":completion:${curcontext}:ps" list-arguments listargs
|
||||
(( $#listargs )) || listargs=( "$args[@]" )
|
||||
if [[ "$listargs" = "$args" ]]; then
|
||||
list=("${(@Mr:COLUMNS-1:)${(f@)out}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*${~match}}")
|
||||
|
|
|
@ -11,10 +11,10 @@ local expl list lines revlines disp
|
|||
|
||||
_wanted -V directory-stack expl 'directory stack' || return 1
|
||||
|
||||
! zstyle -t ":completion${curcontext}:directory-stack" prefix-needed ||
|
||||
! zstyle -t ":completion:${curcontext}:directory-stack" prefix-needed ||
|
||||
[[ $PREFIX = [-+]* ]] || return 1
|
||||
|
||||
if zstyle -t ":completion${curcontext}:directory-stack" verbose; then
|
||||
if zstyle -t ":completion:${curcontext}:directory-stack" verbose; then
|
||||
# get the list of directories with their canonical number
|
||||
# and turn the lines into an array, removing the current directory
|
||||
lines=("${dirstack[@]}")
|
||||
|
|
|
@ -7,7 +7,7 @@ if [[ CURRENT -eq 2 ]]; then
|
|||
_wanted -C - jobs expl 'scheduled jobs' || return 1
|
||||
|
||||
lines=(${(f)"$(sched)"})
|
||||
if zstyle -t ":completion${curcontext}:jobs" verbose; then
|
||||
if zstyle -t ":completion:${curcontext}:jobs" verbose; then
|
||||
disp=( -ld lines )
|
||||
else
|
||||
disp=()
|
||||
|
|
|
@ -22,11 +22,11 @@ done
|
|||
|
||||
if _wanted signals expl signal &&
|
||||
{ [[ -z "$minus" ]] ||
|
||||
! zstyle -t ":completion${curcontext}:signals" prefix-needed ||
|
||||
! zstyle -t ":completion:${curcontext}:signals" prefix-needed ||
|
||||
[[ "$PREFIX" = -* ]] } ; then
|
||||
local disp tmp
|
||||
|
||||
if zstyle -t ":completion${curcontext}:signals" prefix-hidden; then
|
||||
if zstyle -t ":completion:${curcontext}:signals" prefix-hidden; then
|
||||
tmp=( "${(@)signals[1,last]}" )
|
||||
disp=(-d tmp)
|
||||
else
|
||||
|
|
|
@ -10,7 +10,7 @@ else
|
|||
while _tags; do
|
||||
_requested files && _files && ret=0
|
||||
_requested options expl 'inode element' &&
|
||||
{ ! zstyle -t ":completion${curcontext}:options" prefix-needed ||
|
||||
{ ! zstyle -t ":completion:${curcontext}:options" prefix-needed ||
|
||||
[[ "$PREFIX[1]" = + || ret -eq 1 ]] } &&
|
||||
compadd "$expl[@]" - +device +inode +mode +nlink +uid +gid +rdev \
|
||||
+size +atime +mtime +ctime +blksize +block +link
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
# Don't try any more completion after this.
|
||||
_compskip=all
|
||||
|
||||
local subcom expl
|
||||
local subcom expl curcontext="${curcontext}"
|
||||
|
||||
if [[ $words[1] = zftp ]]; then
|
||||
if [[ $CURRENT -eq 2 ]]; then
|
||||
|
@ -20,6 +20,7 @@ if [[ $words[1] = zftp ]]; then
|
|||
return
|
||||
fi
|
||||
subcom=$words[2]
|
||||
curcontext="${curcontext/:zftp:/:zftp-${words[2]}:}"
|
||||
else
|
||||
subcom=$words[1]
|
||||
fi
|
||||
|
@ -27,27 +28,27 @@ fi
|
|||
case $subcom in
|
||||
*(cd|ls|dir))
|
||||
# complete remote directories
|
||||
_tags -C "$subcom" directories && zfcd_match $PREFIX $SUFFIX
|
||||
_tags directories && zfcd_match $PREFIX $SUFFIX
|
||||
;;
|
||||
|
||||
*(get(|at)|gcp|delete|remote))
|
||||
# complete remote files
|
||||
_tags -C "$subcom" files && zfget_match $PREFIX $SUFFIX
|
||||
_tags files && zfget_match $PREFIX $SUFFIX
|
||||
;;
|
||||
|
||||
*(put(|at)|pcp))
|
||||
# complete local files
|
||||
_tags -C "$subcom" files && _files
|
||||
_tags files && _files
|
||||
;;
|
||||
|
||||
*(open|anon|params))
|
||||
# complete hosts: should do cleverer stuff with user names
|
||||
_tags -C "$subcom" hosts && _hosts
|
||||
_tags hosts && _hosts
|
||||
;;
|
||||
|
||||
*(goto|mark))
|
||||
# complete bookmarks. First decide if ncftp mode is go.
|
||||
_wanted -C "$subcom" bookmarks expl bookmark || return 1
|
||||
_wanted bookmarks expl bookmark || return 1
|
||||
if [[ $words[2] = -*n* ]]; then
|
||||
if [[ -f ~/.ncftp/bookmarks ]]; then
|
||||
compadd "$expl[@]" - $(awk -F, 'NR > 2 { print $1 }' ~/.ncftp/bookmarks)
|
||||
|
@ -61,7 +62,7 @@ case $subcom in
|
|||
|
||||
*session)
|
||||
# complete sessions, excluding the current one.
|
||||
_wanted -C "$subcom" sessions expl 'another FTP session' &&
|
||||
_wanted sessions expl 'another FTP session' &&
|
||||
compadd "$expl[@]" - ${$(zftp session):#$ZFTP_SESSION}
|
||||
;;
|
||||
|
||||
|
@ -69,7 +70,7 @@ case $subcom in
|
|||
# complete arguments like sess1:file1 sess2:file2
|
||||
if [[ $PREFIX = *:* ]]; then
|
||||
# complete file in the given session
|
||||
_tags -C "$subcom" files || return 1
|
||||
_tags files || return 1
|
||||
local sess=${PREFIX%%:*} oldsess=$ZFTP_SESSION
|
||||
compset -p $(( $#sess + 1 ))
|
||||
[[ -n $sess ]] && zftp session $sess
|
||||
|
@ -77,7 +78,7 @@ case $subcom in
|
|||
[[ -n $sess && -n $oldsess ]] && zftp session $oldsess
|
||||
else
|
||||
# note here we can complete the current session
|
||||
_wanted -C "$subcom" sessions expl 'FTP session' &&
|
||||
_wanted sessions expl 'FTP session' &&
|
||||
compadd "$expl[@]" -S : - $(zftp session)
|
||||
fi
|
||||
;;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#compdef zstyle
|
||||
|
||||
local curcontext="$curcontext" state context ostate line expl ctop
|
||||
local nm=$compstate[nmatches]
|
||||
local nm=$compstate[nmatches] mesg
|
||||
typeset -A opt_args
|
||||
|
||||
typeset -A styles
|
||||
|
@ -17,6 +17,7 @@ styles=(
|
|||
condition c:
|
||||
cursor c:bool
|
||||
disable-stat c:bool
|
||||
domains c:
|
||||
expand c:
|
||||
file-patterns c:
|
||||
format c:
|
||||
|
@ -87,9 +88,20 @@ while [[ -n $state ]]; do
|
|||
|
||||
case "$ostate" in
|
||||
contexts)
|
||||
if [[ $PREFIX != :*: ]]; then
|
||||
_wanted contexts expl context &&
|
||||
compadd -P : -S : "$expl[@]" completion zftp
|
||||
if _wanted contexts expl context; then
|
||||
if [[ $PREFIX != :*: ]]; then
|
||||
compadd -P : -S : "$expl[@]" completion zftp
|
||||
elif [[ $PREFIX = :completion:* ]]; then
|
||||
mesg=''
|
||||
case "$PREFIX" in
|
||||
:completion:[^:]#) mesg=function ;;
|
||||
:completion:[^:]#:[^:]#) mesg=completer ;;
|
||||
:completion:[^:]#:[^:]#:[^:]#) mesg='command or context' ;;
|
||||
:completion:[^:]#:[^:]#:[^:]#:[^:]#) mesg=argument ;;
|
||||
:completion:[^:]#:[^:]#:[^:]#:[^:]#:[^:]#) mesg=tag ;;
|
||||
esac
|
||||
[[ -n "$mesg" ]] && _message "$mesg"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ _complete_help() {
|
|||
|
||||
for i in "${(@k)help_funcs}"; do
|
||||
text="${text}
|
||||
tags in context ${i}"
|
||||
tags in context :completion:${i}"
|
||||
for j in "${(@s.:.)help_funcs[$i][2,-1]}"; do
|
||||
text="${text}${help_tags[${i}${j}]} (${j})"
|
||||
done
|
||||
|
|
|
@ -9,6 +9,10 @@
|
|||
|
||||
local curcontext="$curcontext"
|
||||
|
||||
[[ -z "$curcontext" ]] && curcontext=":correct-word"
|
||||
if [[ -z "$curcontext" ]]; then
|
||||
curcontext="correct-word:::"
|
||||
else
|
||||
curcontext="correct-word:${curcontext#*:}"
|
||||
fi
|
||||
|
||||
_main_complete _correct
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
|
||||
local curcontext="$curcontext"
|
||||
|
||||
[[ -z "$curcontext" ]] && curcontext=":expand-word"
|
||||
if [[ -z "$curcontext" ]]; then
|
||||
curcontext="correct-word:::"
|
||||
else
|
||||
curcontext="expand-word:${curcontext#*:}"
|
||||
fi
|
||||
|
||||
_main_complete _expand
|
||||
|
|
|
@ -25,9 +25,9 @@ _history_complete_word () {
|
|||
direction=older
|
||||
fi
|
||||
|
||||
zstyle -s ":completion${curcontext}:history-words" stop stop
|
||||
zstyle -s ":completion:${curcontext}:history-words" stop stop
|
||||
|
||||
zstyle -t ":completion${curcontext}:history-words" list || compstate[list]=''
|
||||
zstyle -t ":completion:${curcontext}:history-words" list || compstate[list]=''
|
||||
|
||||
if [[ -n "$compstate[old_list]" &&
|
||||
( -n "$stop" || "$compstate[insert]" = menu ) ]] ; then
|
||||
|
@ -67,14 +67,14 @@ _history_complete_word () {
|
|||
}
|
||||
|
||||
_history_complete_word_gen_matches () {
|
||||
if zstyle -t ":completion${curcontext}:history-words" list; then
|
||||
if zstyle -t ":completion${curcontext}:history-words" sort; then
|
||||
if zstyle -t ":completion:${curcontext}:history-words" list; then
|
||||
if zstyle -t ":completion:${curcontext}:history-words" sort; then
|
||||
_description history-words expl 'history word'
|
||||
else
|
||||
_description -V history-words expl 'history word'
|
||||
fi
|
||||
else
|
||||
if zstyle -t ":completion${curcontext}:history-words" sort; then
|
||||
if zstyle -t ":completion:${curcontext}:history-words" sort; then
|
||||
expl=()
|
||||
else
|
||||
expl=('-V' '')
|
||||
|
@ -84,7 +84,7 @@ _history_complete_word_gen_matches () {
|
|||
[[ -n "$_hist_stop" ]] && PREFIX="$_hist_old_prefix"
|
||||
|
||||
local rem_dups
|
||||
if zstyle -t ":completion${curcontext}:history-words" remove-all-dups; then
|
||||
if zstyle -t ":completion:${curcontext}:history-words" remove-all-dups; then
|
||||
rem_dups=''
|
||||
else
|
||||
rem_dups='-1'
|
||||
|
|
|
@ -7,7 +7,7 @@ subopts=()
|
|||
while getopts 'O:C:' opt; do
|
||||
case "$opt" in
|
||||
O) subopts=( "${(@P)OPTARG}" ) ;;
|
||||
C) curcontext="${curontext}:$OPTARG" ;;
|
||||
C) curcontext="${curcontext%:*}:$OPTARG" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
|
|
@ -16,11 +16,12 @@ local curcontext="${curcontext}" oldcontext
|
|||
|
||||
[[ "${#:-$PREFIX$SUFFIX}" -le 1 ]] && return 1
|
||||
|
||||
[[ "$curcontext" != *:correct* ]] && curcontext="${curcontext}:approximate"
|
||||
[[ "$curcontext" != [^:]#:correct:* ]] &&
|
||||
curcontext="${curcontext/:[^:]#:/:approximate:}"
|
||||
|
||||
oldcontext="$curcontext"
|
||||
|
||||
zstyle -s ":completion${curcontext}:" max-errors cfgacc
|
||||
zstyle -s ":completion:${curcontext}:" max-errors cfgacc
|
||||
|
||||
# Get the number of errors to accept.
|
||||
|
||||
|
@ -73,18 +74,18 @@ compstate[matcher]=-1
|
|||
[[ -z "$compstate[pattern_match]" ]] && compstate[pattern_match]='*'
|
||||
|
||||
while [[ _comp_correct -le comax ]]; do
|
||||
curcontext="${oldcontext}:$_comp_correct"
|
||||
curcontext="${oldcontext/(#b)([^:]#:[^:]#:)/${match[1][1,-2]}-${_comp_correct}:}"
|
||||
|
||||
_description corrections _correct_expl corrections \
|
||||
"e:$_comp_correct" "o:$PREFIX$SUFFIX"
|
||||
|
||||
if _complete; then
|
||||
if zstyle -t ":completion${curcontext}:" insert-unambiguous &&
|
||||
if zstyle -t ":completion:${curcontext}:" insert-unambiguous &&
|
||||
[[ "${#compstate[unambiguous]}" -ge "${#:-$PREFIX$SUFFIX}" ]]; then
|
||||
compstate[pattern_insert]=unambiguous
|
||||
elif _requested original &&
|
||||
( [[ compstate[nmatches] -gt 1 ]] ||
|
||||
zstyle -t ":completion${curcontext}:" original ); then
|
||||
zstyle -t ":completion:${curcontext}:" original ); then
|
||||
local expl
|
||||
|
||||
_description -V original expl original
|
||||
|
|
|
@ -4,16 +4,17 @@
|
|||
# a normal completion function, but as one possible value for the
|
||||
# completer style.
|
||||
|
||||
local comp name curcontext="$curcontext" oldcontext
|
||||
local comp name oldcontext
|
||||
typeset -T curcontext="$curcontext" ccarray
|
||||
|
||||
[[ "$funcstack[2]" = _main_complete ]] && curcontext="${curcontext}:complete"
|
||||
ccarray[2]=complete
|
||||
|
||||
oldcontext="$curcontext"
|
||||
|
||||
# If we have a user-supplied context name, use only that.
|
||||
|
||||
if [[ -n "$compcontext" ]]; then
|
||||
curcontext="${curcontext}:$compcontext"
|
||||
ccarray[3]="$compcontext"
|
||||
|
||||
comp="$_comps[$compcontext]"
|
||||
[[ -z "$comp" ]] || "$comp"
|
||||
|
@ -25,7 +26,7 @@ fi
|
|||
|
||||
comp="$_comps[-first-]"
|
||||
if [[ ! -z "$comp" ]]; then
|
||||
curcontext="${curcontext}:-first-"
|
||||
ccarray[3]=-first-
|
||||
"$comp"
|
||||
if [[ "$_compskip" = all ]]; then
|
||||
_compskip=''
|
||||
|
@ -46,7 +47,7 @@ else
|
|||
|
||||
local cname="-${compstate[context]:s/_/-/}-"
|
||||
|
||||
curcontext="${oldcontext}:$cname"
|
||||
ccarray[3]="$cname"
|
||||
|
||||
comp="$_comps[$cname]"
|
||||
|
||||
|
|
|
@ -8,9 +8,8 @@
|
|||
# Supported configuration keys are the same as for `_approximate', only
|
||||
# starting with `correct'.
|
||||
|
||||
local ret=1 opm="$compstate[pattern_match]" curcontext="${curcontext}"
|
||||
|
||||
[[ "$curcontext" != :correct* ]] && curcontext="${curcontext}:correct"
|
||||
local ret=1 opm="$compstate[pattern_match]"
|
||||
local curcontext="${curcontext/:[^:]#:/:correct:}"
|
||||
|
||||
compstate[pattern_match]='-'
|
||||
|
||||
|
|
|
@ -18,19 +18,19 @@ _setup "$1"
|
|||
|
||||
name="$2"
|
||||
|
||||
zstyle -s ":completion${curcontext}:$1" format format ||
|
||||
zstyle -s ":completion${curcontext}:descriptions" format format
|
||||
zstyle -s ":completion:${curcontext}:$1" format format ||
|
||||
zstyle -s ":completion:${curcontext}:descriptions" format format
|
||||
|
||||
zstyle -s ":completion${curcontext}:$1" hidden hidden
|
||||
zstyle -s ":completion:${curcontext}:$1" hidden hidden
|
||||
if [[ "$hidden" = (all|yes|true|1|on) ]]; then
|
||||
[[ "$hidden" = all ]] && format=''
|
||||
hide=(-n)
|
||||
fi
|
||||
zstyle -s ":completion${curcontext}:$1" group-name gname &&
|
||||
zstyle -s ":completion:${curcontext}:$1" group-name gname &&
|
||||
[[ -z "$gname" ]] && gname="$1"
|
||||
zstyle -s ":completion${curcontext}:$1" matcher match &&
|
||||
zstyle -s ":completion:${curcontext}:$1" matcher match &&
|
||||
match=(-M "${(q)match}")
|
||||
if zstyle -a ":completion${curcontext}:$1" ignored-patterns _comp_ignore; then
|
||||
if zstyle -a ":completion:${curcontext}:$1" ignored-patterns _comp_ignore; then
|
||||
ign=(-F _comp_ignore)
|
||||
else
|
||||
_comp_ignore=()
|
||||
|
|
|
@ -7,13 +7,12 @@
|
|||
# the expansions done produce no result or do not change the original
|
||||
# word from the line.
|
||||
|
||||
local exp word="$PREFIX$SUFFIX" sort expr expl curcontext="${curcontext}"
|
||||
|
||||
[[ "$curcontext" != :expand* ]] && curcontext="${curcontext}:expand"
|
||||
local exp word="$PREFIX$SUFFIX" sort expr expl
|
||||
local curcontext="${curcontext/:[^:]#:/:expand:}"
|
||||
|
||||
# First, see if we should insert all *completions*.
|
||||
|
||||
if zstyle -s ":completion${curcontext}:" completions expr &&
|
||||
if zstyle -s ":completion:${curcontext}:" completions expr &&
|
||||
[[ "${(e):-\$[$expr]}" -eq 1 ]]; then
|
||||
compstate[insert]=all
|
||||
return 1
|
||||
|
@ -30,7 +29,7 @@ exp=("$word")
|
|||
# First try substitution. That weird thing spanning multiple lines
|
||||
# changes quoted spaces, tabs, and newlines into spaces.
|
||||
|
||||
zstyle -s ":completion${curcontext}:" substitute expr &&
|
||||
zstyle -s ":completion:${curcontext}:" substitute expr &&
|
||||
[[ "${(e):-\$[$expr]}" -eq 1 ]] &&
|
||||
exp=( "${(e)exp//\\[
|
||||
]/ }" )
|
||||
|
@ -41,7 +40,7 @@ zstyle -s ":completion${curcontext}:" substitute expr &&
|
|||
|
||||
# Now try globbing.
|
||||
|
||||
zstyle -s ":completion${curcontext}:" glob expr &&
|
||||
zstyle -s ":completion:${curcontext}:" glob expr &&
|
||||
[[ "${(e):-\$[$expr]}" -eq 1 ]] &&
|
||||
exp=( ${~exp}(N) )
|
||||
|
||||
|
@ -53,7 +52,7 @@ zstyle -s ":completion${curcontext}:" glob expr &&
|
|||
|
||||
# Now add as matches whatever the user requested.
|
||||
|
||||
zstyle -s ":completion${curcontext}:" sort sort
|
||||
zstyle -s ":completion:${curcontext}:" sort sort
|
||||
|
||||
[[ "$sort" = (yes|true|1|on) ]] && exp=( "${(@o)exp}" )
|
||||
|
||||
|
|
|
@ -25,11 +25,11 @@ if [[ "$group[2]" = files ]]; then
|
|||
group=()
|
||||
fi
|
||||
|
||||
if zstyle -s ":completion${curcontext}:all-files" file-patterns tmp &&
|
||||
if zstyle -s ":completion:${curcontext}:all-files" file-patterns tmp &&
|
||||
[[ -n "$tmp" ]]; then
|
||||
aopts=(-g "$tmp")
|
||||
fi
|
||||
if zstyle -s ":completion${curcontext}:directories" file-patterns tmp &&
|
||||
if zstyle -s ":completion:${curcontext}:directories" file-patterns tmp &&
|
||||
[[ -n "$tmp" ]]; then
|
||||
dopts=(-g "$tmp")
|
||||
if [[ "$type" = (*dir*glob*|*glob*dir*) ]]; then
|
||||
|
@ -38,7 +38,7 @@ if zstyle -s ":completion${curcontext}:directories" file-patterns tmp &&
|
|||
type="${type}dir"
|
||||
fi
|
||||
fi
|
||||
if zstyle -s ":completion${curcontext}:globbed-files" file-patterns tmp &&
|
||||
if zstyle -s ":completion:${curcontext}:globbed-files" file-patterns tmp &&
|
||||
[[ -n "$tmp" ]]; then
|
||||
gopts=(-g "$tmp")
|
||||
if [[ "$type" != (*dir*glob*|*glob*dir*) ]]; then
|
||||
|
@ -64,7 +64,7 @@ while _tags; do
|
|||
group[2]=all-files
|
||||
_setup all-files
|
||||
[[ -z "$hasign" ]] &&
|
||||
zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
ign=(-F _comp_ignore)
|
||||
fi
|
||||
_path_files "$opts[@]" "$ign[@]" "$aopts[@]"
|
||||
|
@ -75,7 +75,7 @@ while _tags; do
|
|||
group[2]=globbed-files
|
||||
_setup globbed-files
|
||||
[[ -z "$hasign" ]] &&
|
||||
zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
ign=(-F _comp_ignore)
|
||||
fi
|
||||
_path_files "$opts[@]" "$ign[@]" "$dopts[@]" "$gopts[@]" && return 0
|
||||
|
@ -84,7 +84,7 @@ while _tags; do
|
|||
group[2]=directories
|
||||
_setup directories
|
||||
[[ -z "$hasign" ]] &&
|
||||
zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
ign=(-F _comp_ignore)
|
||||
fi
|
||||
_path_files "$opts[@]" "$ign[@]" "$dopts[@]" && return 0
|
||||
|
@ -94,7 +94,7 @@ while _tags; do
|
|||
group[2]=globbed-files
|
||||
_setup globbed-files
|
||||
[[ -z "$hasign" ]] &&
|
||||
zstyle -a ":completion${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore &&
|
||||
ign=(-F _comp_ignore)
|
||||
fi
|
||||
if [[ "$type" = (*dir*glob*|*glob*dir*) ]]; then
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
# insert possible completions only after the list has been shown at
|
||||
# least once.
|
||||
|
||||
local pre suf curcontext="${curcontext}:list" expr
|
||||
local pre suf expr curcontext="${curcontext/:[^:]#:/:list:}"
|
||||
|
||||
# Get the strings to compare.
|
||||
|
||||
if zstyle -t ":completion${curcontext}:" word; then
|
||||
if zstyle -t ":completion:${curcontext}:" word; then
|
||||
pre="$HISTNO$LBUFFER"
|
||||
suf="$RBUFFER"
|
||||
else
|
||||
|
@ -18,7 +18,7 @@ fi
|
|||
|
||||
# Should we only show a list now?
|
||||
|
||||
zstyle -s ":completion${curcontext}:" condition expr
|
||||
zstyle -s ":completion:${curcontext}:" condition expr
|
||||
if [[ ( -z "$expr" || "${(e):-\$[$expr]}" -eq 1 ) &&
|
||||
( "$pre" != "$_list_prefix" || "$suf" != "$_list_suffix" ) ]]; then
|
||||
|
||||
|
|
|
@ -35,6 +35,8 @@ _failed_tags=()
|
|||
|
||||
typeset -U _lastdescr
|
||||
|
||||
[[ -z "$curcontext" ]] && curcontext=:::
|
||||
|
||||
# Special completion contexts after `~' and `='.
|
||||
|
||||
if compset -P 1 '='; then
|
||||
|
@ -55,7 +57,7 @@ _last_menu_style=()
|
|||
if (( ! $# )); then
|
||||
local tmp
|
||||
|
||||
zstyle -a ":completion${curcontext}:" completer tmp
|
||||
zstyle -a ":completion:${curcontext}:" completer tmp
|
||||
set -- "$tmp[@]"
|
||||
fi
|
||||
|
||||
|
@ -123,7 +125,7 @@ if (( $compstate[nmatches] )); then
|
|||
fi
|
||||
elif [[ compstate[matcher] -eq compstate[total_matchers] &&
|
||||
$#_lastdescr -ne 0 ]] &&
|
||||
zstyle -s ":completion${curcontext}:warnings" format format; then
|
||||
zstyle -s ":completion:${curcontext}:warnings" format format; then
|
||||
local str
|
||||
|
||||
_lastdescr=( "\`${(@)^_lastdescr:#}'" )
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#autoload
|
||||
|
||||
# This is intended to be used as a completer function after the normal
|
||||
# completer as in: `zstyle ":completion:*" completer _complete _match'.
|
||||
# completer as in: `zstyle ":completion:::::" completer _complete _match'.
|
||||
# It temporarily switches on pattern matching, allowing you to try
|
||||
# completion on patterns without having to setopt glob_complete.
|
||||
#
|
||||
|
@ -10,7 +10,7 @@
|
|||
# be expanded using globbing.
|
||||
|
||||
local tmp opm="$compstate[pattern_match]" ret=0 orig ins
|
||||
local curcontext="${curcontext}:match"
|
||||
local curcontext="${curcontext/:[^:]#:/:match:}"
|
||||
|
||||
# Do nothing if we don't have a pattern or there are still global
|
||||
# match specifications to try.
|
||||
|
@ -19,8 +19,8 @@ tmp="${${:-$PREFIX$SUFFIX}#[~=]}"
|
|||
[[ "$tmp:q" = "$tmp" ||
|
||||
compstate[matcher] -ne compstate[total_matchers] ]] && return 1
|
||||
|
||||
zstyle -s ":completion${curcontext}:" original orig
|
||||
zstyle -b ":completion${curcontext}:" insert-unambiguous ins
|
||||
zstyle -s ":completion:${curcontext}:" original orig
|
||||
zstyle -b ":completion:${curcontext}:" insert-unambiguous ins
|
||||
|
||||
# Try completion without inserting a `*'?
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
#autoload
|
||||
|
||||
local curcontext="${curcontext}:menu"
|
||||
local curcontext="${curcontext/:[^:]#:/:menu:}"
|
||||
|
||||
# This completer is an example showing how menucompletion can be
|
||||
# implemented with the new completion system.
|
||||
# Use this one before the normal _complete completer, as in:
|
||||
#
|
||||
# zstyle ":completion:*" completer _menu _complete
|
||||
# zstyle ":completion:::::" completer _menu _complete
|
||||
|
||||
if [[ -n "$compstate[old_list]" ]]; then
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ local format
|
|||
|
||||
_tags messages || return 1
|
||||
|
||||
zstyle -s ":completion${curcontext}:messages" format format ||
|
||||
zstyle -s ":completion${curcontext}:descriptions" format format
|
||||
zstyle -s ":completion:${curcontext}:messages" format format ||
|
||||
zstyle -s ":completion:${curcontext}:descriptions" format format
|
||||
|
||||
if [[ -n "$format" ]]; then
|
||||
zformat -f format "$format" "d:$1" "${(@)argv[2,-1]}"
|
||||
|
|
|
@ -16,7 +16,7 @@ local curcontext="$curcontext"
|
|||
|
||||
command="$words[1]"
|
||||
if [[ CURRENT -eq 1 ]]; then
|
||||
curcontext="${curcontext}:-command-"
|
||||
curcontext="${curcontext%:*:*}:-command-:"
|
||||
|
||||
comp="$_comps[-command-]"
|
||||
[[ -z "$comp" ]] || "$comp" && ret=0
|
||||
|
@ -26,15 +26,15 @@ else
|
|||
if [[ "$command[1]" == '=' ]]; then
|
||||
eval cmd1\=$command
|
||||
cmd2="$command[2,-1]"
|
||||
curcontext="${curcontext}::${cmd2}:"
|
||||
curcontext="${curcontext%:*:*}:${cmd2}:"
|
||||
elif [[ "$command" == */* ]]; then
|
||||
cmd1="$command"
|
||||
cmd2="${command:t}"
|
||||
curcontext="${curcontext}::${cmd2}:"
|
||||
curcontext="${curcontext%:*:*}:${cmd2}:"
|
||||
else
|
||||
cmd1="$command"
|
||||
cmd2="$commands[$command]"
|
||||
curcontext="${curcontext}::${cmd1}:"
|
||||
curcontext="${curcontext%:*:*}:${cmd1}:"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#autoload
|
||||
|
||||
local curcontext="${curcontext}:oldlist" list
|
||||
local curcontext="${curcontext/:[^:]#:/:oldlist:}" list
|
||||
|
||||
zstyle -s ":completion${curcontext}:" list list
|
||||
zstyle -s ":completion:${curcontext}:" list list
|
||||
|
||||
# If this is a listing widget and there is already an old list,
|
||||
# and either the style :oldlist:list is `always', or it is not `never'
|
||||
|
@ -34,7 +34,7 @@ fi
|
|||
if [[ -z $compstate[old_insert] && -n $compstate[old_list] ]]; then
|
||||
compstate[old_list]=keep
|
||||
elif [[ $WIDGET = *complete(|-prefix|-word) ]] &&
|
||||
zstyle -t ":completion${curcontext}:" menu; then
|
||||
zstyle -t ":completion:${curcontext}:" menu; then
|
||||
if [[ -n $compstate[old_insert] ]]; then
|
||||
compstate[old_list]=keep
|
||||
if [[ $WIDGET = *reverse* ]]; then
|
||||
|
|
|
@ -82,7 +82,7 @@ while getopts "P:S:qr:R:W:F:J:V:X:f/g:M:12n" opt; do
|
|||
done
|
||||
|
||||
if [[ -z "$_file_pat_checked" ]] &&
|
||||
zstyle -s ":completion${curcontext}:files" file-patterns tmp1 &&
|
||||
zstyle -s ":completion:${curcontext}:files" file-patterns tmp1 &&
|
||||
[[ -n "$tmp1" ]]; then
|
||||
if [[ "$tmp1" = '*(-/)' ]]; then
|
||||
gopt=''
|
||||
|
@ -126,7 +126,7 @@ if [[ "$sopt" = - ]]; then
|
|||
fi
|
||||
fi
|
||||
|
||||
if zstyle -s ":completion${curcontext}:files" sort tmp1; then
|
||||
if zstyle -s ":completion:${curcontext}:files" sort tmp1; then
|
||||
case "$tmp1" in
|
||||
*size*) sort=oL;;
|
||||
*links*) sort=ol;;
|
||||
|
@ -159,7 +159,7 @@ fi
|
|||
|
||||
# Skip over sequences of slashes.
|
||||
|
||||
zstyle -t ":completion${curcontext}:paths" squeeze-slashes && skips=yes
|
||||
zstyle -t ":completion:${curcontext}:paths" squeeze-slashes && skips=yes
|
||||
|
||||
# We get the prefix and the suffix from the line and save the whole
|
||||
# original string. Then we see if we will do menucompletion.
|
||||
|
@ -293,7 +293,7 @@ for prepath in "$prepaths[@]"; do
|
|||
[[ ! -o globdots && "$PREFIX" = .* ]] &&
|
||||
tmp2=( "$tmp2[@]" ${^tmp1}.*(-/) )
|
||||
if [[ -o globdots || "$PREFIX" = .* ]] &&
|
||||
zstyle -s ":completion${curcontext}:paths" special-dirs atmp; then
|
||||
zstyle -s ":completion:${curcontext}:paths" special-dirs atmp; then
|
||||
if [[ "$atmp" = (yes|true|1|on) ]]; then
|
||||
tmp2=( "$tmp2[@]" . .. )
|
||||
elif [[ "$atmp" = .. ]]; then
|
||||
|
@ -305,7 +305,7 @@ for prepath in "$prepaths[@]"; do
|
|||
[[ ! -o globdots && "$PREFIX" = .* ]] &&
|
||||
tmp2=( "$tmp2[@]" ${^tmp1}.${^~pats} )
|
||||
if (( $#tmp2 )) &&
|
||||
zstyle -s ":completion${curcontext}:files" ignore-parents rem &&
|
||||
zstyle -s ":completion:${curcontext}:files" ignore-parents rem &&
|
||||
[[ ( "$rem" != *dir* || "$pats" = '*(-/)' ) &&
|
||||
( "$rem" != *..* || "$tmp1" = *../* ) ]]; then
|
||||
if [[ "$rem" = *parent* ]]; then
|
||||
|
@ -330,7 +330,7 @@ for prepath in "$prepaths[@]"; do
|
|||
expl=( "$expl[@]" -F _comp_ignore )
|
||||
fi
|
||||
if [[ "$sopt" = *[/f]* && ( -o globdots || "$PREFIX" = .* ) ]] &&
|
||||
zstyle -s ":completion${curcontext}:paths" special-dirs atmp; then
|
||||
zstyle -s ":completion:${curcontext}:paths" special-dirs atmp; then
|
||||
if [[ "$atmp" = (yes|true|1|on) ]]; then
|
||||
tmp2=( "$tmp2[@]" . .. )
|
||||
elif [[ "$atmp" = .. ]]; then
|
||||
|
@ -465,8 +465,8 @@ for prepath in "$prepaths[@]"; do
|
|||
compquote tmp1 tmp2
|
||||
|
||||
if [[ -n $menu ]] ||
|
||||
! zstyle -t ":completion${curcontext}:paths" expand suffix; then
|
||||
(( $#tmp4 )) && zstyle -t ":completion${curcontext}:paths" cursor &&
|
||||
! zstyle -t ":completion:${curcontext}:paths" expand suffix; then
|
||||
(( $#tmp4 )) && zstyle -t ":completion:${curcontext}:paths" cursor &&
|
||||
compstate[to_end]=''
|
||||
if [[ "$tmp3" = */* ]]; then
|
||||
compadd -Qf "$mopts[@]" -p "$linepath$tmp2" -s "/${tmp3#*/}" \
|
||||
|
@ -555,7 +555,7 @@ done
|
|||
|
||||
exppaths=( "${(@)exppaths:#$eorig}" )
|
||||
|
||||
if zstyle -t ":completion${curcontext}:paths" expand prefix &&
|
||||
if zstyle -t ":completion:${curcontext}:paths" expand prefix &&
|
||||
[[ $#exppaths -gt 0 && nm -eq compstate[nmatches] ]]; then
|
||||
PREFIX="${opre}"
|
||||
SUFFIX="${osuf}"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
local val nm="$compstate[nmatches]"
|
||||
|
||||
if zstyle -a ":completion${curcontext}:$1" list-colors val; then
|
||||
if zstyle -a ":completion:${curcontext}:$1" list-colors val; then
|
||||
zmodload -e zsh/complist || zmodload -i zsh/complist
|
||||
if [[ "$1" = default ]]; then
|
||||
ZLS_COLORS="${(j.:.)${(@)val:gs/:/\\\:}}"
|
||||
|
@ -11,7 +11,7 @@ if zstyle -a ":completion${curcontext}:$1" list-colors val; then
|
|||
fi
|
||||
fi
|
||||
|
||||
if zstyle -s ":completion${curcontext}:$1" list-packed val; then
|
||||
if zstyle -s ":completion:${curcontext}:$1" list-packed val; then
|
||||
if [[ "$val" = (yes|true|1|on) ]]; then
|
||||
compstate[list]="${compstate[list]} packed"
|
||||
else
|
||||
|
@ -21,7 +21,7 @@ else
|
|||
compstate[list]="$_saved_list"
|
||||
fi
|
||||
|
||||
if zstyle -s ":completion${curcontext}:$1" list-rows-first val; then
|
||||
if zstyle -s ":completion:${curcontext}:$1" list-rows-first val; then
|
||||
if [[ "$val" = (yes|true|1|on) ]]; then
|
||||
compstate[list]="${compstate[list]} rows"
|
||||
else
|
||||
|
@ -31,7 +31,7 @@ else
|
|||
compstate[list]="$_saved_list"
|
||||
fi
|
||||
|
||||
if zstyle -s ":completion${curcontext}:$1" last-prompt val; then
|
||||
if zstyle -s ":completion:${curcontext}:$1" last-prompt val; then
|
||||
if [[ "$val" = (yes|true|1|on) ]]; then
|
||||
compstate[last_prompt]=yes
|
||||
else
|
||||
|
@ -41,7 +41,7 @@ else
|
|||
compstate[last_prompt]="$_saved_lastprompt"
|
||||
fi
|
||||
|
||||
if zstyle -s ":completion${curcontext}:$1" accept-exact val; then
|
||||
if zstyle -s ":completion:${curcontext}:$1" accept-exact val; then
|
||||
if [[ "$val" = (yes|true|1|on) ]]; then
|
||||
compstate[exact]=accept
|
||||
else
|
||||
|
@ -54,7 +54,7 @@ fi
|
|||
[[ _last_nmatches -ge 0 && _last_nmatches -ne nm ]] &&
|
||||
_menu_style=( "$_last_menu_style[@]" "$_menu_style[@]" )
|
||||
|
||||
if zstyle -a ":completion${curcontext}:$1" menu val; then
|
||||
if zstyle -a ":completion:${curcontext}:$1" menu val; then
|
||||
_last_nmatches="$nm"
|
||||
_last_menu_style=( "$val[@]" )
|
||||
else
|
||||
|
|
|
@ -6,15 +6,15 @@ comptry options
|
|||
case "$curcontext" in
|
||||
# Some silly examples commented out:
|
||||
#
|
||||
# *::*p[bgpn]m:*) # change the order for file-completion
|
||||
# *:*:*:*p[bgpn]m:*) # change the order for file-completion
|
||||
# comptry globbed-files directories
|
||||
# comptry all-files
|
||||
# ;;
|
||||
# *::dvips::-o*) # automatic context set by _arguments
|
||||
# *:*:*:dvips:-o*) # automatic context set by _arguments
|
||||
# comptry all-files
|
||||
# return
|
||||
# ;;
|
||||
# *::kill:*)
|
||||
# *:*:*:kill:*)
|
||||
# comptry processes
|
||||
# return # this return ensures that we use only processes
|
||||
# ;;
|
||||
|
|
|
@ -7,10 +7,10 @@ if (( $# )); then
|
|||
local curcontext="$curcontext" order tag nodef
|
||||
|
||||
if [[ "$1" = -C?* ]]; then
|
||||
curcontext="${curcontext}:${1[3,-1]}"
|
||||
curcontext="${curcontext%:*}:${1[3,-1]}"
|
||||
shift
|
||||
elif [[ "$1" = -C ]]; then
|
||||
curcontext="${curcontext}:${2}"
|
||||
curcontext="${curcontext%:*}:${2}"
|
||||
shift 2
|
||||
else
|
||||
targs=()
|
||||
|
@ -18,7 +18,7 @@ if (( $# )); then
|
|||
|
||||
[[ "$1" = -(|-) ]] && shift
|
||||
|
||||
if zstyle -a ":completion${curcontext}" group-order order; then
|
||||
if zstyle -a ":completion:${curcontext}:" group-order order; then
|
||||
local name
|
||||
|
||||
for name in "$order[@]"; do
|
||||
|
@ -42,7 +42,7 @@ if (( $# )); then
|
|||
|
||||
if [[ -n "$_sort_tags" ]]; then
|
||||
"$_sort_tags" "$@"
|
||||
elif zstyle -a ":completion${curcontext}" tag-order order; then
|
||||
elif zstyle -a ":completion:${curcontext}:" tag-order order; then
|
||||
|
||||
for tag in $order; do
|
||||
case $tag in
|
||||
|
|
|
@ -475,11 +475,11 @@ compstyle() {
|
|||
zstyle ':completion:*' verbose 'yes'
|
||||
zstyle ':completion:*' prefix-needed 'yes'
|
||||
zstyle ':completion:*' prefix-hidden 'no'
|
||||
zstyle ':completion:(correct|approximate):' max-errors '2' numeric
|
||||
zstyle ':completion:correct:' prompt 'correct to:'
|
||||
zstyle ':completion:*' completer '_complete'
|
||||
zstyle ':completion*:default' list-colors "${(s.:.)ZLS_COLORS:-${ZLS_COLOURS:-no=0:fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:ex=0}}"
|
||||
(( $+SELECTMIN )) && zstyle ':completion*:default' menu "select=$SELECTMIN"
|
||||
zstyle ':completion:*:(correct|approximate):*' max-errors '2' numeric
|
||||
zstyle ':completion:*:correct:*' prompt 'correct to:'
|
||||
zstyle ':completion:*::::' completer '_complete'
|
||||
zstyle ':completion:*::::default' list-colors "${(s.:.)ZLS_COLORS:-${ZLS_COLOURS:-no=0:fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:ex=0}}"
|
||||
(( $+SELECTMIN )) && zstyle ':completion:*::::default' menu "select=$SELECTMIN"
|
||||
zstyle ':completion:*' tag-order 'arguments values' options \
|
||||
globbed-files directories all-files
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ tmp2=("$tmp2[@]" $_ra_left${(M)^short_bool:#$~tmp1} $_ra_left${(M)^short_intleve
|
|||
tmp3=("$tmp3[@]" $_ra_left${(M)^short_hasarg:#$~tmp1} $_ra_left${(M)^short_configfile:#$~tmp1} $_ra_left${(M)^short_arbitem:#$~tmp1})
|
||||
_describe -o option tmp2 -- tmp3 -S='
|
||||
|
||||
comp_opt='{ ! zstyle -t ":completion${curcontext}:options" prefix-needed || [[ "$PREFIX" = -* ]] }'" && { $comp_short; $comp_long }"
|
||||
comp_opt='{ ! zstyle -t ":completion:${curcontext}:options" prefix-needed || [[ "$PREFIX" = -* ]] }'" && { $comp_short; $comp_long }"
|
||||
|
||||
regex_short=()
|
||||
regex_long=()
|
||||
|
|
|
@ -39,7 +39,7 @@ _deb_packages () {
|
|||
return
|
||||
}
|
||||
|
||||
zstyle -s ":completion${curcontext}" packageset pkgset
|
||||
zstyle -s ":completion:${curcontext}:" packageset pkgset
|
||||
|
||||
[[ "$pkgset" = (installed|uninstalled|avail|available) ]] || {
|
||||
pkgset="$command"
|
||||
|
|
|
@ -40,7 +40,7 @@ _cvs_command () {
|
|||
|
||||
cmd="${${(k)cmds[(R)* $words[1] *]}:-${(k)cmds[(i)$words[1]]}}"
|
||||
if (( $#cmd )); then
|
||||
curcontext="${curcontext%:*}:$cmd"
|
||||
curcontext="${curcontext%:*:*}:cvs-${cmd}:"
|
||||
_cvs_$cmd
|
||||
else
|
||||
_message "unknown cvs command: $words[1]"
|
||||
|
@ -390,7 +390,7 @@ _cvs_watchers () {
|
|||
|
||||
(( $+functions[_cvs_loadstat] )) ||
|
||||
_cvs_loadstat () {
|
||||
zstyle -t ":completion${curcontext}:cvs" disable-stat && return
|
||||
zstyle -t ":completion:${curcontext}:" disable-stat && return
|
||||
(( $+_cvs_loadstat_tried )) && return
|
||||
_cvs_loadstat_tried=yes
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
local expl domains tmp
|
||||
|
||||
if ! zstyle -a ":completion${curcontext}:domains" domains domains; then
|
||||
if ! zstyle -a ":completion:${curcontext}:domains" domains domains; then
|
||||
if (( ! $+_cache_domains )); then
|
||||
_cache_domains=()
|
||||
if [[ -f /etc/resolv.conf ]]; then
|
||||
|
|
|
@ -4,7 +4,7 @@ local expl groups
|
|||
|
||||
_wanted groups expl group || return 1
|
||||
|
||||
if ! zstyle -a ":completion${curcontext}:groups" groups groups; then
|
||||
if ! zstyle -a ":completion:${curcontext}:groups" groups groups; then
|
||||
(( $+_cache_groups )) ||
|
||||
if (( ${+commands[ypcat]} )); then
|
||||
: ${(A)_cache_groups:=${${(s: :)$(ypcat group.byname)}%%:*}} # If you use YP
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
local expl hosts
|
||||
|
||||
if ! zstyle -a ":completion${curcontext}:hosts" hosts hosts; then
|
||||
if ! zstyle -a ":completion:${curcontext}:hosts" hosts hosts; then
|
||||
(( $+_cache_hosts )) ||
|
||||
: ${(A)_cache_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
local expl ports
|
||||
|
||||
if ! zstyle -a ":completion${curcontext}:ports" ports ports; then
|
||||
if ! zstyle -a ":completion:${curcontext}:ports" ports ports; then
|
||||
(( $+_cache_ports )) ||
|
||||
: ${(A)_cache_ports:=${${(M)${${(f)"$(</etc/services)"}:#\#*}#*/tcp}%%[ ]*}}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ local curcontext="$curcontext" state line expl
|
|||
typeset -A opt_args
|
||||
|
||||
[[ $CURRENT -eq 2 ]] && _wanted options expl option &&
|
||||
{ ! zstyle -t ":completion${curcontext}:options" prefix-needed ||
|
||||
{ ! zstyle -t ":completion:${curcontext}:options" prefix-needed ||
|
||||
[[ "$PREFIX" = -* ]] } &&
|
||||
compadd -M 'r:|[_-]=* r:|=*' "$expl[@]" - -version
|
||||
|
||||
|
|
|
@ -40,9 +40,9 @@
|
|||
|
||||
local ipre scheme host user uhosts ret=1 expl
|
||||
local urls_path localhttp
|
||||
zstyle -s ":completion${curcontext}:urls" path urls_path ||
|
||||
zstyle -s ":completion:${curcontext}:urls" path urls_path ||
|
||||
urls_path="${ZDOTDIR:-$HOME}/.zsh/urls"
|
||||
zstyle -a ":completion${curcontext}:urls" local localhttp
|
||||
zstyle -a ":completion:${curcontext}:urls" local localhttp
|
||||
local localhttp_servername="$localhttp[1]"
|
||||
local localhttp_documentroot="$localhttp[2]"
|
||||
local localhttp_userdir="$localhttp[3]"
|
||||
|
|
|
@ -7,7 +7,7 @@ local expl users
|
|||
|
||||
_wanted users expl user || return 1
|
||||
|
||||
zstyle -a ":completion${curcontext}:users" users users &&
|
||||
zstyle -a ":completion:${curcontext}:users" users users &&
|
||||
compadd "$expl[@]" "$@" - "$users[@]" && return 0
|
||||
|
||||
compadd "$@" "$expl[@]" - "${(@k)userdirs}"
|
||||
|
|
|
@ -15,7 +15,7 @@ if (( ! $+_color_cache )); then
|
|||
|
||||
# Cache of color names doesn't exist yet, create it.
|
||||
|
||||
zstyle -s ":completion${curcontext}:colors" path file
|
||||
zstyle -s ":completion:${curcontext}:colors" path file
|
||||
if [[ -n "$file" ]]; then
|
||||
_color_cache=( "${(@)${(@f)$(< $file)}[2,-1]##* }" )
|
||||
else
|
||||
|
|
|
@ -286,29 +286,62 @@ was tried. The context depends on such things as the name of the
|
|||
command when completing an argument, and possibily also
|
||||
the name of an option when completing an argument to that option.
|
||||
|
||||
The completion system represents contexts as hierarchical name s
|
||||
with components separated by colons. For example, take the context
|
||||
`tt(:completion:complete::dvips::-o-1)'. The tt(:completion) at the
|
||||
beginning just says that this context is used in the completion system
|
||||
and the tt(:complete) after it is the `completer', which is in overall
|
||||
control of how completion is to be performed; `tt(complete)' is the
|
||||
basic one for ordinary completion, but completers may perform various
|
||||
related tasks such as correction, or modify the behaviour of a later
|
||||
completer (see
|
||||
The context names always consists of the following fields, separated
|
||||
by colons:
|
||||
|
||||
startitem()
|
||||
item()(
|
||||
The literal string tt(completion), saying that this style is used by
|
||||
the completion system.
|
||||
)
|
||||
item()(
|
||||
The var(function); in many cases this field will be blank, but when
|
||||
the completion system is called from other functions, like
|
||||
tt(predict-on) or one of the functions in the tt(Command) directory of
|
||||
the distribution, this field contains the (probably abbreviated) name
|
||||
of that function.
|
||||
)
|
||||
item()(
|
||||
The var(completer) currently active, i.e. the name of the completer
|
||||
function without the leading underscore. Such a completer is in
|
||||
overall control of how completion is to be performed; `tt(complete)'
|
||||
is the basic one for ordinary completion, but completers may perform
|
||||
various related tasks such as correction, or modify the behaviour of a
|
||||
later completer (see
|
||||
ifzman(the section `Control Functions' below)\
|
||||
ifnzman(noderef(Control Functions))
|
||||
for more information). Strictly, the completer is `tt(_complete)', but the
|
||||
underscore is omitted from the context; this is also true of `tt(correct)',
|
||||
`tt(approximate)', etc. The tt(::dvips:) shows that we are
|
||||
completing arguments for the tt(dvips) command. The doubled colon
|
||||
will appear only before and after the name of the command, but note
|
||||
that the second colon after the command name is only added when
|
||||
there is at least one more component (otherwise the whole name ends in
|
||||
a colon, e.g. `tt(...dvips:)'). Finally, the string tt(-o-1) says that we
|
||||
are completing the first argument of the option `tt(-o)' to the command.
|
||||
Note that the existence of a context like this does not necessarily mean it
|
||||
is handled specially by the completion system; this is determined by trying
|
||||
to match the context as specifically as possible, as described below.
|
||||
for more information).
|
||||
)
|
||||
item()(
|
||||
The var(context) or var(command). This is either one of the special
|
||||
context names such as tt(-condition-) as explained for the
|
||||
tt(_complete) completer below, or the name of the command we are
|
||||
completing arguments for. Commands that have sub-commands usually
|
||||
modify this field to contain the name of the command followed by a
|
||||
minus sign and the sub-command (e.g. the completion function for the
|
||||
tt(cvs) command sets this field to striings such as tt(cvs-add) when
|
||||
completing for the tt(add) sub-command).
|
||||
)
|
||||
item()(
|
||||
The var(argument), describing which argument we are
|
||||
completing. Normally this is either a string of the form
|
||||
tt(argument-)var(n), where var(n) is the number of the argument or it
|
||||
is a string of the form tt(-)var(opt)tt(-)var(n) when completing the
|
||||
var(n)'th argument of the option var(opt).
|
||||
)
|
||||
item()(
|
||||
The var(tag). Tags are used for two purposes: completion functions use
|
||||
them to describe the types of matches they can generate for a certain
|
||||
context and they use them to simplify the definition of styles that
|
||||
are tested.
|
||||
)
|
||||
enditem()
|
||||
|
||||
As an example, leaving out the var(tag) for the moment, the context name
|
||||
`tt(:completion::complete:dvips:-o-1:files)' says that normal
|
||||
completion was attempted on an argument of the tt(dvips)
|
||||
command. More precisely: completion was attempted on the first
|
||||
argument after the tt(-o) option.
|
||||
|
||||
In many of the possible contexts the completion system can generate
|
||||
matches, often multiple types of matches. These types are represented as
|
||||
|
@ -335,9 +368,8 @@ Completion behaviour can be modified by various other
|
|||
(see
|
||||
ifzman(zmanref(zshmodules))\
|
||||
ifnzman(noderef(The zsh/zutil Module))).
|
||||
The full context used in looking up styles is the prefix `tt(:completion)'
|
||||
followed by the context as described above, followed by another colon and
|
||||
the name of the tag currently being tried for completion.
|
||||
When looking up styles the completion system uses full context names,
|
||||
including the tag.
|
||||
|
||||
Styles determine such things as how the matches are generated; some of them
|
||||
correspond to shell options (for example, the use of menu completion), but
|
||||
|
@ -366,14 +398,14 @@ listed with the full job texts and the command lines of the processes (the
|
|||
latter is achieved by calling the tt(ps) command). To make this builtin
|
||||
list the matches only as numbers one could call:
|
||||
|
||||
example(zstyle ':completion:*::kill:*' verbose no)
|
||||
example(zstyle ':completion:*:*:kill:*' verbose no)
|
||||
|
||||
Furhtermore, if one wanted to see the command lines for processes but not the
|
||||
Furthermore, if one wanted to see the command lines for processes but not the
|
||||
job texts one could use the fact that the tag name is appended to the
|
||||
context name when styles are looked up. As the function for the tt(kill)
|
||||
builtin command uses the tags tt(jobs) and tt(processes), we have:
|
||||
|
||||
example(zstyle ':completion:*::kill:*:jobs' verbose no)
|
||||
example(zstyle ':completion:*:*:kill:*:jobs' verbose no)
|
||||
|
||||
Note that the order in which styles are em(defined) does not matter; the
|
||||
style mechanism uses the most specific possible match for a particular
|
||||
|
@ -440,9 +472,6 @@ corrections
|
|||
item(tt(cursors))(
|
||||
for cursor names used by X programs
|
||||
)
|
||||
item(tt(cvs))(
|
||||
used only to look up the value of the tt(disable-stat) style
|
||||
)
|
||||
item(tt(default))(
|
||||
used to look up default values for various styles that may also be set
|
||||
for tags that are used when generating matches
|
||||
|
@ -681,9 +710,9 @@ example, to use completion, approximation and correction for normal
|
|||
completion, completion and correction for incremental completion and
|
||||
only completion for prediction one could use:
|
||||
|
||||
example(zstyle ':completion:*' completer _complete _correct _approximate
|
||||
zstyle ':completion:incremental' completer _complete _correct
|
||||
zstyle ':completion:predict' completer _complete)
|
||||
example(zstyle ':completion:::::' completer _complete _correct _approximate
|
||||
zstyle ':completion:incremental::::' completer _complete _correct
|
||||
zstyle ':completion:predict::::' completer _complete)
|
||||
)
|
||||
item(tt(completions))(
|
||||
This style is used by the tt(_expand) completer function.
|
||||
|
@ -704,7 +733,7 @@ should be an expression usable inside a `tt($((...)))'
|
|||
arithmetical expression. In this case, delaying will be done if the
|
||||
expression evaluates to `tt(1)'. For example, with
|
||||
|
||||
example(zstyle ':completion:list' condition 'NUMERIC != 1')
|
||||
example(zstyle ':completion:*:list:::' condition 'NUMERIC != 1')
|
||||
|
||||
delaying will be done only if given an explicit numeric argument
|
||||
other than `tt(1)'.
|
||||
|
@ -716,7 +745,7 @@ after the first ambiguous pathname component even when menucompletion
|
|||
is used.
|
||||
)
|
||||
item(tt(disable-stat))(
|
||||
This is used with the tt(cvs) tag by the function completing for the
|
||||
This is used with the an empty tag by the function completing for the
|
||||
tt(cvs) command to decide if the tt(zsh/stat) module should be used to
|
||||
generate only names of modified files in the appropriate places.
|
||||
)
|
||||
|
@ -761,7 +790,7 @@ specified another order to be used with the tt(tag-order) style).
|
|||
For example, to make the completion system first try only filenames
|
||||
matching the pattern tt(*.o) for the tt(rm) command, one would use:
|
||||
|
||||
example(zstyle ':completion:*::rm*:globbed-files' file-patterns '*.o')
|
||||
example(zstyle ':completion:*:*:rm:*:globbed-files' file-patterns '*.o')
|
||||
|
||||
With this, using only filenames ending in tt(.o) will be the first
|
||||
choice and other filenames will only be used if what is on the line
|
||||
|
@ -821,8 +850,8 @@ aliases and shell functions and reserved words as possible
|
|||
completions. To have the external commands and shell functions listed
|
||||
separately, one can set:
|
||||
|
||||
example(zstyle ':completion:*:-command-:commands' group-name commands
|
||||
zstyle ':completion:*:-command-:functions' group-name functions)
|
||||
example(zstyle ':completion:*:*:-command-:*:commands' group-name commands
|
||||
zstyle ':completion:*:*:-command-:*:functions' group-name functions)
|
||||
|
||||
This also means that if the same name is used for different types of
|
||||
matches, then those matches will be displayed together in the same
|
||||
|
@ -851,7 +880,7 @@ For example, to have names of builtin commands, shell functions and
|
|||
external commands appear in this order when completing in command
|
||||
position one would set:
|
||||
|
||||
example(zstyle ':completion:*:-command-' group-order builtins functions commands)
|
||||
example(zstyle ':completion:*:*:-command-' group-order builtins functions commands)
|
||||
)
|
||||
item(tt(groups))(
|
||||
A style holding the names of the groups that should be completed. If
|
||||
|
@ -924,7 +953,11 @@ item(tt(insert-unambiguous))(
|
|||
This is used by the tt(_match) and tt(_approximate) completer
|
||||
functions. If it is set to `true', the completer will start menu
|
||||
completion only if no unambiguous string could be generated that is at
|
||||
least as long as the original string from the line.
|
||||
least as long as the original string from the line. Note that the
|
||||
tt(_approximate) completer uses it after setting the completer field
|
||||
in the context name to one of tt(correct-)var(num) or
|
||||
tt(approximate-)var(num), where var(num) is the number of errors that
|
||||
were accepted.
|
||||
)
|
||||
item(tt(last-prompt))(
|
||||
This is used to determine if the completion code should try to put the
|
||||
|
@ -1046,7 +1079,7 @@ If the value for this style contains the string tt(numeric), the
|
|||
completer function will take any numeric argument as the
|
||||
maximum number of errors allowed. For example, with
|
||||
|
||||
example(zstyle ':completion:approximate' accept 2 numeric)
|
||||
example(zstyle ':completion:*:approximate:::' max-errors 2 numeric)
|
||||
|
||||
two errors will be allowed if no numeric argument is given. However,
|
||||
with a numeric argument of six (as in `tt(ESC-6 TAB)'), up to six
|
||||
|
@ -1116,7 +1149,10 @@ This is used by the tt(_approximate), tt(_correct) and tt(_match)
|
|||
completers. The first two use it to decide if the original string should
|
||||
be added as one possible completion. Normally, this is done only if there
|
||||
at least two possible corrections, but if this style is set to `true', it
|
||||
will always be added.
|
||||
will always be added. Note that these completers use this style after
|
||||
setting the completer field in the context name to
|
||||
tt(correct-)var(num) or tt(approximate-)var(num), where var(num) is
|
||||
the number of errors that were accepted.
|
||||
|
||||
For the tt(_match) completer, if this style is set to
|
||||
tt(only), it will try to generate matches without inserting a
|
||||
|
@ -1129,7 +1165,7 @@ item(tt(packageset))(
|
|||
A style containing an override for the default package set
|
||||
for that context. For example,
|
||||
|
||||
example(zstyle :completion:complete::dpkg::--status-1 packageset avail)
|
||||
example(zstyle :completion:*:complete:dpkg:--status-1: packageset avail)
|
||||
|
||||
will cause available packages, rather than only installed packages,
|
||||
to be completed for `dpkg --status'.
|
||||
|
@ -1240,7 +1276,7 @@ non-empty string it should be an expression usable inside a `tt($((...)))'
|
|||
arithmetical expression. In this case, expansion of substitutions will
|
||||
be done if the expression evaluates to `tt(1)'. For example, with
|
||||
|
||||
example(zstyle ':completion:expand' substitute '${NUMERIC:-1} != 1')
|
||||
example(zstyle ':completion:*:expand:::' substitute '${NUMERIC:-1} != 1')
|
||||
|
||||
substitution will be performed only if given an explicit numeric
|
||||
argument other than `tt(1)', as by typing `tt(ESC 2 TAB)'.
|
||||
|
@ -1256,7 +1292,7 @@ found, the next value is used.
|
|||
For example,
|
||||
|
||||
example(
|
||||
zstyle :completion:complete::gunzip: tag-order \
|
||||
zstyle ':completion:*:complete:gunzip:*' tag-order \
|
||||
'globbed-files directories' all-files
|
||||
)
|
||||
|
||||
|
@ -1330,7 +1366,7 @@ arguments are given, the set of functions to try is taken from the
|
|||
tt(completer) style. For example, to use normal completion and
|
||||
correction if that doesn't generate any matches:
|
||||
|
||||
example(zstyle ':completion:*' completer _complete _correct)
|
||||
example(zstyle ':completion:::::' completer _complete _correct)
|
||||
|
||||
after calling tt(compinit). The default value for this style set up
|
||||
in tt(compinit) is `tt(_complete)', i.e. normally only ordinary
|
||||
|
@ -1442,7 +1478,7 @@ counted. The resulting list of corrected and completed strings is then
|
|||
presented to the user. The intended use of this completer function is to
|
||||
try after the normal tt(_complete) completer by setting:
|
||||
|
||||
example(zstyle ':completion:*' completer _complete _approximate)
|
||||
example(zstyle ':completion:::::' completer _complete _approximate)
|
||||
|
||||
This will give correcting completion if and only if
|
||||
normal completion doesn't yield any possible completions. When
|
||||
|
@ -1471,9 +1507,9 @@ different top-level context name.
|
|||
|
||||
For example, with:
|
||||
|
||||
example(zstyle ':completion:*' completer _complete _correct _approximate
|
||||
zstyle ':completion:correct' accept 2 not-numeric
|
||||
zstyle ':completion:approximate' accept 3 numeric)
|
||||
example(zstyle ':completion:::::' completer _complete _correct _approximate
|
||||
zstyle ':completion:*:correct:::' accept 2 not-numeric
|
||||
zstyle ':completion:*:approximate:::' accept 3 numeric)
|
||||
|
||||
correction will accept up to two errors. If a numeric argument is
|
||||
given, correction will not be performed, but correcting completion
|
||||
|
@ -1783,7 +1819,7 @@ non-zero otherwise.
|
|||
|
||||
This function also accepts the tt(-C) option followed by a
|
||||
var(name). This name is temporarily (i.e. not visible outside
|
||||
tt(_tags)) appended (with a colon before it) to the contents of the
|
||||
tt(_tags)) stored in the argument field of the context name in the
|
||||
tt(curcontext) parameter. This allows to make tt(_tags) use a more
|
||||
specific context name without having to change and reset the
|
||||
tt(curcontext) parameter (which would otherwise have the same effect).
|
||||
|
@ -1868,8 +1904,8 @@ example(_alternative \
|
|||
to offer usernames and hostnames as possible matches (which are
|
||||
generated by the tt(_users) and tt(_hosts) functions respectively).
|
||||
|
||||
Like tt(_tags) this function supports the tt(-C) option to give an
|
||||
additional context name component.
|
||||
Like tt(_tags) this function supports the tt(-C) option to give a
|
||||
different name for the argument context field.
|
||||
)
|
||||
findex(_describe)
|
||||
item(tt(_describe) var(descr) var(name1) [ var(name2) ] var(opts) ... tt(-)tt(-) ...)(
|
||||
|
|
|
@ -3,26 +3,27 @@ Contexts, tags and all that
|
|||
|
||||
The completion system keeps track of the current context in the
|
||||
parameter `curcontext'. It's content is the hierarchical name for the
|
||||
current context sans the tag currently tried. The tags represent
|
||||
different types of matches. So, whenever you are about to add matches,
|
||||
you should use a tag for them and test if the user wants this type of
|
||||
matches to be generated. However, this only really needs to be done if
|
||||
no other function in the call chain has tested that already or if you
|
||||
can offer different types of matches.
|
||||
current context sans the `:completion:' and the last colon and the tag
|
||||
currently tried. The tags represent different types of matches. So,
|
||||
whenever you are about to add matches, you should use a tag for them
|
||||
and test if the user wants this type of matches to be generated.
|
||||
However, this only really needs to be done if no other function in the
|
||||
call chain has tested that already or if you can offer different types
|
||||
of matches.
|
||||
|
||||
Most of the utility functions do the testing themselves, so you don't
|
||||
have to worry about that at all. For example if you are adding matches
|
||||
with `_files', `_hosts' or functions like these, you can just call
|
||||
them and they do the tests needed. The functions `_arguments' and
|
||||
`_values' do that too, but there is a small difference. These
|
||||
functions effectively add a new component to the hierarchical context
|
||||
name and if you are using the `->state' form for actions, this new
|
||||
component has to be reported back to the function calling `_arguments'
|
||||
or `_values'. This is done with the parameter `context', so you have
|
||||
to make that local in the calling function in the same way as you have
|
||||
to make local `line', `state', and `{opt,val}_args'. This parameter
|
||||
`context' should then be used when you start adding matches by giving
|
||||
it to functions like `_tags' via the `-C' options, as in:
|
||||
functions effectively change the context name and if you are using the
|
||||
`->state' form for actions, this changed name component has to be
|
||||
reported back to the function calling `_arguments' or `_values'. This
|
||||
is done with the parameter `context', so you have to make that local
|
||||
in the calling function in the same way as you have to make local
|
||||
`line', `state', and `{opt,val}_args'. This parameter `context' should
|
||||
then be used when you start adding matches by giving it to functions
|
||||
like `_tags' via the `-C' options, as in:
|
||||
|
||||
local context ...
|
||||
...
|
||||
|
@ -33,8 +34,8 @@ it to functions like `_tags' via the `-C' options, as in:
|
|||
...
|
||||
fi
|
||||
|
||||
This will append the context name given to the `curcontext' parameter
|
||||
(preceding it with a colon) and this context will then be used to look
|
||||
This will put the context name given in the argument field of the
|
||||
`curcontext' parameter and this context will then be used to look
|
||||
up styles for the tags.
|
||||
|
||||
But since this is often used, `_arguments' and `_values' have support
|
||||
|
@ -46,7 +47,7 @@ reported back to functions you call. E.g.:
|
|||
|
||||
local curcontext="$curcontext" ...
|
||||
...
|
||||
_arguments ... 'foo:foo:->foo'
|
||||
_arguments -C ... 'foo:foo:->foo'
|
||||
...
|
||||
if [[ "$state" = foo ]]; then
|
||||
_tags ...
|
||||
|
@ -74,8 +75,8 @@ types is requested by the user, so you can just do:
|
|||
|
||||
Since this sequence of command is used so often, the `_wanted'
|
||||
function was added which just calls `_tags' with its first argument
|
||||
(i.e. the first argument os a tag) and then calls `_description' with
|
||||
all other arguments. The return value is as for `_tags' -- zero if the
|
||||
(i.e. the first argument is a tag) and then calls `_description' with
|
||||
all its arguments. The return value is as for `_tags' -- zero if the
|
||||
matches should be added. So the example becomes:
|
||||
|
||||
_wanted names expl 'name' && compadd "$expl[@]" alice bob
|
||||
|
@ -106,16 +107,16 @@ for this uses `_tags' and `_requested':
|
|||
(( ret )) || break # leave the loop if matches were added
|
||||
done
|
||||
|
||||
`_tags' with tags as arguments registers those tags and calls
|
||||
`_sort_tags' so that the user can say which in which order the tags
|
||||
are to be tried. This means that internally these tags are stored in
|
||||
multiple sets. The types of matches represented by the tags from the
|
||||
first set should be tried first. If that generates no matches, the
|
||||
second set is tried and so on. `_tags' without arguments just makes
|
||||
the next set be tried (on the first call it makes the first set be
|
||||
used). The function `_requested' then tests if the tag given as its
|
||||
first argument is in the set currently used and returns zero if it is,
|
||||
i.e. if matches of that type should be added now.
|
||||
`_tags' with tags as arguments registers those tags and checks which
|
||||
of them the user wants to see and in which order the tags are to be
|
||||
tried. This means that internally these tags are stored in multiple
|
||||
sets. The types of matches represented by the tags from the first set
|
||||
should be tried first. If that generates no matches, the second set is
|
||||
tried and so on. `_tags' without arguments just makes the next set be
|
||||
tried (on the first call it makes the first set be used). The function
|
||||
`_requested' then tests if the tag given as its first argument is in
|
||||
the set currently used and returns zero if it is, i.e. if matches of
|
||||
that type should be added now.
|
||||
|
||||
But `_requested' can do more: since it is very common that you add
|
||||
different types of matches in different groups, with each group having
|
||||
|
@ -130,7 +131,7 @@ change the example above to:
|
|||
_tags friends users hosts
|
||||
|
||||
while _tags; do
|
||||
_requested friends expl friend && compad "$expl[@]" alice bob && ret=0
|
||||
_requested friends expl friend && compadd "$expl[@]" alice bob && ret=0
|
||||
_requested users && _users && ret=0
|
||||
_requested hosts && _hosts && ret=0
|
||||
|
||||
|
@ -138,7 +139,7 @@ change the example above to:
|
|||
done
|
||||
|
||||
This looks better already. But in many cases such as this one you can
|
||||
also use the function `_laternative' which simply implements a loop
|
||||
also use the function `_alternative' which simply implements a loop
|
||||
like this one. It gets arguments of the form `tag:descr:action'. E.g.:
|
||||
|
||||
_alternative \
|
||||
|
@ -148,7 +149,7 @@ like this one. It gets arguments of the form `tag:descr:action'. E.g.:
|
|||
|
||||
Which does the same as the previous examples. (Note the empty
|
||||
descriptions in the last two arguments -- the actions start with a
|
||||
space so that they are executed without giving the the description
|
||||
space so that they are executed without giving the description
|
||||
build by `_alternative', i.e. we just use the description added by
|
||||
`_users' and `_hosts').
|
||||
|
||||
|
@ -162,11 +163,11 @@ For the names of the tags: choose simple (short, if at all possible)
|
|||
names in plural. Also, first have a look at the tag names already used
|
||||
by other functions and if any of these names seem sensible for the
|
||||
type of matches you are about to add, the use those names. This will
|
||||
allow users to define styles for certain types of matches indepent of
|
||||
the place where they are added.
|
||||
allow users to define styles for certain types of matches independent
|
||||
of the place where they are added.
|
||||
|
||||
One final comment about when to use your own sub-contexts: do this
|
||||
when the command you are writing a completion function for has
|
||||
One final comment about when to use your own argument-contexts: do
|
||||
this when the command you are writing a completion function for has
|
||||
different `modes'. E.g. if it accepts host names after a `-h' option
|
||||
and users or hosts after `-u' and for some reason you can't use
|
||||
`_arguments' to do the work for you, then use context names as in:
|
||||
|
@ -185,30 +186,31 @@ Styles
|
|||
------
|
||||
|
||||
Users can associate patterns for hierarchical context names with
|
||||
certain styles using the `compstyle' function. The completion code
|
||||
certain styles using the `zstyle' builtin. The completion code
|
||||
should then use these styles to decide how matches should be added and
|
||||
to get user-configured values. This is done using the builtin `zstyle'.
|
||||
to get user-configured values. This, too, is done using the builtin
|
||||
`zstyle'.
|
||||
|
||||
Basically styles map names to a bunch of strings (the `value'). In
|
||||
many cases you want to treat the value as a boolean, so let's start
|
||||
with that. To test if, for example, the style `verbose' is set for
|
||||
the tag `options' in the context you are currently in, you can just do:
|
||||
|
||||
if zstyle -t ":completion${curcontext}:options" verbose; then
|
||||
if zstyle -t ":completion:${curcontext}:options" verbose; then
|
||||
# yes, it is set...
|
||||
fi
|
||||
|
||||
I.e. with the -t option and two arguments `zstyle' takes the first one
|
||||
as a tag and the second one as a style name and returns zero if that
|
||||
as a context and the second one as a style name and returns zero if that
|
||||
style has the boolean value `true'. Internally it checks if the style
|
||||
is set to one of `yes', `true', `on', or `1' and interprets that as
|
||||
`true' and every other value as `false'.
|
||||
|
||||
For more complicated style for which you want to test if the value
|
||||
For more complicated styles for which you want to test if the value
|
||||
matches a certain pattern, you can use `zstyle' with the -m option and
|
||||
three arguments:
|
||||
|
||||
if zstyle -m ":completion${curcontext}:foo" bar '*baz*'; then
|
||||
if zstyle -m ":completion:${curcontext}:foo" bar '*baz*'; then
|
||||
...
|
||||
fi
|
||||
|
||||
|
@ -219,15 +221,15 @@ If you just want to see if one of the strings in the value is exactly
|
|||
equal to any of a number of a strings, you can use the -t option and
|
||||
give the strings after the style name:
|
||||
|
||||
if zstyle -t ":completion${curcontext}:foo" bar str1 str2; then
|
||||
if zstyle -t ":completion:${curcontext}:foo" bar str1 str2; then
|
||||
...
|
||||
fi
|
||||
|
||||
But sometimes you want to actually get the value stored for a certain
|
||||
style instead of just testing it. For this `zstyle' supports four
|
||||
options: `-b', `-s', `-a', and `-h'. After these options, three
|
||||
arguments are expected, the tag, the style, and a parameter name. The
|
||||
parameter will then be set to the value of the style and the option
|
||||
arguments are expected, the context, the style, and a parameter name.
|
||||
The parameter will then be set to the value of the style and the option
|
||||
says how the strings stored as a value will be stored in the
|
||||
parameter:
|
||||
|
||||
|
@ -287,8 +289,7 @@ want to use. For example:
|
|||
_description tag expl '...'
|
||||
compadd "$expl[@]" -1V foo - ... # THIS IS WRONG!!!
|
||||
|
||||
is *not* the right way to use a unsorted group. Instead do the
|
||||
simpler:
|
||||
is *not* the right way to use a unsorted group. Instead do:
|
||||
|
||||
_description -1V tag expl '...'
|
||||
compadd "$expl[@]" - ...
|
||||
|
@ -301,7 +302,7 @@ multiple calls to `_description' and add them with multiple calls to
|
|||
different tags anyway, so, see above.
|
||||
|
||||
And since a tag directly corresponds to a group of matches, you'll
|
||||
often be using the tags function that allow you to give the
|
||||
often be using the tags function that allows you to give the
|
||||
explanation to the same function that is used to test if the tags are
|
||||
requested (again: see above). Just as a reminder:
|
||||
|
||||
|
@ -337,8 +338,8 @@ Misc. remarks
|
|||
This guarantees that your functions will be re-usable because calling
|
||||
functions may rely on the correct return value.
|
||||
5) When writing helper functions that generate matches, the arguments
|
||||
of these should be given unchanged to `compadd' or `compgen' (if
|
||||
they are not used by the helper function itself).
|
||||
of these should be given unchanged to `compadd' (if they are not
|
||||
used by the helper function itself).
|
||||
6) When matches with a common prefix such as option names are generated,
|
||||
add them *with* the prefix (like `-', `+', or `--' for options).
|
||||
Then check the `prefix-needed' style to see if the matches are to be
|
||||
|
@ -355,9 +356,9 @@ Misc. remarks
|
|||
completely different modes), it should allow users to define
|
||||
functions that separately override the behavior for these
|
||||
different types. This can easily be achieved by using the
|
||||
`funcall' utility function, as in:
|
||||
`_funcall' utility function, as in:
|
||||
|
||||
funcall ret _command_$subcommand && return ret
|
||||
_funcall ret _command_$subcommand && return ret
|
||||
|
||||
This will try to call the function `_command_$subcommand' and if
|
||||
it exists, it will be called and the completion function exits
|
||||
|
|
|
@ -18,14 +18,17 @@ incremental-complete-word() {
|
|||
|
||||
local key lbuf="$LBUFFER" rbuf="$RBUFFER" pmpt pstr word
|
||||
local lastl lastr wid twid num alt post toolong
|
||||
local curcontext="${curcontext}:incremental" stop brk
|
||||
local curcontext="${curcontext}" stop brk
|
||||
|
||||
zstyle -s ":completion${curcontext}" prompt pmpt ||
|
||||
[[ -z "$curcontext" ]] && curcontext=:::
|
||||
curcontext="${curcontext#*:}incremental:"
|
||||
|
||||
zstyle -s ":completion:${curcontext}" prompt pmpt ||
|
||||
pmpt='incremental (%c): %u%s %l'
|
||||
zstyle -s ":completion${curcontext}" stop stop
|
||||
zstyle -s ":completion${curcontext}" break brk
|
||||
zstyle -s ":completion:${curcontext}" stop stop
|
||||
zstyle -s ":completion:${curcontext}" break brk
|
||||
|
||||
if zstyle -t ":completion${curcontext}" list; then
|
||||
if zstyle -t ":completion:${curcontext}" list; then
|
||||
wid=list-choices
|
||||
post=( icw-list-helper )
|
||||
else
|
||||
|
|
|
@ -53,7 +53,10 @@ insert-and-predict () {
|
|||
unsetopt automenu recexact
|
||||
integer curs=$CURSOR pos nchar=${#LBUFFER//[^${KEYS[-1]}]}
|
||||
local -a +h comppostfuncs
|
||||
local crs curcontext="${curcontext}:predict"
|
||||
local crs curcontext="${curcontext}"
|
||||
|
||||
[[ -z "$curcontext" ]] && curcontext=:::
|
||||
curcontext="${curcontext#*:}predict:"
|
||||
|
||||
comppostfuncs=( predict-limit-list )
|
||||
zle complete-word
|
||||
|
@ -61,7 +64,7 @@ insert-and-predict () {
|
|||
# get out of that `case'.
|
||||
repeat 1
|
||||
do
|
||||
zstyle -s ":completion${curcontext}" cursor crs
|
||||
zstyle -s ":completion:${curcontext}" cursor crs
|
||||
case $crs in
|
||||
(complete)
|
||||
# At the place where the completion left it, if it is after
|
||||
|
@ -119,7 +122,7 @@ predict-limit-list() {
|
|||
then
|
||||
compstate[list]=''
|
||||
compstate[force_list]=yes
|
||||
elif zstyle -t ":completion:predict${curcontext}" list always
|
||||
elif zstyle -t ":completion:predict::::" list always
|
||||
then
|
||||
compstate[force_list]=yes
|
||||
fi
|
||||
|
|
Loading…
Reference in a new issue