about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-09-07 11:36:10 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-09-07 11:36:10 +0000
commit77f9967f32aa39ea0290162e0c3921a0ebca394e (patch)
tree1fe31b4ceab6760f6c9a7cfa16497f11332242c7
parent110849a947fd7c5716e886c9680922fd9716ac4d (diff)
downloadzsh-77f9967f32aa39ea0290162e0c3921a0ebca394e.tar.gz
zsh-77f9967f32aa39ea0290162e0c3921a0ebca394e.tar.xz
zsh-77f9967f32aa39ea0290162e0c3921a0ebca394e.zip
manual/7687
-rw-r--r--Completion/Base/_arguments12
-rw-r--r--Completion/User/_yp105
-rw-r--r--Doc/Zsh/compsys.yo8
3 files changed, 124 insertions, 1 deletions
diff --git a/Completion/Base/_arguments b/Completion/Base/_arguments
index c8dceed26..49c28d193 100644
--- a/Completion/Base/_arguments
+++ b/Completion/Base/_arguments
@@ -417,6 +417,10 @@ while [[ cur -gt 0 ]]; do
       argbeg="$beg"
       inopt=yes
       if [[ -n "$xors[$ws[1]]" ]]; then
+	if [[ "$xors[$ws[1]]" = (*\ |):(\ *|) ]]; then
+          args=()
+	  rest=''
+        fi
         odescr=( "${(@)odescr:#(${(j:|:)~${=xors[$ws[1]]}}):*}" )
         unset {{,d,od}opts,xors}\[${^=xors[$ws[1]]}\]
       fi
@@ -475,6 +479,10 @@ while [[ cur -gt 0 ]]; do
 	  argbeg="$beg"
 	  inopt=yes
 	  if [[ -n "$xors[$tmp[1]]" ]]; then
+	    if [[ "$xors[$ws[1]]" = (*\ |):(\ *|) ]]; then
+              args=()
+	      rest=''
+            fi
             odescr=( "${(@)odescr:#(${(j:|:)~${=xors[$tmp[1]]}}):*}" )
             unset {{,d,od}opts,xors}\[${^=xors[$tmp[1]]}\]
           fi
@@ -521,6 +529,10 @@ while [[ cur -gt 0 ]]; do
 	  argbeg="$beg"
 	  inopt=yes
 	  if [[ -n "$xors[$tmp[1]]" ]]; then
+	    if [[ "$xors[$ws[1]]" = (*\ |):(\ *|) ]]; then
+              args=()
+	      rest=''
+            fi
             odescr=( "${(@)odescr:#(${(j:|:)~${=xors[$tmp[1]]}}):*}" )
             unset {{,d,od}opts,xors}\[${^=xors[$tmp[1]]}\]
           fi
diff --git a/Completion/User/_yp b/Completion/User/_yp
new file mode 100644
index 000000000..85d783b06
--- /dev/null
+++ b/Completion/User/_yp
@@ -0,0 +1,105 @@
+#compdef ypcat ypmatch yppasswd ypwhich ypset ypserv ypbind yppush yppoll ypxfr domainname
+
+local line state ret=1
+typeset -A options
+
+if (( ! $+_yp_cache_maps )); then
+  _yp_cache_maps=( "${(@)${(@f)$(ypwhich -m)}%% *}" )
+  _yp_cache_nicks=( "${(@)${(@)${(@f)$(ypwhich -x)}#*\"}%%\"*}" )
+  _yp_args=(
+    '(-x)-d[specify domain]:domain name:' \
+    '(-x)-k[display keys]' \
+    '(-x)-t[inhibit nicknames]' \
+    '(: -d -k -t)-x[display nicknames]' \
+  )
+fi
+
+case "$words[1]" in
+ypcat)
+  _arguments -s "$_yp_args[@]" ':map name:->map' && ret=0
+  ;;
+ypmatch)
+  _arguments -s "$_yp_args[@]" '*::key map:->keymap' && ret=0
+  ;;
+yppasswd)
+  _users
+  return
+  ;;
+ypwhich)
+  _arguments \
+    '(-x)-d[specify domain]:domain name:' \
+    '(-x -V2 -m -t)-V1[identify version 1 servers]' \
+    '(-x -V1 -m -t)-V2[identify version 2 servers]' \
+    '(: -x -V1 -V2 -m)-t[specify map name]:map name:->maponly' \
+    '(: -x -V1 -V2 -t)-m[specify map or nick name]:map or nick name:->map' \
+    '(: -d -m -t -V1 -V2)-x[display nicknames]' \
+    ':host:_hosts' && ret=0
+  ;;
+ypset)
+  _arguments \
+    '(-V2)-V1[bind version 1 servers]' \
+    '(-V1)-V2[bind version 2 servers]' \
+    '-d[specify domain]:domain name:' \
+    '-h[specify host]:set binding on host:_hosts' \
+    ':server:_hosts' && ret=0
+    ;;
+ypserv)
+  _arguments \
+    '-a[specify database routines]:database routines:((b\:btree d\:dbm/ndbm h\:hash))' && ret=0
+  ;;
+ypbind)
+  _arguments \
+    '-s[allow secure mode for ypbind]' \
+    '-S[set domain and servers]:domain:->servers' \
+    '(-ypsetme)-ypset[accept all ypset requests]' \
+    '(-ypset)-ypsetme[accept only local ypset requests]' && ret=0
+  ;;
+yppush)
+  _arguments \
+    '-d[specify domain]:domain name:' \
+    '-v[print messages]' \
+    ':map name:->map' && ret=0
+  ;;
+yppoll)
+  _arguments \
+    '-d[specify domain]:domain name:' \
+    '-h[specify host]:ask server on host:_hosts' \
+    ':map name:->map' && ret=0
+  ;;
+ypxfr)
+  _arguments \
+    '-a[specify database routines]:database routines:((b\:btree d\:dbm/ndbm h\:hash))' \
+    '-f[force transfer]' \
+    '-c[don'"'"'t clear current map]' \
+    '-d[specify domain]:domain name:' \
+    '-h[specify host]:get map from host:_hosts' \
+    '-C[call back]:transaction ID: :program number: :IP address: :port number:' \
+    ':map name:->map' && ret=0
+  ;;
+domainname)
+  _message 'new domain name'
+  return 1
+  ;;
+esac
+
+[[ "$state" = keymap ]] && _message 'key'
+
+if [[ "$state" = map* ]]; then
+  local expl
+
+  _description expl 'map name'
+  compadd "$expl[@]" - "$_yp_cache_maps[@]" && ret=0
+  if [[ $+options[-t] -eq 0 && "$state" != maponly ]]; then
+    _description expl 'nicknames'
+    compadd "$expl[@]" - "$_yp_cache_nicks[@]" && ret=0
+  fi
+elif [[ "$state" = servers ]]; then
+  if compset -P '*,'; then
+    _description expl 'server'
+    _hosts -qS, && ret=0
+  else
+    _message 'domain name'
+  fi
+fi
+
+return ret
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index d7c8be4a1..540751740 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -938,7 +938,9 @@ which the option described is mutually exclusive. Such a list is given
 in parentheses at the beginning, as in `tt((-two -three)-one:...)'. In 
 this example, the options `tt(-two)' and `tt(-three)' will not be
 offered as possible completions if the option `tt(-one)' is on the
-line.
+line. Also, the list may contain a single colon as one of its elements 
+to specify that the descriptions for normal (non-option-) arguments
+should not be used if the option described is on the line.
 
 Finally, the var(opt-spec) may contain a explanation string. This is
 given in brackets at the end, as in `tt(-q[query operation])'. The
@@ -977,6 +979,10 @@ first word which can be given as arguments to the tt(compadd) and
 tt(compgen) builtins and which make sure that the var(message) given
 in the description will be shown above the matches.
 
+In places where no sensible matches can be generated, the action
+should consist of only a space. This will make the var(message) be
+displayed but no possible completions listed.
+
 To include a colon in the var(message) or the var(action), it has to
 be preceded by a backslash.