我正在开发一个shell项目,需要编写一个(不是一个很完整的项目,但是仍然)。 我需要获取光标的位置,因为我正在进行行编辑,而我是这样进行的:
void get_cursor_pos(t_coord *actualize, t_prompt *prompt)
{
char buf[50];
int loop;
ft_flush(prompt); //my function to flush stdin and not confuse user input with what i' going to get here
bzero(buf, 50); //clean the place where i'm going to get the data
write(1, "\033[6n", 4); //writing this escape character will send me the position of the cursor with syntax "[[y_position;x_position]R"
read(1, buf, 49); //getting what was sent
actualize->y = ft_atol(&buf[2]); //converting and stocking data for y coordinate
loop = 2;
while (buf[loop] != ';') //going to the x coordinate place in the string
loop++;
actualize->x = ft_atol(&buf[loop + 1]); //getting x coordinate
}
我的终端设置为非规范模式。 就在刷新之前,我想使终端不读取用户输入,并稍后再将其设置为正常:如果用户在刷新和读取之间写入内容,则数据将被破坏! 您可能会说“ nah!不会发生”,但是,如果我不停地按“ enter”(输入),我会时不时地(有时每50次给出一次)获得新的齿龈,它就损坏了!
我在网上查找并发现了CREAD flag
,但是它不起作用,我仍在阅读用户输入。
shell.c_cflag &= ~(CREAD); //am i doing it the right way? btw i'm on Mac
我没有使用ncurse
(有限制的学校项目)。
我的问题只有在我不停地按下'enter
'时才会发生,所以我只是添加了一个条件来检查并且我的问题消失了,但是我觉得这样做不正确。
还有另一种方法吗?
感谢您的关注! (如果这个问题已经在互联网上回答了,很抱歉,我发誓我已经做了很多研究,但是我不排除没有使用好的关键字,所以如果您找到它,请给我您使用的关键字:-))