Wejście terminala nie jest poprawnie zawijane lub wcale

15

Od jakiegoś czasu mam ten uporczywy problem na wszystkich moich terminalach, od domyślnego gnoma i tilda, których oboje używam, po te, które właśnie wykonałem szybki wir, w którym moje dane wejściowe zastąpią początek własnej linii, kiedy powinna zawiń i tylko zawiń w następnym wierszu.

Naciśnięcie Ctrl-A, aby powrócić na początek linii, zamiast tego zwróci mnie gdzieś w linii przed pierwszą linią wejściową, z której każde kolejne wejście stanie się bardzo dziwne.

Ponieważ jest to bardzo złe wytłumaczenie i trudne do wyobrażenia, oto jak to wygląda:

Screencap: test zawijania linii

Czy ktoś wie co to jest? Dzieje się tak nie tylko w pewnych okolicznościach, jest stałą rzeczą, która jest zawsze dostępna od początku do końca każdej sesji w każdym emulatorze terminali.

Wyjście 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

Wyjście 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
źródło
3
Dodaj wynik printf "%s\n" "$PS1" "$COLUMNS", proszę.
muru
Możliwe, że Twój program testpozostawia terminal w niestabilnym stanie. Jeśli jest to skrypt, czy możesz to uwzględnić w swoim pytaniu? Co się stanie, jeśli zaczniesz pisać bez uruchamiania test, czy tekst zawija się normalnie?
WinEunuuchs2Unix
1
Czy możemy również zobaczyć wynik stty -a?
steeldriver 15.01.2018
1
@ WinEunuuchs2Unix zły test (gra słów zamierzona). Próbowaćtype -a test zamiast tego.
muru
1
Jaka jest wydajność printf "%q\n" "$PS1"? W PS1 mogą znajdować się surowe sekwencje specjalne, które %spozostawiają je nienaruszone (co może np. Zmienić kolor tam iz powrotem, co pozostaje niezauważone na wydruku). %qcytuje każdy niedrukowalny znak w czytelny sposób.
egmont

Odpowiedzi:

7

Możliwe, że twój terminal nie rozpoznaje poprawnie rozmiaru okna. Znalazłem powiązane pytanie w U&L Stackexchange i ktoś zasugerował poniższy sposób sprawdzenia, czy tak się dzieje:

Rodzaj

shopt | grep checkwinsize

Jeśli wyjście nie jest:

checkwinsize    on

Możesz użyć

shopt -s checkwinsize

aktywować. Aby dezaktywować:shopt -u checkwinsize

Cześć Jin
źródło
1
Być może nie przetestowałem wystarczająco dużo, ale mój checkwinsizejuż był on. Kiedyś shopt -u checkwinsizego wyłączałem, a mój terminal nadal poprawnie zawijał tekst. Nie jestem pewien, czy ta odpowiedź naprawdę rozwiązuje problem OP.
WinEunuuchs2Unix
Znakomity. To jest poprawka, której potrzebowałem. Zawijanie wiersza poleceń działa teraz doskonale przy ponad 80 znakach.
Randy
@Randy Glad, aby usłyszeć, że zadziałało dla Ciebie!
Hee Jin