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

Another, seemingly related issue:

Given ssh_config2:

  Host foo-test-05827d88.foo.bar bar-test-6cae9ce0.foo.bar

% ssh -F ssh_config2 test<TAB>

completes to

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

and a second invocation of the completion will then use the "-t" at the
beginning (for "escape character (or `none')").

Should this get quoted on expansion to prevent this?

When quoting it manually, I see a similar issue as described before (see
below), where

  ssh -F ssh_config2 '-test-<TAB>.foo.bar'

gets expanded to

  ssh -F ssh_config2 '-test-BR.foo.bar'

(without the globcomplete option though!)

On 17.08.2016 21:16, Daniel Hahler wrote:
> 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.
>