From 505239c6f89e200aea9058a1fa5a552d1b6e529d Mon Sep 17 00:00:00 2001 From: Paul Ackersviller Date: Thu, 3 May 2007 02:49:44 +0000 Subject: Merge trunk revisions up to 1.10, i.e. 21315, 21931, 22187, 22191, 22192, 22393. --- Completion/Unix/Type/_hosts | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Completion/Unix/Type/_hosts (limited to 'Completion/Unix/Type/_hosts') diff --git a/Completion/Unix/Type/_hosts b/Completion/Unix/Type/_hosts new file mode 100644 index 000000000..c93399945 --- /dev/null +++ b/Completion/Unix/Type/_hosts @@ -0,0 +1,57 @@ +#compdef ftp rwho rup xping traceroute host aaaa zone mx ns soa txt + +# avoid calling variable "hosts", it's an obvious candidate for use in +# zstyle -e '*' hosts 'reply=($hosts)' +local expl _hosts tmp useip + +if ! zstyle -a ":completion:${curcontext}:hosts" hosts _hosts; then + if (( $+_cache_hosts == 0 )); then + # uniquify + typeset -gUa _cache_hosts + local ipstrip='[:blank:]#[^[:blank:]]#' + + # This boolean style determines whether hosts completes IP addresses. The + # default is no (not using IP addresses). + zstyle -t ":completion:${curcontext}:hosts" use-ip && useip=yes + [[ -n $useip ]] && ipstrip= + if (( ${+commands[getent]} )); then + # pws: we were using the horrible ": ${(A)...:=}" syntax to assign + # to _cache_hosts, overriding the typeset as well as being unreadable + # and having obscure splitting behaviour. Why? We've just + # tested _cache_hosts doesn't exist. + _cache_hosts=(${(s: :)${(ps:\t:)${(f)~~"$(_call_program hosts getent hosts 2>/dev/null)"}##${~ipstrip}}}) + else + _cache_hosts=(${(s: :)${(ps:\t:)${${(f)~~"$(/dev/null); then + _cache_hosts+=( ${=${(f)tmp}##${~ipstrip}} ) # If you use YP + fi + fi + + local khostfile + typeset -Ua khostfiles + + # This style specifies a list of files to look up for host names and IP + # addresses, if asked to. The files can contain comma separated host names + # and IP's, and any text on a line after the first whitespace,| or # is + # discarded. ssh's known_hosts files are thus supported. This style defaults + # to the list /etc/ssh/ssh_known_hosts, ~/.ssh/known_hosts + zstyle -a ":completion:${curcontext}:hosts" known-hosts-files khostfiles || + khostfiles=(/etc/ssh/ssh_known_hosts ~/.ssh/known_hosts) + + for khostfile in $khostfiles; do + if [[ -r $khostfile ]]; then + khosts=(${(s:,:)${(j:,:)${(u)${(f)"$(<$khostfile)"}%%[ |#]*}}}) + if [[ -z $useip ]]; then + khosts=(${${khosts:#(#s)[0-9]##.[0-9]##.[0-9]##.[0-9]##(#e)}:#(#s)[0-9a-f:]##(#e)}) + fi + _cache_hosts+=($khosts) + fi + done + fi + + _hosts=( "$_cache_hosts[@]" ) +fi + +_wanted hosts expl host \ + compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - _hosts -- cgit 1.4.1