mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-16 12:21:18 +02:00
22187: improved _hosts
This commit is contained in:
parent
08bfbba1c8
commit
ed6c05aa7c
2 changed files with 32 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
|||
2006-02-03 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* 22187: Completion/Unix/Type/_hosts: don't trounce any global
|
||||
$hosts; don't use hacky array assignment; do examine
|
||||
~/.ssh/known_hosts for default set of hosts to complete.
|
||||
|
||||
2006-01-29 Wayne Davison <wayned@users.sourceforge.net>
|
||||
|
||||
* unposted: Completion/Unix/Command/_rsync: Added new options
|
||||
|
|
|
@ -1,21 +1,34 @@
|
|||
#compdef ftp rwho rup xping traceroute host aaaa zone mx ns soa txt
|
||||
|
||||
local expl hosts tmp
|
||||
# avoid calling variable "hosts", it's an obvious candidate for use in
|
||||
# zstyle -e '*' hosts 'reply=($hosts)'
|
||||
local expl _hosts tmp
|
||||
|
||||
if ! zstyle -a ":completion:${curcontext}:hosts" hosts hosts; then
|
||||
(( $+_cache_hosts )) ||
|
||||
if (( ${+commands[getent]} )); then
|
||||
: ${(A)_cache_hosts:=${(s: :)${(ps:\t:)${(f)~~"$(_call_program hosts getent hosts 2>/dev/null)"}##[:blank:]#[^[:blank:]]#}}}
|
||||
else
|
||||
: ${(A)_cache_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}}
|
||||
if (( ${+commands[ypcat]} )) &&
|
||||
tmp=$(_call_program hosts ypcat hosts.byname 2>/dev/null); then
|
||||
_cache_hosts+=( ${=${(f)tmp}##[:blank:]#[^[:blank:]]#} ) # If you use YP
|
||||
fi
|
||||
if ! zstyle -a ":completion:${curcontext}:hosts" hosts _hosts; then
|
||||
if (( $+_cache_hosts == 0 )); then
|
||||
# uniquify
|
||||
typeset -gUa _cache_hosts
|
||||
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)"}##[:blank:]#[^[:blank:]]#}})
|
||||
else
|
||||
_cache_hosts=(${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}})
|
||||
if (( ${+commands[ypcat]} )) &&
|
||||
tmp=$(_call_program hosts ypcat hosts.byname 2>/dev/null); then
|
||||
_cache_hosts+=( ${=${(f)tmp}##[:blank:]#[^[:blank:]]#} ) # If you use YP
|
||||
fi
|
||||
fi
|
||||
|
||||
hosts=( "$_cache_hosts[@]" )
|
||||
if [[ -r ~/.ssh/known_hosts ]]; then
|
||||
_cache_hosts+=( $(sed -e '/^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]/d' -e 's/[ ,].*//p' ~/.ssh/known_hosts) )
|
||||
fi
|
||||
fi
|
||||
|
||||
_hosts=( "$_cache_hosts[@]" )
|
||||
fi
|
||||
|
||||
_wanted hosts expl host \
|
||||
compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - hosts
|
||||
compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - _hosts
|
||||
|
|
Loading…
Reference in a new issue