Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

RE: PATCH _hosts: can complete hosts listed on ~/.ssh/config



> Hello.
> 
> Usually, "/etc/hosts" dos not contain hostname to wish to complete.
> This pactch parse ~/.ssh/config and pick up hosts listed as "Host"
> or "HostName".
> 
> What about this?
> 

I agree with idea but I do not like use of cache without revalidation. Your
code won't pick changes done after ~/.ssh/config has been first time read.

It is not the only place where (useful) revalidation is missing but let's
not introduce new one.

Probably we need general purpose utility for cache variables without backing
store. Like saving mtime in __cache_sshconf_hosts_mtime and rechecking it
next time.

Alternatively do not bother with caching at all. File is expected to be
small enough so parsing it does not add significant overhead.

-andrey

> ==============
> --- _hosts.orig 2003-03-11 14:21:35.000000000 +0900
> +++ _hosts      2003-03-11 14:22:54.000000000 +0900
> @@ -1,12 +1,15 @@
> -#compdef ftp ping rwho rup xping traceroute host aaaa zone mx ns soa txt
> +#compdef ftp ping rwho rup xping traceroute host aaaa zone mx ns soa txt
> mtr dnsip hping2 hping nmap tcptraceroute
> 
>  local expl hosts
> 
>  if ! zstyle -a ":completion:${curcontext}:hosts" hosts hosts; then
>    (( $+_cache_hosts )) ||
>        : ${(A)_cache_hosts:=${(s:
> :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}}
> +
> +  (( $+_cache_sshconf_hosts )) ||
> +      : ${(A)_cache_sshconf_hosts:=${${${(M)${(s:# :)${(zj:#
> :)${(Lf)"$([[ -f ~/.ssh/config ]] && <~/.ssh/config)"}%%\#*}}##host(|name)
> *}#host(|name) }/\*}}
> 
> -  hosts=( "$_cache_hosts[@]" )
> +  hosts=( "$_cache_hosts[@]" "$_cache_sshconf_hosts[@]")
>  fi
> 
>  _wanted hosts expl host \
> ==============
> 
> --
> Tatsuki Sugiura   mailto:sugi@xxxxxxxxx



Messages sorted by: Reverse Date, Date, Thread, Author