Hello, The patch got corrupted in the email. I have attached the patch here instead. --Aaron On Thu, Dec 12, 2013 at 3:52 PM, Aaron Peschel wrote: > Hello, > > I have created a patch for ZSH to support additional known_hosts > syntax. Feedback would be appreciated. > > Thank you! > > Aaron Peschel > > ----- > > From 3d05d6f46ac89f1d91f6e7ab4981c2dc410c956a Mon Sep 17 00:00:00 2001 > From: Aaron Peschel > Date: Thu, 12 Dec 2013 15:43:55 -0800 > Subject: [PATCH 1/1] Parse Additional SSH known_hosts Syntax > > ZSH does not currently support the full known_hosts syntax. The > known_hosts file supports lines starting with "[hostname]:post". ZSH > currently discards these lines, which breaks SSH auto-completion on > hosts using a non-standard SSH port. This patch adds support for this > syntax and allows auto-completion to work in this case. > --- > Completion/Unix/Type/_hosts | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/Completion/Unix/Type/_hosts b/Completion/Unix/Type/_hosts > index 499caed..c3133dc 100644 > --- a/Completion/Unix/Type/_hosts > +++ b/Completion/Unix/Type/_hosts > @@ -41,9 +41,20 @@ if ! zstyle -a ":completion:${curcontext}:hosts" > hosts _hosts; then > > for khostfile in $khostfiles; do > if [[ -r $khostfile ]]; then > - khosts=(${${(s:,:)${(j:,:)${(u)${(f)"$(<$khostfile)"}%%[ > |#]*}}}:#*[\[\]]*}) > + khosts=(${(s/,/j/,/u)${(f)"$(<$khostfile)"}%%[ |#]*}) > + > + # known_hosts syntax supports the host being in the form > [hostname]:port > + # The filter below extracts the hostname from lines using this format. > + khosts=($(for host ($khosts); do > + if [[ $host =~ "\[(.*)\]:\d*" ]]; then > + echo $match > + else > + echo $host > + fi > + done)) > + > if [[ -z $useip ]]; then > - khosts=(${${${khosts:#(#s)[0-9]##.[0-9]##.[0-9]##.[0-9]##(#e)}:#(#s)[0-9a-f:]##(#e)}:#*[\[\]]*}) > + khosts=(${${khosts:#(#s)[0-9]##.[0-9]##.[0-9]##.[0-9]##(#e)}:#(#s)[0-9a-f:]##(#e)}) > fi > _cache_hosts+=($khosts) > fi > -- > 1.8.3.4 (Apple Git-47)