NCurses中的鼠标移动事件
我想知道NCurses中是否存在诸如鼠标移动事件之类的事情,以及是否有办法捕获它们。在与鼠标接口之后(来自NCurses编程HOWTO),似乎通过启用对REPORT_MOUSE_POSITION
的调用mousemask
,可以确实捕获鼠标移动事件。
因此,我尝试了一下,但似乎没有用。我有这样的事情:
int ch, count=0;mmask_t old;
initscr ();
noecho ();
cbreak ();
mousemask (ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, &old);
keypad (stdscr, TRUE);
while ((ch = getchar ()) != 'q')
{
count++;
if (ch == KEY_MOUSE)
{
MEVENT event;
assert (getmouse (&event) == OK);
mvprintw (0, 0, "Mouse Event!\n");
}
mvprintw (1, 1, "Event number %4d",count);
}
...
我期望随着鼠标光标的移动,事件计数器将增加。但事实并非如此。我还尝试在按下鼠标按钮1的同时将其移动,以查看是否生成“拖动”事件,并且它也没有执行任何操作。问题是,这是否仅仅是我的终端仿真器的问题?还是我误会了NCurses认为的鼠标移动事件?收到了所有其他鼠标事件(并且我可以在使用鼠标的控制台中操作程序)。
我尝试了gnome-terminal,xterm和其他一些东西。我还通过转到Linux计算机的tty(Fedora 15,Ctrl + Alt +
F2)尝试了文本环境(不带X),但该方法不起作用。
最后,假设我得到这个权利,这些事件应该报告,什么是bstate
一个领域MEVENT
的鼠标移动evenet?
提前谢谢了!
回答:
你需要:
- 支持鼠标事件报告的终端;
$TERM
指向terminfo条目,该条目具有适当的XM
条目以正确初始化终端。
xterm
至少满足(1);对于(2),您可能需要为设置一个不同的值TERM
。
尝试:
TERM=xterm-1002
在按住按钮的同时将光标移到另一个单元格时获得位置事件;要么TERM=xterm-1003
即使光标没有被按下,只要光标移动到另一个单元格,总是会得到一个位置事件。
结果事件REPORT_MOUSE_POSITION
将在bstate
字段上设置该位。
(curs_mouse(3x)
手册页的“ PORTABILITY”部分描述了终端的初始化,Xterm
Control Sequences文档的“
Mouse Tracking”部分描述了相关的“ private mode”扩展。)
您上面提供的代码getch()
无需使用getchar()
;并且需要一个refresh()
内部循环!除此之外,xterm
当使用适当的TERM
设置之一时,它对我有用。
以上是 NCurses中的鼠标移动事件 的全部内容, 来源链接: utcz.com/qa/413663.html