diff options
author | Tanaka Akira <akr@users.sourceforge.net> | 2000-02-23 10:25:01 +0000 |
---|---|---|
committer | Tanaka Akira <akr@users.sourceforge.net> | 2000-02-23 10:25:01 +0000 |
commit | aa660233d0382c6c5990e28fb87ef4a367157dc9 (patch) | |
tree | 3a4c5bc84ad2ff29fb9c152169117f1eb499c4f7 | |
parent | e0c99aa850ef8cee8451354e0314b9e4c5295f5d (diff) | |
download | zsh-aa660233d0382c6c5990e28fb87ef4a367157dc9.tar.gz zsh-aa660233d0382c6c5990e28fb87ef4a367157dc9.tar.xz zsh-aa660233d0382c6c5990e28fb87ef4a367157dc9.zip |
zsh-workers/9835
-rw-r--r-- | Completion/Builtins/_zstyle | 6 | ||||
-rw-r--r-- | Completion/Core/_main_complete | 32 | ||||
-rw-r--r-- | Doc/Zsh/compsys.yo | 18 |
3 files changed, 43 insertions, 13 deletions
diff --git a/Completion/Builtins/_zstyle b/Completion/Builtins/_zstyle index 34b424114..10f624ed3 100644 --- a/Completion/Builtins/_zstyle +++ b/Completion/Builtins/_zstyle @@ -54,6 +54,7 @@ styles=( prefix-needed c:bool prompt c: remove-all-dups c:bool + single-ignored c:single-ignored sort c:bool tag-order c:tag special-dirs c:sdirs @@ -208,6 +209,11 @@ while [[ -n $state ]]; do compadd "$expl[@]" parent pwd .. directory ;; + single-ignored) + _wanted values expl 'how to handle single alternate match' && + compadd "$expl[@]" - show menu + ;; + _*) ${=ostate} ;; diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete index fd8d9fcb2..6e472634c 100644 --- a/Completion/Core/_main_complete +++ b/Completion/Core/_main_complete @@ -97,7 +97,7 @@ if zstyle -s ":completion:${curcontext}:" single-ignored tmp && esac fi -if [[ -n "$tmp" || $compstate[nmatches] -gt 1 ]]; then +if [[ -n "$tmp" || $compstate[nmatches]+$compstate[alternate_nmatches] -gt 1 ]]; then [[ _last_nmatches -ge 0 && _last_nmatches -ne compstate[nmatches] ]] && _menu_style=( "$_last_menu_style[@]" "$_menu_style[@]" ) @@ -146,27 +146,35 @@ if [[ -n "$tmp" || $compstate[nmatches] -gt 1 ]]; then (( min )) || break done + zmodload -i zsh/complist SELECTMIN="$min" fi fi fi -elif [[ $compstate[nmatches] -eq 0 && $#_lastdescr -ne 0 ]] && +elif [[ $compstate[nmatches]+$compstate[alternate_nmatches] -eq 0 && + $#_lastdescr -ne 0 ]] && zstyle -s ":completion:${curcontext}:warnings" format format; then - local str - - _lastdescr=( "\`${(@)^_lastdescr:#}'" ) compstate[list]='list force' compstate[insert]='' - case $#_lastdescr in - 1) str="$_lastdescr[1]";; - 2) str="$_lastdescr[1] or $_lastdescr[2]";; - *) str="${(j:, :)_lastdescr[1,-2]}, or $_lastdescr[-1]";; - esac + if [[ "$format" = *%d* ]]; then + local str mesg + + _lastdescr=( "\`${(@)^_lastdescr:#}'" ) - zformat -f format "$format" "d:$str" - compadd -UX "$format" -n '' + case $#_lastdescr in + 1) str="$_lastdescr[1]";; + 2) str="$_lastdescr[1] or $_lastdescr[2]";; + *) str="${(j:, :)_lastdescr[1,-2]}, or $_lastdescr[-1]";; + esac + + zformat -f mesg "$format" "d:$str" + compadd -UX "$mesg" -n - '' + else + _setup warnings + compadd -UQX "$format" -V warnings - "${(@)_lastdescr:#}" + fi fi # Now call the post-functions. diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo index d38484e4a..1e9addec2 100644 --- a/Doc/Zsh/compsys.yo +++ b/Doc/Zsh/compsys.yo @@ -841,7 +841,12 @@ replaced with the message given by the completion function. Finally, for the tt(warnings) tag, it is printed when no matches could be generated at all. In this case the `tt(%d)' is replaced with the -descriptions for the matches that were expected. +descriptions for the matches that were expected. If the value does not +contain a `tt(%d)', then those descriptions are added in the same way +as matches are added, i.e. they appear below the value for the +tt(format) style laid out in columns. The descriptions are added as if +for the tag tt(warnings) so that you can use the tt(list-colors) style +for that tag to highlight them. Here and in all other cases where the completion system uses `tt(%)' sequences, the `tt(%)' may be followed by field width specifications as @@ -1303,6 +1308,17 @@ The tt(_history_complete_word) bindable command uses this to decide if all duplicate matches should be removed, rather than just consecutive duplicates. ) +item(tt(single-ignored))( +Using styles like tt(ignored-patterns) allows one to put some matches +in the alternate set of matches which is only used if there are no +`normal' matches. Having only one such normally ignored match is often +a special case because one probably doesn't want that match to be +inserted immediatly. This style allows to configure what to do in such +a case. If its value is tt(show), the single match will only be shown, +not inserted. If the value is tt(menu), then the single match and the +original string are both added as matches and menucompletion is +started so that one can easily select either of them. +) item(tt(sort))( If set to `true', completion functions that generate words from the history as possible matches sort these words alphabetically instead of |