Bar*_*kin 11 c linux terminal ncurses mouseevent
我想知道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);
}
...
Run Code Online (Sandbox Code Playgroud)
我预计,当我移动鼠标光标时,我会看到事件计数器增加.但事实并非如此.我也尝试在鼠标按钮1关闭时移动它以查看是否生成"拖动"事件,它也没有做任何事情.问题是,如果它只是我的终端模拟器的问题?或者我可能误解了NCurses认为的鼠标移动事件?收到了所有其他鼠标事件(我可以在控制台中使用鼠标操作程序).
我尝试过gnome-terminal,xterm和其他一些东西.我还尝试了一个文本环境(没有X),转到我的linux机器的tty(Fedora 15,Ctrl + Alt + F2),但是没有用.
最后,假设我确实做到了这一点并且应该报告那些事件,那么鼠标运动evenet 的bstate领域是什么MEVENT?
提前谢谢了!
Mat*_*ery 20
你需要:
$TERM指向terminfo条目,该条目具有XM正确初始化终端的适当条目.xterm至少满足(1); 对于(2),您可能需要为其设置不同的值TERM.
尝试:
TERM=xterm-1002当按下按钮时光标移动到另一个单元格时获取位置事件; 要么TERM=xterm-1003 即使没有按下任何按钮,每当光标移动到不同的单元格时总是获得位置事件.结果事件REPORT_MOUSE_POSITION在bstate字段上设置了位.
(curs_mouse(3x)手册页的"可移植性"部分描述了终端初始化,Xterm控制序列文档的"鼠标跟踪"部分描述了相关的"私有模式"扩展.)
您上面给出的代码需要使用getch(),而不是getchar(); 并需要refresh()循环内部!除此之外,它适用于我xterm使用其中一个适当的TERM设置.