画面に何も書き込まず、常に追跡せずに、プログラムでカーソル位置 (x, y) を取得する方法を知りたいです。
この関数でその位置を取得する方法を見つけました (ここでは、この件に関するより小さなコードを書くために読み取り、書き込みなどの戻り値をチェックしませんが、プログラムで行います):
void get_cursor_position(int *col, int *rows)
{
int a = 0;
int i = 0;
char buf[4];
write(1, "\033[6n", 4); // string asking for the cursor position
read(1, buf, 4);
while (buf[i])
{
if (buf[i] >= 48 && buf[i] <= 57)
{
if (a == 0)
*rows = atoi(&buf[i]) - 1;
else
*col = atoi(&buf[i]) - 1;
a++;
}
i++;
}
}
この関数は正確なカーソル位置 (*rows = y, *col = x) を提供しますが、画面に書き込みます。
画面に何も書かずにカーソル位置を取得するにはどうすればよいですか?
(カーソルが印刷された文字の 1 つにある場合、それは上書きされます。)
エスケープ シーケンスの送信前と送信後にエコーを切り替える必要がありますか?
これは学校のプロジェクトなので、termcap しか使えません。ncurses 関数は使えません。使用できる関数は、tputs、tgoto、tgetstr、tgetnum、tgetflag だけです。