about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Completion/User/.distfiles2
-rw-r--r--Completion/User/_domains20
-rw-r--r--Completion/User/_nslookup18
-rw-r--r--Doc/Zsh/compsys.yo8
4 files changed, 38 insertions, 10 deletions
diff --git a/Completion/User/.distfiles b/Completion/User/.distfiles
index 3e9581878..0ac019d37 100644
--- a/Completion/User/.distfiles
+++ b/Completion/User/.distfiles
@@ -1,7 +1,7 @@
 DISTFILES_SRC='
     .distfiles
     _a2ps _archie _bison _bunzip2 _bzip2 _chown _compress _configure _cvs
-    _dd _dir_list _dirs _dvi _find _flex _gcc _gdb _gprof _groups _gs
+    _dd _dir_list _dirs _domains _dvi _find _flex _gcc _gdb _gprof _groups _gs
     _gunzip _gv _gzip _hosts _ispell _killall _lp _lynx _mailboxes _make _man
     _mh _mount _mutt _my_accounts _netscape _nslookup _other_accounts
     _pack _patch _pbm _pdf _perl_basepods _perl_builtin_funcs
diff --git a/Completion/User/_domains b/Completion/User/_domains
new file mode 100644
index 000000000..9bd94a4fd
--- /dev/null
+++ b/Completion/User/_domains
@@ -0,0 +1,20 @@
+#autoload
+
+local expl domains tmp
+
+if ! zstyle -a ":completion${curcontext}:domains" domains domains; then
+  if (( ! $+_cache_domains )); then
+    _cache_domains=()
+    if [[ -f /etc/resolv.conf ]]; then
+      while read tmp; do
+        [[ "$tmp" = (domain|search)* ]] &&
+            _cache_domains=( "$_cache_domains[@]" "${=${tmp%%[ 	]#}#*[ 	]}" )
+      done < /etc/resolv.conf
+      _cache_domains=( "${(@)_nslookup_domains:#[ 	]#}" )
+    fi
+  fi
+  domains=( "$_cache_domains[@]" )
+fi
+
+_wanted domains expl domain &&
+    compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" "$expl[@]" - "$domains[@]"
diff --git a/Completion/User/_nslookup b/Completion/User/_nslookup
index 1aeae4306..7c67cb256 100644
--- a/Completion/User/_nslookup
+++ b/Completion/User/_nslookup
@@ -38,7 +38,7 @@ setopts=(
   '(noignoretc)ignoretc[ignore packet truncation errors]' \
   '(ignoretc)noignoretc[don'"'"'t ignore packet truncation errors]' \
   'class[change query class]:query class:((in\:Internet\ class chaos\:CHAOS\ class hesiod\:MIT\ Athena\ Hesiod\ class any\:wildcard\ \(any\ of\ the\ above\)))'
-  'domain[change default domain]:default domain:_hosts'
+  "domain[change default domain]:default domain:_domains"
   'srchlist[change default domain and search list]: :->srchlist'
   'port[change name server port]:name server port:'
   {query,}type'[change type of information query]:query information type:((a\:internet\ address cname\:canonical\ name\ for\ alias hinfo\:CPU\ and\ operating\ system\ type minfo\:mailbox\ or\ mail\ list\ information mx\:mail\ exchanger ns\:name\ server\ for\ zone ptr\:host\ name\ or\ other\ information soa\:domain\'"'"'s\ \`start-of-authority\'"'"'\ information txt\:text\ information uinfo\:user\ information wks\:supported\ well-known\ services))'
@@ -53,8 +53,8 @@ if [[ -n "$compcontext" ]]; then
     _funcall ret _nslookup_command && return ret
 
     _alternative \
-        'commands:command:compadd server lserver root finger ls view help set' \
-	'hosts:: _host' && ret=0
+        'commands:command:(server lserver root finger ls view help set exit)' \
+	'hosts:: _hosts' && ret=0
     return ret
   elif [[ "$compstate[context]" = redirect ]]; then
 
@@ -103,7 +103,7 @@ if [[ -n "$compcontext" ]]; then
      '-d[all records]' \
      '-h[CPU and operating system information]' \
      '-s[well-known services]' \
-     ':domain:_hosts'
+     ":domain:_domains"
     return
     ;;
   view)
@@ -141,17 +141,17 @@ fi
 # This is completion after `srchlist' for both types.
 
 if [[ -n "$state" ]]; then
-  _tags hosts || return 1
+  _tags domains || return 1
 
   if compset -P '*/'; then
-    _description hosts expl 'search list entry'
+    _description domains expl 'search list entry'
   else
-    _description hosts expl 'default domain name and first search list entry'
+    _description domains expl 'default domain name and first search list entry'
   fi
   if [[ -n "$_vals_cache_multi" ]]; then
-    _hosts "$expl[@]" -qS/ -r "/\\- \\t\\n$_vals_cache_multi"
+    _domains "$expl[@]" -qS/ -r "/\\- \\t\\n$_vals_cache_multi"
   else
-    _hosts "$expl[@]" -qS/
+    _domains "$expl[@]" -qS/
   fi
   return
 fi
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index 48bb42621..384f9db29 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -453,6 +453,9 @@ for entries in the directory stack
 item(tt(displays))(
 for X display names
 )
+item(tt(domains))(
+for network domains
+)
 item(tt(expansions))(
 used by the tt(_expand) completer for possible expansions
 )
@@ -707,6 +710,11 @@ This is used with the tt(cvs) tag by the function completing for the
 tt(cvs) command to decide if the tt(zsh/stat) module should be used to
 generate only names of modified files in the appropriate places.
 )
+item(tt(domains))(
+If set, gives the names of network domains that should be
+completed. If this is not set by the user domain names mentioned in
+tt(/etc/resolv.conf) will be used.
+)
 item(tt(expand))(
 Like tt(cursor), this style is used with the tt(paths) tag. If its
 value contains the string tt(prefix), the partially typed path from