Saída estranha no comando multilinha em Kitty?

2

Estou executando o ArchLinux não-GUI no VMWare 14.0. Eu instalei um servidor ssh nele (por openssh) e conectado à minha máquina virtual usando Kitty 0.70 no Windows 10 [Versão 10.0 .15063].

Meu problema é: Quando eu uso o comando multiline, a saída do comando no Kitty é realmente estranha.

Por exemplo:

No cliente Kitty ssh:

[ddk@mylinux:~]
14:23:08 $ if [[ -o interactive ]]
if> then
then> echo 'inter'
then> fi

then         # not my typing
echo 'inter' # not my typing
fi)inter     # not my typing
[ddk@mylinux:~]
14:23:34 $

No terminal da minha máquina virtual:

[ddk@mylinux:~]
14:23:54 $ if [[ -o interactive ]]
if > then
then > echo interactive
then > fi
interactive
[ddk@mylinux:~]
14:24:37 $

Então, como corrijo a saída imprópria no meu cliente Kitty ssh?

P / S: Estou executando o zsh sem nenhum script de pré-configuração como oh-my-zsh . Este é o meu .zshrc .

    
por mja 14.10.2017 / 09:55

1 resposta

2

Como Stéphane Chazelas observou, o problema está na sua função preexec . Quando você define o título do terminal, usa o comando sem proteger seus caracteres especiais. A primeira nova linha no comando termina a sequência de escape para definir o título e as outras linhas são impressas.

Você também teria um problema com barras invertidas e caracteres de porcentagem no comando, pois print executa a expansão de barra invertida e também está executando a expansão percentual de prompt no comando.

A solução é remover ou codificar caracteres de controle e executar a expansão de barra invertida para obter caracteres de controle separadamente dos caracteres no prompt. Por exemplo:

set_title () { print -rn $'\e]0;'${${:-${(%):-$1}$2}//[^[:print:]]/_}$'\a' }
precmd () { set_title '[%n@%M:%~]' '' }
preexec () { set_title '[%n@%M:%~]' " ($1)" }
    
por 15.10.2017 / 00:05