diff options
53 files changed, 325 insertions, 259 deletions
diff --git a/Completion/Base/_arguments b/Completion/Base/_arguments index fe98240ce..1a5fd10f5 100644 --- a/Completion/Base/_arguments +++ b/Completion/Base/_arguments @@ -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 diff --git a/Completion/Base/_combination b/Completion/Base/_combination index 0f9673b06..875d3c2cb 100644 --- a/Completion/Base/_combination +++ b/Completion/Base/_combination @@ -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} )" diff --git a/Completion/Base/_describe b/Completion/Base/_describe index 1db7e6fb6..684385d13 100644 --- a/Completion/Base/_describe +++ b/Completion/Base/_describe @@ -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 diff --git a/Completion/Base/_first b/Completion/Base/_first index f81ab465e..566cfc785 100644 --- a/Completion/Base/_first +++ b/Completion/Base/_first @@ -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)" diff --git a/Completion/Base/_jobs b/Completion/Base/_jobs index e12410f99..fc2f3d87f 100644 --- a/Completion/Base/_jobs +++ b/Completion/Base/_jobs @@ -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[@]" ) diff --git a/Completion/Base/_subscript b/Completion/Base/_subscript index fdda19301..b74fe795d 100644 --- a/Completion/Base/_subscript +++ b/Completion/Base/_subscript @@ -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} ]] && diff --git a/Completion/Base/_tilde b/Completion/Base/_tilde index 128fd7ffa..35621d9d3 100644 --- a/Completion/Base/_tilde +++ b/Completion/Base/_tilde @@ -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[@]}") diff --git a/Completion/Base/_values b/Completion/Base/_values index 7b174bc58..e8004ba6f 100644 --- a/Completion/Base/_values +++ b/Completion/Base/_values @@ -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 diff --git a/Completion/Builtins/_pids b/Completion/Builtins/_pids index 8b5d27bc5..b00e811bb 100644 --- a/Completion/Builtins/_pids +++ b/Completion/Builtins/_pids @@ -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}}") diff --git a/Completion/Builtins/_popd b/Completion/Builtins/_popd index 8c5b1208d..586018952 100644 --- a/Completion/Builtins/_popd +++ b/Completion/Builtins/_popd @@ -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[@]}") diff --git a/Completion/Builtins/_sched b/Completion/Builtins/_sched index ea11eeb65..851659033 100644 --- a/Completion/Builtins/_sched +++ b/Completion/Builtins/_sched @@ -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=() diff --git a/Completion/Builtins/_signals b/Completion/Builtins/_signals index 545d83924..ad1f0131b 100644 --- a/Completion/Builtins/_signals +++ b/Completion/Builtins/_signals @@ -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 diff --git a/Completion/Builtins/_stat b/Completion/Builtins/_stat index ca7d2900d..ae884066f 100644 --- a/Completion/Builtins/_stat +++ b/Completion/Builtins/_stat @@ -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 diff --git a/Completion/Builtins/_zftp b/Completion/Builtins/_zftp index 8407de30e..6246015ec 100644 --- a/Completion/Builtins/_zftp +++ b/Completion/Builtins/_zftp @@ -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 ;; diff --git a/Completion/Builtins/_zstyle b/Completion/Builtins/_zstyle index 4629344cc..5b99eacdf 100644 --- a/Completion/Builtins/_zstyle +++ b/Completion/Builtins/_zstyle @@ -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 ;; diff --git a/Completion/Commands/_complete_help b/Completion/Commands/_complete_help index b172e76db..9d3e47add 100644 --- a/Completion/Commands/_complete_help +++ b/Completion/Commands/_complete_help @@ -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 diff --git a/Completion/Commands/_correct_word b/Completion/Commands/_correct_word index e0fee1fff..46480da47 100644 --- a/Completion/Commands/_correct_word +++ b/Completion/Commands/_correct_word @@ -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 diff --git a/Completion/Commands/_expand_word b/Completion/Commands/_expand_word index b4e22de48..ad334da9d 100644 --- a/Completion/Commands/_expand_word +++ b/Completion/Commands/_expand_word @@ -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 diff --git a/Completion/Commands/_history_complete_word b/Completion/Commands/_history_complete_word index 7867189e8..cc1877911 100644 --- a/Completion/Commands/_history_complete_word +++ b/Completion/Commands/_history_complete_word @@ -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' diff --git a/Completion/Core/_alternative b/Completion/Core/_alternative index 791d7517e..73292cb52 100644 --- a/Completion/Core/_alternative +++ b/Completion/Core/_alternative @@ -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 diff --git a/Completion/Core/_approximate b/Completion/Core/_approximate index bb1faa7b3..283f30e83 100644 --- a/Completion/Core/_approximate +++ b/Completion/Core/_approximate @@ -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 diff --git a/Completion/Core/_complete b/Completion/Core/_complete index 00c5e1e9a..d589c1707 100644 --- a/Completion/Core/_complete +++ b/Completion/Core/_complete @@ -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]" diff --git a/Completion/Core/_correct b/Completion/Core/_correct index 35114ed22..76560dfb2 100644 --- a/Completion/Core/_correct +++ b/Completion/Core/_correct @@ -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]='-' diff --git a/Completion/Core/_description b/Completion/Core/_description index ffe016df8..b35889c4d 100644 --- a/Completion/Core/_description +++ b/Completion/Core/_description @@ -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=() diff --git a/Completion/Core/_expand b/Completion/Core/_expand index cdfc2a8d1..b1609ad40 100644 --- a/Completion/Core/_expand +++ b/Completion/Core/_expand @@ -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}" ) diff --git a/Completion/Core/_files b/Completion/Core/_files index f7ce74d80..cd337713a 100644 --- a/Completion/Core/_files +++ b/Completion/Core/_files @@ -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 diff --git a/Completion/Core/_list b/Completion/Core/_list index 294467eca..597d173ad 100644 --- a/Completion/Core/_list +++ b/Completion/Core/_list @@ -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 diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete index 09feae10f..ebe256588 100644 --- a/Completion/Core/_main_complete +++ b/Completion/Core/_main_complete @@ -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:#}'" ) diff --git a/Completion/Core/_match b/Completion/Core/_match index b7075b715..42416242d 100644 --- a/Completion/Core/_match +++ b/Completion/Core/_match @@ -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 `*'? diff --git a/Completion/Core/_menu b/Completion/Core/_menu index 7f8035098..5ec1a1a55 100644 --- a/Completion/Core/_menu +++ b/Completion/Core/_menu @@ -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 diff --git a/Completion/Core/_message b/Completion/Core/_message index 8ae93f973..a6cb799e5 100644 --- a/Completion/Core/_message +++ b/Completion/Core/_message @@ -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]}" diff --git a/Completion/Core/_normal b/Completion/Core/_normal index a9e1dc5e4..c3315610f 100644 --- a/Completion/Core/_normal +++ b/Completion/Core/_normal @@ -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 diff --git a/Completion/Core/_oldlist b/Completion/Core/_oldlist index b0092d586..450e3cb29 100644 --- a/Completion/Core/_oldlist +++ b/Completion/Core/_oldlist @@ -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 diff --git a/Completion/Core/_path_files b/Completion/Core/_path_files index cacf62cd7..a41f8d73a 100644 --- a/Completion/Core/_path_files +++ b/Completion/Core/_path_files @@ -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}" diff --git a/Completion/Core/_setup b/Completion/Core/_setup index 4054f5ecc..b3b2bdb33 100644 --- a/Completion/Core/_setup +++ b/Completion/Core/_setup @@ -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 diff --git a/Completion/Core/_sort_tags b/Completion/Core/_sort_tags index 6f07eec1c..778a6000b 100644 --- a/Completion/Core/_sort_tags +++ b/Completion/Core/_sort_tags @@ -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 # ;; diff --git a/Completion/Core/_tags b/Completion/Core/_tags index 208ec32b1..d2d5555fa 100644 --- a/Completion/Core/_tags +++ b/Completion/Core/_tags @@ -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 diff --git a/Completion/Core/compinit b/Completion/Core/compinit index bfb697279..cd9ec7c2f 100644 --- a/Completion/Core/compinit +++ b/Completion/Core/compinit @@ -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 diff --git a/Completion/Debian/_apt b/Completion/Debian/_apt index ebb455e76..60b8d51d6 100644 --- a/Completion/Debian/_apt +++ b/Completion/Debian/_apt @@ -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=() diff --git a/Completion/Debian/_deb_packages b/Completion/Debian/_deb_packages index 9df52eab6..94499cbdb 100644 --- a/Completion/Debian/_deb_packages +++ b/Completion/Debian/_deb_packages @@ -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" diff --git a/Completion/User/_cvs b/Completion/User/_cvs index 1a1a40b0f..15eb6b872 100644 --- a/Completion/User/_cvs +++ b/Completion/User/_cvs @@ -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 diff --git a/Completion/User/_domains b/Completion/User/_domains index a27f6f34a..cf7e9befe 100644 --- a/Completion/User/_domains +++ b/Completion/User/_domains @@ -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 diff --git a/Completion/User/_groups b/Completion/User/_groups index fbd884688..051bb829a 100644 --- a/Completion/User/_groups +++ b/Completion/User/_groups @@ -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 diff --git a/Completion/User/_hosts b/Completion/User/_hosts index 6078514b6..cab65329c 100644 --- a/Completion/User/_hosts +++ b/Completion/User/_hosts @@ -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:]]#}}} diff --git a/Completion/User/_ports b/Completion/User/_ports index 07428fe75..8cf90a913 100644 --- a/Completion/User/_ports +++ b/Completion/User/_ports @@ -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}%%[ ]*}} diff --git a/Completion/User/_socket b/Completion/User/_socket index d6a8b7af7..bb9ee2a67 100644 --- a/Completion/User/_socket +++ b/Completion/User/_socket @@ -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 diff --git a/Completion/User/_urls b/Completion/User/_urls index d8a6f06f5..3f2cab789 100644 --- a/Completion/User/_urls +++ b/Completion/User/_urls @@ -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]" diff --git a/Completion/User/_users b/Completion/User/_users index 45ed0f89d..1df724208 100644 --- a/Completion/User/_users +++ b/Completion/User/_users @@ -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}" diff --git a/Completion/X/_x_color b/Completion/X/_x_color index 592667c40..43f8ad5cd 100644 --- a/Completion/X/_x_color +++ b/Completion/X/_x_color @@ -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 diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo index 3a72a118e..30a787b19 100644 --- a/Doc/Zsh/compsys.yo +++ b/Doc/Zsh/compsys.yo @@ -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(-) ...)( diff --git a/Etc/completion-style-guide b/Etc/completion-style-guide index 2e0d4a69d..4075a79f4 100644 --- a/Etc/completion-style-guide +++ b/Etc/completion-style-guide @@ -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 diff --git a/Functions/Zle/incremental-complete-word b/Functions/Zle/incremental-complete-word index e1020d41a..28e8ea7ac 100644 --- a/Functions/Zle/incremental-complete-word +++ b/Functions/Zle/incremental-complete-word @@ -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 diff --git a/Functions/Zle/predict-on b/Functions/Zle/predict-on index 6e67d5efa..4822c38ce 100644 --- a/Functions/Zle/predict-on +++ b/Functions/Zle/predict-on @@ -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 |