Ich frage mich, warum Backspace-Zeichen in gewöhnlichen Linux-Terminals die Zeichen nicht wirklich löscht, wenn gedruckt (was normalerweise funktioniert, wenn getippt wird) ..
Dies funktioniert wie erwartet:
%Vor% ( \b
wird als Rückschritt ausgewertet, kann auch als Strg + V Strg + H eingefügt werden - dargestellt als ^H
( 0x08
))
Wenn jedoch nach den Backspaces weniger Zeichen vorhanden sind, wird das seltsame Verhalten aufgedeckt:
%Vor%verhält sich wie linke Pfeiltasten anstelle von Rücktaste:
%Vor%Löscht die Zeilenrückseite funktioniert normal:
%Vor% Wenn ich Strg + V Backspace im Terminal tippe, wird ^?
( 0x7f
) anstelle von% zurückgegeben. co_de%, das ist Del ASCII-Zeichen, aber Strg + V Del erzeugt ^H
, aber es ist eine andere Geschichte ..
Kann also jemand erklären, warum gedruckte Rücktaste die Zeichen nicht löscht?
(Meine Umgebung ist xterm Linux und einige andere Terminal-Emulatoren, <ESC>[3~
== $TERM
, versuchte xterm
, vt100
auch)
Was Sie sehen, ist richtig. Backspace oder ^H
bewegt den Cursor nach links, kein Löschen. Um ein Zeichen zu löschen, müssen Sie ^H ^H
(Backspace-Space-Backspace) ausgeben.
Um Ihren Kommentar zu beantworten - Backspace ist in der VT100 / ANSI-Familie von Terminals so definiert, von denen viele Terminalsteuerungscodefolgen borgen. Sehen Sie das VT100 Benutzerhandbuch hier , das die Funktion von BS definiert als "Verschiebt den Cursor nach links zur einen Zeichenposition, außer es ist am linken Rand, in diesem Fall keine Aktion auftritt ". Mit anderen Worten, es ist eine Eigenart der Geschichte:)
Warum wurde es ursprünglich so definiert? Ich denke, es ist flexibler, einen nichtdestruktiven Cursor-Bewegungssteuercode zu haben, da der destruktive Rückschritt wie oben gezeigt implementiert werden kann.