zsh-workers
 help / color / mirror / code / Atom feed
* Re: [ramk@cse.iitm.ernet.in: Bug#359992: zsh: Enable use of IP addresses and multiple host files in _hosts]
@ 2006-04-05  9:55 Peter Stephenson
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Stephenson @ 2006-04-05  9:55 UTC (permalink / raw)
  To: zsh-workers, 359992-forwarded

Clint Adams <schizo@debian.org> wrote:
> From: "R.Ramkumar" <ramk@cse.iitm.ernet.in>
>
> 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:

I'll commit this with the following documentation.

Index: Doc/Zsh/compsys.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/compsys.yo,v
retrieving revision 1.186
diff -u -r1.186 compsys.yo
--- Doc/Zsh/compsys.yo	20 Mar 2006 11:06:24 -0000	1.186
+++ Doc/Zsh/compsys.yo	5 Apr 2006 09:52:52 -0000
@@ -1665,6 +1665,13 @@
 that unlike the tt(ALWAYS_LAST_PROMPT) option this is independent of the
 numeric prefix argument.
 )
+kindex(known-hosts-files)
+item(tt(known-hosts-files))(
+This style should contain a list of files to search for host names and
+(if the tt(use-ip) style is set) IP addresses in a format compatible with
+ssh tt(known_hosts) files.  If it is not set, the files
+tt(/etc/ssh/ssh_known_hosts) and tt(~/.ssh/known_hosts) are used.
+)
 kindex(list, completion style)
 item(tt(list))(
 This style is used by the tt(_history_complete_word) bindable command.
@@ -2498,6 +2505,16 @@
 However, the tt(compctl) version will be tried if tt(foo) only uses
 default completion.
 )
+kindex(use-ip, completion style)
+item(tt(use-ip))(
+By default, the function tt(_hosts) that completes host names strips
+IP addresses from entries read from host databases such as NIS and
+ssh files.  If this style is true, the corresponding IP addresses
+can be completed as well.  This style is not use in any context
+where the tt(hosts) style is set; note also it must be set before
+the cache of host names is generated (typically the first completion
+attempt).
+)
 kindex(use-perl, completion style)
 item(tt(use-perl))(
 Various parts of the function system use awk to extract words from

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


To access the latest news from CSR copy this link into a web browser:  http://www.csr.com/email_sig.php


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [ramk@cse.iitm.ernet.in: Bug#359992: zsh: Enable use of IP addresses and multiple host files in _hosts]
@ 2006-03-31 14:19 Clint Adams
  0 siblings, 0 replies; 2+ messages in thread
From: Clint Adams @ 2006-03-31 14:19 UTC (permalink / raw)
  To: zsh-workers; +Cc: 359992-forwarded

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@cse.iitm.ernet.in> -----

Date: Thu, 30 Mar 2006 05:24:23 +0530
From: "R.Ramkumar" <ramk@cse.iitm.ernet.in>
To: Debian Bug Tracking System <submit@bugs.debian.org>
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 -----


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-04-05  9:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-04-05  9:55 [ramk@cse.iitm.ernet.in: Bug#359992: zsh: Enable use of IP addresses and multiple host files in _hosts] Peter Stephenson
  -- strict thread matches above, loose matches on Subject: below --
2006-03-31 14:19 Clint Adams

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).