From 181e491debe6987763df81b9dd081213b88a43e2 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 15 Nov 2006 16:27:14 +0000 Subject: users/10989: add fake-always pattern that overrides ignored-patterns --- ChangeLog | 6 ++++++ Completion/Base/Core/_description | 24 ++++++++++++++++-------- Doc/Zsh/compsys.yo | 25 +++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index eaee9a94e..1244cc48d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-11-15 Peter Stephenson + + * users/10989: Completion/Base/Core/_description, + Doc/Zsh/compsys.yo: add fake-always style that overrides + ignored-patterns. + 2006-11-14 Peter Stephenson * users/10981: Jean-Rene David : diff --git a/Completion/Base/Core/_description b/Completion/Base/Core/_description index 573bfbc3d..593369a0a 100644 --- a/Completion/Base/Core/_description +++ b/Completion/Base/Core/_description @@ -58,7 +58,9 @@ if [[ -z "$_comp_no_ignore" ]]; then "${(@)words[CURRENT+1,-1]}" );; esac - (( $#_comp_ignore )) && opts=( $opts -F _comp_ignore ) + # Ensure the ignore option is first so we can override it + # for fake-always. + (( $#_comp_ignore )) && opts=( -F _comp_ignore $opts ) else _comp_ignore=() fi @@ -86,15 +88,21 @@ else fi fi -if ! (( ${funcstack[2,-1][(I)_description]} )) && - zstyle -a ":completion:${curcontext}:$tag" fake match; then +if ! (( ${funcstack[2,-1][(I)_description]} )); then + local fakestyle descr + for fakestyle in fake fake-always; do + zstyle -a ":completion:${curcontext}:$tag" $fakestyle match || + continue - local descr + descr=( "${(@M)match:#*[^\\]:*}" ) - descr=( "${(@M)match:#*[^\\]:*}" ) - - compadd "${(@P)name}" - "${(@)${(@)match:#*[^\\]:*}:s/\\:/:/}" - (( $#descr )) && _describe -t "$tag" '' descr "${(@P)name}" + opts=("${(@P)name}") + if [[ $fakestyle = fake-always && $opts[1,2] = "-F _comp_ignore" ]]; then + shift 2 opts + fi + compadd "${(@)opts}" - "${(@)${(@)match:#*[^\\]:*}:s/\\:/:/}" + (( $#descr )) && _describe -t "$tag" '' descr "${(@)opts}" + done fi return 0 diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo index ae6238b6c..de8f18094 100644 --- a/Doc/Zsh/compsys.yo +++ b/Doc/Zsh/compsys.yo @@ -1308,6 +1308,31 @@ It is important to use a sufficiently restrictive context when specifying fake strings. Note that the styles tt(fake-files) and tt(fake-parameters) provide additional features when completing files or parameters. ) +kindex(fake-always, completion style) +item(tt(fake-always))( +This works identically to the tt(fake) style except that +the tt(ignored-patterns) style is not applied to it. This makes it +possible to override a set of matches completely by setting the +ignored patterns to `tt(*)'. + +The following shows a way of supplementing any tag with arbitrary data, but +having it behave for display purposes like a separate tag. In this example +we use the features of the tt(tag-order) style to divide the +tt(named-directories) tag into two when performing completion with +the standard completer tt(complete) for arguments of tt(cd). The tag +tt(named-directories-normal) behaves as normal, but the tag +tt(named-directories-mine) contains a fixed set of directories. +This has the effect of adding the match group `tt(extra directories)' with +the given completions. + +example(zstyle ':completion::complete:cd:*' tag-order \ + 'named-directories:-mine:extra\ directories + named-directories:-normal:named\ directories *' +zstyle ':completion::complete:cd:*:named-directories-mine' \ + fake-always mydir1 mydir2 +zstyle ':completion::complete:cd:*:named-directories-mine' \ + ignored-patterns '*') +) kindex(fake-files, completion style) item(tt(fake-files))( This style is used when completing files and looked up -- cgit 1.4.1