Subject: SSH hostname completion with common suffix and globcomplete inserts characters
From: Daniel Hahler <[email-masked]>
To: [email-masked]
Date: Wed, 17 Aug 2016 21:16:17 +0200
List-Id: Zsh Workers List <zsh-workers.zsh.org>

When using TAB completion (via expand-or-complete, and "setopt
globcomplete") on a partial hostname where alternatives with a common
suffix exist, the second invocation of TAB will insert some character(s)
that make it fail to complete afterwards.

% autoload -Uz compinit
% compinit
% echo "Host test-05827d88.foo.bar test-6cae9ce0.foo.bar" > ssh_config
% setopt globcomplete

With

% ssh -F ssh_config test-<TAB>

You will get:

% ssh -F ssh_config test-|.foo.bar

Pressing TAB again results in:

% ssh -F ssh_config test-|BR.foo.bar

The characters being inserted seem to come from the "bar".

With ".dot.com" at the end I am seeing "CM" being inserted.

With "Host test-05.dot.com test-6c.dot.com" however "D" is being
inserted.

And with a single TLD (i.e. "test-05827d88.com test-6cae9ce0.com") it
works.

In _ssh_hosts the following is used, which seems to be relevant, since
the inserted characters are uppercased:

    compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts

zsh 5.2-dev-1, 062aeca.

Thanks,
Daniel.