Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ANSI Escape在虚拟终端中捕获鼠标_C_Terminal_Ansi Escape - Fatal编程技术网

使用ANSI Escape在虚拟终端中捕获鼠标

使用ANSI Escape在虚拟终端中捕获鼠标,c,terminal,ansi-escape,C,Terminal,Ansi Escape,我已经开始通过谷歌的魔力在线学习ANSI转义序列。可以在屏幕上定位光标\e[row;colH,并设置输出的颜色(即:\e[31m) 接下来,我想尝试看看如何在虚拟终端中捕获鼠标。我意识到这段代码不可移植,我知道我可以使用ncurses或其他一些curses库,但这里的目标是了解它是如何工作的,而不是用它编写生产代码 我尝试过代码> \[1003H] /Cord>,它开始用鼠标事件填充屏幕(很酷!)但是,我如何在C或C++程序中捕获这些? 我看到了一个我想用PHP做的例子: 然而,当我尝试将代码移

我已经开始通过谷歌的魔力在线学习ANSI转义序列。可以在屏幕上定位光标
\e[row;colH
,并设置输出的颜色(即:
\e[31m

接下来,我想尝试看看如何在虚拟终端中捕获鼠标。我意识到这段代码不可移植,我知道我可以使用ncurses或其他一些curses库,但这里的目标是了解它是如何工作的,而不是用它编写生产代码

<>我尝试过代码> \[1003H] /Cord>,它开始用鼠标事件填充屏幕(很酷!)但是,我如何在C或C++程序中捕获这些?

我看到了一个我想用PHP做的例子:

然而,当我尝试将代码移植到C语言中的某个地方时,它只会锁定在while循环中

两个问题:

  • printf
    是(使用stdout)缓冲的,因此无法保证转义序列在尝试读取之前到达终端
  • stdin不一定是终端(尽管它可能是)。再说一次,(而且你可能不会像你希望的那样及时得到结果)
由于stderr没有缓冲,它将有助于发送该流的转义序列。与其使用
fread
,不如使用
read
,例如

read(fileno(stdin), buffer, 16)
read(fileno(stdin), buffer, 16)