我想知道如何在我的程序中获取光标位置(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),但它会写在屏幕上。
如何在屏幕上不写任何内容的情况下获得光标位置?
(如果光标位于其中一个打印字符上,它将覆盖它。)
是否应该在发送转义序列之前和之后切换回显?
这是一个学校项目,所以我只能用termcap,不能用ncurses函数,唯一允许的函数是tputs、tgoto、tgetstr、tgetnum、tgetflag。