about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Completion/Base/Core/_description24
-rw-r--r--Doc/Zsh/compsys.yo25
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  <pws@csr.com>
+
+	* users/10989: Completion/Base/Core/_description,
+	Doc/Zsh/compsys.yo: add fake-always style that overrides
+	ignored-patterns.
+
 2006-11-14  Peter Stephenson  <pws@csr.com>
 
 	* users/10981: Jean-Rene David <jrdavid@magma.ca>:
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