使用ANSI Escape在虚拟终端中捕获鼠标
我已经开始通过谷歌的魔力在线学习ANSI转义序列。可以在屏幕上定位光标使用ANSI Escape在虚拟终端中捕获鼠标,c,terminal,ansi-escape,C,Terminal,Ansi Escape,我已经开始通过谷歌的魔力在线学习ANSI转义序列。可以在屏幕上定位光标\e[row;colH,并设置输出的颜色(即:\e[31m) 接下来,我想尝试看看如何在虚拟终端中捕获鼠标。我意识到这段代码不可移植,我知道我可以使用ncurses或其他一些curses库,但这里的目标是了解它是如何工作的,而不是用它编写生产代码 我尝试过代码> \[1003H] /Cord>,它开始用鼠标事件填充屏幕(很酷!)但是,我如何在C或C++程序中捕获这些? 我看到了一个我想用PHP做的例子: 然而,当我尝试将代码移
\e[row;colH
,并设置输出的颜色(即:\e[31m
)
接下来,我想尝试看看如何在虚拟终端中捕获鼠标。我意识到这段代码不可移植,我知道我可以使用ncurses或其他一些curses库,但这里的目标是了解它是如何工作的,而不是用它编写生产代码
<>我尝试过代码> \[1003H] /Cord>,它开始用鼠标事件填充屏幕(很酷!)但是,我如何在C或C++程序中捕获这些?
我看到了一个我想用PHP做的例子:
然而,当我尝试将代码移植到C语言中的某个地方时,它只会锁定在while循环中
两个问题:
是(使用stdout)缓冲的,因此无法保证转义序列在尝试读取之前到达终端printf
- stdin不一定是终端(尽管它可能是)。再说一次,(而且你可能不会像你希望的那样及时得到结果)
fread
,不如使用read
,例如
read(fileno(stdin), buffer, 16)
read(fileno(stdin), buffer, 16)