Letztes Tabulatorzeichen springt nicht zur nächsten Zeile im Terminal

0

Ich bin auf ein Problem gestoßen. In meinem Fall war es ein Lua-Programm, das eine Reihe von Zahlen druckte. Lua verwendet Tabulatoren als Trennzeichen, und die Ausgabe wurde in meinem 80-Spalten-Terminal folgendermaßen ausgegeben:

1       2       3       4       5       6       7       8       9       10      1
1      12

Beachten Sie, wie die Zahl 11 abgeschnitten wird, wobei die erste 1 in Spalte 79 und die zweite 1 in Spalte 0 der nächsten Zeile steht. Ich habe erwartet, dass stattdessen die vollständige Nummer 11 in der nächsten Zeile erscheint.

Es ist nicht Lua-spezifisch und mit diesem Einzeiler leicht reproduzierbar:

printf '1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12'

Ich habe diese Frage und die akzeptierte Antwort gelesen: Warum befinden sich auf einer 80-Spalten-Konsole 11 Tabstopps? was mich verstehen ließ, warum das passiert. Die Frage ist, gibt es eine Möglichkeit, dieses Verhalten außer Kraft zu setzen, damit der letzte Tabulator in der nächsten Zeile zur Spalte 0 springt und nicht zur letzten Spalte in der aktuellen Zeile?

Pedro Gimeno
quelle

Antworten:

2

Nein, Sie können dies nicht automatisch ausführen, dh ohne die Ausgabe Ihres Programms zu filtern und die Registerkarte am rechten Rand als Zeilenumbruch zu interpretieren. Dies liegt daran, dass der Zeilenumbruch im VT100-Stil bis zum rechten Rand reicht und erst dann umbrochen wird, wenn Sie ein druckbares Zeichen schreiben . Registerkarten können nicht gedruckt werden.

Die meisten Terminals sind für die Verwendung von Soft-Tabs eingerichtet (bereits auf Leerzeichen erweitert). Sie können Ihre sttyEinstellungen überprüfen, um festzustellen, ob dies der Fall ist. Die Ausgabe ist dunkel, tab0bedeutet aber , dass versucht wird, Tabulatoren zu verwenden, während tab3dies nicht der Fall ist.

So zeigen Sie die Einstellung an:

stty -a

So deaktivieren Sie Hard-Tabs:

stty -tabs

Lua kann diese Einstellung überschreiben, aber wenn dies nicht der Fall ist, besteht die Möglichkeit, dass es sich spaceum ein druckbares Zeichen handelt.

Weitere Lektüre:

Thomas Dickey
quelle
Aber gibt es nicht einen Terminaltyp und / oder ein Terminalprogramm, die nicht dem VT100-Standard entsprechen und explizit gegen diese Regel verstoßen? Die Regel klingt ziemlich nutzlos, verwirrend und an die Vergangenheit gebunden.
Pedro Gimeno
Das ist der Teil, den Sie lesen möchten ("Weitere Lektüre"). Das von Ihnen angegebene Q / A ist für mich nicht nützlich.
Thomas Dickey
Ich habe es gelesen, aber es beantwortet die Frage nicht. Ich habe xvt, rxvt, mrxvt, konsole, pterm, lxterminal, xfce4-terminal, screen und xterm ausprobiert. Jeder von ihnen hat sich bei der Eingabe der obigen Druckzeile gleich verhalten. Die Frage ist, ob es einen gibt, der dies nicht tut, oder ob es einen Terminaltyp oder ein Terminalprogramm gibt, das diesbezüglich absichtlich nicht VT100-kompatibel ist.
Pedro Gimeno
Drucken Sie eine lange Zeile mit Leerzeichen (z. B. 90) und einem Sternchen. Das sollte einwickeln. Dasselbe mit Tabs zu tun, geht nicht.
Thomas Dickey