So wie ich es verstehe, erscheinen Zeichen beim Eintippen in einen Terminalemulator, weil sie „echoed“ sind. Wir stellen uns vor, dass das Terminal ein separates Gerät ist, das über einen bidirektionalen Kanal mit dem Computer kommuniziert, und dass jede eingegebene Taste den Bildschirm nicht sofort aktualisiert, sondern erscheint, wenn sie vom Computer zurückgesendet wird.
Meine Frage ist, wie es möglich ist, dass die Rücktaste oder eine andere Taste, die mit auf "Löschen" eingestellt ist stty
, scheinbar ein Zeichen auf dem Bildschirm löscht. Wenn in einem xterm
I
$ stty erase x
$ cat -
aaaaaaaaaax
das letzte, x
das ich eingebe, scheint das letzte zu löschen a
. Wenn dies jedoch ein echtes Terminal wäre, das vom Computer getrennt ist, hätte es keine Möglichkeit zu wissen, welches stty erase
Zeichen es war. Ich würde dieses Verhalten nur erwarten, wenn das Löschzeichen wäre ^H
und es wiederholt würde und das Terminal dies als spezielles Steuerzeichen interpretiert, das ihm sagt, das Zeichen vor dem Cursor zu löschen.
Ist das eine Eigenart von Terminalemulatoren, die „schummeln“ und nachschauen, um welches stty erase
Zeichen es sich handelt?
Antwort1
Der Terminalemulator sendet das x
Zeichen und der Terminaltreiber erkennt, dass es als Löschzeichen konfiguriert wurde. Anstatt es also an den Emulator zurückzumelden, sendet er die entsprechende Sequenz zum Löschen des vorherigen Zeichens (z. B. Rücktaste-Leertaste-Rücktaste).
Selbst wenn das Löschzeichen auf eingestellt ist Backspace, würde eine einfache Wiederholung nicht wirklich das Eingegebene löschen. Wenn ein BS
Zeichen an ein Terminal gesendet wird, bewegt es den Cursor nur ein Zeichen nach links, es löscht es nicht. Der Terminaltreiber müsste also trotzdem eine zusätzliche Leertaste/Rücktaste senden, um es zu löschen und den Cursor an dieser Stelle zu belassen.