端末の応答とユーザー入力を区別する方法は?

端末の応答とユーザー入力を区別する方法は?

たとえば、プログラムから端末の現在のカーソル位置を取得したいとします。tput u7または\E[6nxtermから):

CSI P s n

P s = 6 → Report Cursor Position (CPR) [row;column] as CSI r ; c R

私のプログラムの標準出力にこのシーケンスを書き込みます。その後、標準入力に対する端末の応答を読みました。 (ttyはこの間生のモードにあります)

問題は、ユーザーが要求を送信した直後に応答を送信する前または応答の途中でエスケープシーケンス(特定のキーを押して)または数字または他の項目を入力した場合はどうなりますか?この機能はどのように機能しますか?このメカニズムに欠陥があるのでしょうか、それとも私が何かを見逃しているのでしょうか?

ベストアンサー1

端末のカーソル位置とキーボード入力の両方を報告します。端末がこれらのエスケープシーケンスを受信したら、バッファリングされたキーボード入力を送信する前にそれを解釈する必要があります。キーボード入力は、カーソル位置が転送された後にのみプログラムに転送する必要があります。ここにあるすべての端末が機能するかどうかはわかりません。端末にクライアントソフトウェアがある場合、それを制御することはできません。

おすすめ記事