鼠标在NCurses中的移动事件

我想知道在NCurses中是否有鼠标移动事件,以及是否有办法抓住它们。 在与鼠标接口之后(来自NCurses编程HOWTO ),似乎通过在调用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); } ... 

我希望当我移动鼠标光标时,我会看到事件计数器增加。 但事实并非如此。 我也试着移动它,而鼠标button1下来,看看是否产生“拖”事件,也没有做任何事情。 问题是,如果这只是我的terminal模拟器的问题? 或者,也许我误解了什么NCurses认为鼠标移动事件? 所有其他的鼠标事件都收到了(我可以在控制台中使用鼠标操作程序)。

我试过gnome-terminal,xterm和其他一些东西。 我也尝试了一个文本环境(没有X),通过我的Linux机器的tty(Fedora 15,Ctrl + Alt + F2),这并没有奏效。

最后,假设我确实正确地做了这些事情,那么这些事件应该被报告,一个鼠标移动evenet的MEVENTbstate字段是什么?

提前谢谢了!

Solutions Collecting From Web of "鼠标在NCurses中的移动事件"

你需要:

  1. 支持鼠标事件报告的终端;
  2. $TERM指向一个terminfo条目,该条目具有适当的XM条目以正确初始化终端。

xterm至少满足(1); 对于(2),您可能需要为TERM设置不同的值。

尝试:

  • TERM=xterm-1002 ,在按住按钮的同时,光标移动到另一个单元格时获取位置事件; 要么
  • TERM=xterm-1003 ,当光标移动到不同的单元格时,即使没有按下任何按钮,也总能得到位置事件。

结果事件在bstate字段上设置了bstate位。

curs_mouse(3x)手册页的“ curs_mouse(3x) ”部分描述了终端初始化, Xterm控制序列文档的“鼠标跟踪”部分描述了相关的“私有模式”扩展。)

上面给出的代码需要使用getch() ,而不是getchar() ; 并需要在循环内refresh() ! 除此之外,当使用其中一个适当的TERM设置时,它适用于xterm