From 8ffba43be97e90be5753a90e3b5869450f108c79 Mon Sep 17 00:00:00 2001 From: Aaron Peschel Date: Fri, 13 Dec 2013 22:51:09 -0800 Subject: 32103: parse host:port format in ssh known_hosts files. --- Completion/Unix/Type/_hosts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'Completion/Unix') diff --git a/Completion/Unix/Type/_hosts b/Completion/Unix/Type/_hosts index 499caede1..c3133dc68 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 -- cgit 1.4.1