Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[ramk@xxxxxxxxxxxxxxxxx: Bug#359992: zsh: Enable use of IP addresses and multiple host files in _hosts]
- X-seq: zsh-workers 22393
- From: Clint Adams <schizo@xxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: [ramk@xxxxxxxxxxxxxxxxx: Bug#359992: zsh: Enable use of IP addresses and multiple host files in _hosts]
- Date: Fri, 31 Mar 2006 09:19:01 -0500
- Cc: 359992-forwarded@xxxxxxxxxxxxxxx
That _analyseplugin function was written by R.Ramkumar as well.
I'm not committing this one because I have no opinion, though I bet
someone else will.
----- Forwarded message from "R.Ramkumar" <ramk@xxxxxxxxxxxxxxxxx> -----
Date: Thu, 30 Mar 2006 05:24:23 +0530
From: "R.Ramkumar" <ramk@xxxxxxxxxxxxxxxxx>
To: Debian Bug Tracking System <submit@xxxxxxxxxxxxxxx>
Subject: Bug#359992: zsh: Enable use of IP addresses and multiple host files in _hosts
Package: zsh
Version: 4.3.2-2
Severity: wishlist
Tags: patch
Hi!
The current _hosts completion does not use IP addresses, and
completes using host names alone. This patch optionally enables the
inclusion of IP addresses by a boolean style (the default behaviour
is unchanged). Further, currently only ~/.ssh/known_hosts file is
read. Added /etc/ssh/known_hosts to this list, if present. Further,
observing that any plain list of hostnames would anyway be
parseable, and that ~"`id -nu`"/.ssh/known_hosts and not
~/.ssh/known_hosts might be readable under sudo environments, made
the list of known host files customizable (defaulting to the two
files initially specified). Here is the patch:
Content-Description: Patch enabling use of IP addresses and multiple host files in _hosts
--- _hosts 2006-03-30 05:00:08.000000000 +0530
+++ _hosts.new 2006-03-30 05:21:37.000000000 +0530
@@ -2,29 +2,52 @@
# avoid calling variable "hosts", it's an obvious candidate for use in
# zstyle -e '*' hosts 'reply=($hosts)'
-local expl _hosts tmp
+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)"}##[:blank:]#[^[:blank:]]#}})
+ _cache_hosts=(${(s: :)${(ps:\t:)${(f)~~"$(_call_program hosts getent hosts 2>/dev/null)"}##${~ipstrip}}})
else
- _cache_hosts=(${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}})
+ _cache_hosts=(${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##${~ipstrip}}})
if (( ${+commands[ypcat]} )) &&
tmp=$(_call_program hosts ypcat hosts.byname 2>/dev/null); then
- _cache_hosts+=( ${=${(f)tmp}##[:blank:]#[^[:blank:]]#} ) # If you use YP
+ _cache_hosts+=( ${=${(f)tmp}##${~ipstrip}} ) # If you use YP
fi
fi
- if [[ -r ~/.ssh/known_hosts ]]; then
- _cache_hosts+=(${${${(u)${(f)"$(<~/.ssh/known_hosts)"}%%[ ,|#]*}:#(#s)[0-9]##.[0-9]##.[0-9]##.[0-9]##(#e)}:#(#s)[0-9a-f:]##(#e)})
- 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[@]" )
Regards,
Ramkumar.
-- System Information:
Debian Release: testing/unstable
APT prefers testing
APT policy: (101, 'testing')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/dash
Kernel: Linux 2.6.15-archck2
Locale: LANG=en_IN, LC_CTYPE=en_IN (charmap=UTF-8)
Versions of packages zsh depends on:
ii debconf [debconf-2.0] 1.4.72 Debian configuration management sy
ii libc6 2.3.6-3 GNU C Library: Shared libraries an
ii libncurses5 5.5-1 Shared libraries for terminal hand
Versions of packages zsh recommends:
ii libcap1 1:1.10-14 support for getting/setting POSIX.
ii libpcre3 6.4-1.1 Perl 5 Compatible Regular Expressi
-- no debconf information
--
WARN_(accel)("msg null; should hang here to be win compatible\n");
-- WINE source code
----- End forwarded message -----
Messages sorted by:
Reverse Date,
Date,
Thread,
Author