A entrada do terminal não quebra corretamente ou

15

Por um tempo, já tive esse problema persistente em todos os meus terminais, desde o gnome default e o tilda que eu tanto uso até os que eu apenas dei um giro rápido, onde minha entrada substitui o início de sua própria linha quando deveria quebra automática e quebra automática apenas na próxima linha.

Pressionar Ctrl-A para retornar ao início da linha retornará a mim em algum lugar na linha antes da minha primeira linha de entrada, da qual qualquer outra entrada fica muito estranha.

Como essa é uma explicação muito ruim e difícil de visualizar, veja como fica:

Screencap: teste de quebra de linha

Alguém sabe o que é isso? Isso não acontece apenas sob certas circunstâncias, é uma coisa permanente que está sempre lá do início ao fim de cada sessão em cada emulador de terminal.

Saída de printf "%s\n" "$PS1" "$COLUMNS":

leod:~$ printf "%s\n" "$PS1" "$COLUMNS"
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 
80

Saída de stty -a:

leod:~$ stty -a
speed 38400 baud; rows 11; columns 140; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
leod
fonte
3
Adicione a saída de printf "%s\n" "$PS1" "$COLUMNS", por favor.
Muru
Pode ser que o seu programa testsaia do terminal em um estado instável. Se é um script, você pode incluí-lo na sua pergunta? O que acontece se você começar a digitar sem executar testprimeiro, o texto é quebrado normalmente?
WinEunuuchs2Unix
11
Podemos ver a saída stty -atambém, por favor?
steeldriver
11
@ Teste errado do WinEunuuchs2Unix (trocadilho intencional). Tente em type -a testvez disso.
Muru
11
Qual é o resultado de printf "%q\n" "$PS1"? Pode haver seqüências de escape brutas dentro do PS1 e as %sdeixa intactas (o que pode, por exemplo, alterar a cor para frente e para trás, que permanece despercebida na saída). %qcita todos os caracteres não imprimíveis de maneira legível.
Egmont

Respostas:

7

É possível que o seu terminal não esteja reconhecendo o tamanho da janela corretamente. Encontrei uma pergunta relacionada no U&L Stackexchange e alguém sugeriu a maneira abaixo de verificar se é isso que está acontecendo:

Tipo

shopt | grep checkwinsize

Se a saída não for:

checkwinsize    on

Você pode usar

shopt -s checkwinsize

ativar. Para desativar:shopt -u checkwinsize

Hee Jin
fonte
11
Talvez eu não tenha testado o suficiente, mas o meu checkwinsizejá foi on. Eu costumava shopt -u checkwinsizedesligá-lo e meu terminal ainda quebrava o texto corretamente. Não tenho certeza se esta resposta realmente resolve o problema do OP.
WinEunuuchs2Unix 01/04/19
Brilhante. Esta é a correção que eu precisava. O quebra de linha de comando agora funciona perfeitamente com mais de 80 caracteres.
Randy
@ Randy Fico feliz em saber que funcionou para você!
Hee Jin