diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Completion/Unix/Type/_hosts | 15 |
2 files changed, 18 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 96dafe44e..ae9c163d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-12-13 Barton E. Schaefer <schaefer@zsh.org> + + * Aaron Peschel: 32103: Completion/Unix/Type/_hosts: parse + host:port format in ssh known_hosts files. + 2013-12-10 Barton E. Schaefer <schaefer@zsh.org> * 32099: Src/init.c: fix pointer declaration to avoid compile 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 |