Terminal.app personagem bash ecoando confuso

0

Estou tendo um problema com o meu terminal há algum tempo. Parece que a combinação de bash (ou melhor, readline) e Terminal.app se confunde de alguma forma quando eu aperto a tecla cursor-right para sair do modo “reverse-i-search” (Control-R). Depois, os caracteres à direita do cursor são duplicados. Vim, sendo uma aplicação mais complexa, reage duplicando os caracteres na ordem errada.

Mostrarei algumas capturas de tela para ilustrar o problema.

Primeiro de tudo, esta é uma nova janela de terminal rodando “GNU bash, versão 3.2.48 (1) -release (x86_64-apple-darwin10.0)” (OSX 10.6.4). O prompt é bastante complexo, você pode encontrar o código no GitHub . Não tenho ideia se o meu prompt está causando os problemas, mas no Linux não. Para completar, vou explicar em algum grau: A parte ciano está mostrando o status do Git para o diretório atual e gerado por PROMPT_COMMAND . Um exemplo $PS1 tem esta aparência:

\[\e]0;\u@\h:\w\a\]\[\e[1;32m\]\u\[\e[0;32m\]@\[\e[1;30m\]\h\[\e[1;34m\] \w \[\e[0;36m\]di ~? \[\e[1;30m\]\[\e[0;37m\]\A \[\e[0;33m\]\[\e[1;31m\]1\$\[\e[0m\]

Para referência, esta é a saída de stty :

speed 9600 baud; 50 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
 -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
 -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
 -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
 -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
 eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
 min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
 stop = ^S; susp = ^Z; time = 0; werase = ^W;

Não deve haver nenhuma configuração não padrão aqui. Para o caso de teste:

Eu digito echo 126 e, em seguida, clico em "cursor para a esquerda" uma vez, depois digito 345 e, em seguida, pressionamento "retornar". Então, eu apertei Control-R e digitei "p". Foi quando tirei esta primeira captura de tela:

Agora,depoisdepressionar"cursor right" para sair do modo de pesquisa inversa, o terminal emite um bipe e começa a ficar confuso:

Parademonstraroproblema,eufaçoexatamenteomesmoechodeantes:eudigitoecho126,movoumcaractereparaaesquerdaedigito345,seguidoderetorno.

Como você pode ver, para cada caractere que eu digite, outro "6" é exibido à direita do cursor. As coisas ficam ainda piores quando entro no Vim. Este é o meu recém-iniciado Vim depois de entrar no modo de inserção e digitar um caractere de espaço:

(Oespaçoqueestásendomostradocomosublinhadoénormal,essaéaopção'list'emação.)

Vejacomoamensagemdesaudaçãosemoveparaadireitadeumamaneiraestranha?Outroexemploéoseguinte:UmnovoVimapósinseriri126<Left>345<Esc>:

Agora, alguma ideia do que está acontecendo aqui? É óbvio que trabalhar dessa maneira é quase impossível. Usar reset funciona, mas fazer isso toda vez não é a coisa mais conveniente a fazer.

Se você precisar de informações adicionais, ficaremos felizes em fornecê-las. Além disso, sou um usuário de CLI experiente, então você não precisa explicar tudo à prova de falhas.

    
por scy 10.11.2010 / 12:07

2 respostas

1

Eu não consegui reproduzir isso. Estou usando o perfil Pro no Terminal.app e defino 'Declare terminal as' como rxvt. Talvez isso ajude.

    
por 10.11.2010 / 12:51
2

Eu não posso dizer o que neste momento, mas há algo definitivamente não certo na string de prompt do PS1 que você está usando que está fazendo com que o Terminal atue quando está usando a emulação "xterm-color". Eu tenho a mesma versão do BASH e MacOS como você faz aqui, e eu corro meu terminal em emulação de cor xterm. No momento em que exportei a variável PS1 com o valor que você forneceu na pergunta e fiz o truque mencionado no modo de pesquisa inversa, pude ver exatamente o mesmo comportamento em meu Terminal do que no seu.

    
por 10.11.2010 / 13:53