
私の理解では、ターミナル エミュレーターで文字を入力すると、その文字が「エコー」されるので表示されます。ターミナルは、双方向チャネルを介してコンピューターと通信する別のデバイスであり、入力された各キーは画面をすぐに更新せず、コンピューターから送り返されたときに表示されるものと想定します。
私の質問は、バックスペースキー、または「消去」に設定されているキーstty
が画面上の文字を消去するように見えるのはなぜかということです。xterm
$ stty erase x
$ cat -
aaaaaaaaaax
最後にx
入力すると、最後の文字が消去されるようですa
。ただし、これがコンピュータとは別の実際の端末である場合、stty erase
文字が何であるかを知る方法はありません。この動作が得られると予想される唯一の方法は、消去文字があり^H
、それがエコーされ、端末がこれをカーソルの前の文字を消去するように指示する特別な制御文字として解釈した場合です。
これは、ターミナル エミュレータが「ごまかし」をして文字が何であるかを調べるという特殊な機能なのでしょうかstty erase
。
答え1
ターミナル エミュレーターはx
文字を送信し、ターミナル ドライバーはこれが消去文字として設定されていることを認識します。そのため、エミュレーターに文字をエコーバックする代わりに、前の文字を消去するための適切なシーケンス (例: バックスペース - スペース - バックスペース) を送信します。
消去文字が に設定されている場合でもBackspace、それを単にエコーするだけでは、実際に入力された内容は消去されません。BS
文字が端末に送信されると、カーソルが 1 文字左に移動するだけであり、クリアされるわけではありません。そのため、端末ドライバーは、それをクリアしてカーソルをその場所に残すために、追加のスペース キーとバックスペース キーを送信する必要があります。