From ed41dafd3c79ebf2ce390ee9af54fe8bb21deb73 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Thu, 3 Feb 2000 17:22:40 +0000 Subject: zsh-workers/9546 --- Completion/Base/_arguments | 10 +- Completion/Base/_combination | 4 +- Completion/Base/_describe | 4 +- Completion/Base/_first | 2 +- Completion/Base/_jobs | 8 +- Completion/Base/_subscript | 2 +- Completion/Base/_tilde | 4 +- Completion/Base/_values | 8 +- Completion/Builtins/_pids | 6 +- Completion/Builtins/_popd | 4 +- Completion/Builtins/_sched | 2 +- Completion/Builtins/_signals | 4 +- Completion/Builtins/_stat | 2 +- Completion/Builtins/_zftp | 19 ++-- Completion/Builtins/_zstyle | 20 +++- Completion/Commands/_complete_help | 2 +- Completion/Commands/_correct_word | 6 +- Completion/Commands/_expand_word | 6 +- Completion/Commands/_history_complete_word | 12 +-- Completion/Core/_alternative | 2 +- Completion/Core/_approximate | 11 ++- Completion/Core/_complete | 11 ++- Completion/Core/_correct | 5 +- Completion/Core/_description | 12 +-- Completion/Core/_expand | 13 ++- Completion/Core/_files | 14 +-- Completion/Core/_list | 6 +- Completion/Core/_main_complete | 6 +- Completion/Core/_match | 8 +- Completion/Core/_menu | 4 +- Completion/Core/_message | 4 +- Completion/Core/_normal | 8 +- Completion/Core/_oldlist | 6 +- Completion/Core/_path_files | 18 ++-- Completion/Core/_setup | 12 +-- Completion/Core/_sort_tags | 6 +- Completion/Core/_tags | 8 +- Completion/Core/compinit | 10 +- Completion/Debian/_apt | 2 +- Completion/Debian/_deb_packages | 2 +- Completion/User/_cvs | 4 +- Completion/User/_domains | 2 +- Completion/User/_groups | 2 +- Completion/User/_hosts | 2 +- Completion/User/_ports | 2 +- Completion/User/_socket | 2 +- Completion/User/_urls | 4 +- Completion/User/_users | 2 +- Completion/X/_x_color | 2 +- Doc/Zsh/compsys.yo | 142 ++++++++++++++++++----------- Etc/completion-style-guide | 105 ++++++++++----------- Functions/Zle/incremental-complete-word | 13 ++- Functions/Zle/predict-on | 9 +- 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)~~"$(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 -- cgit 1.4.1