我已经实现了一个终端模拟器和一个相应的terminfo条目,允许我运行像emacs,mc(午夜指挥官)或tig(git浏览器)这样的ncurses程序.我想为终端添加鼠标支持,最值得注意的是通过点击窗口将光标定位在emacs中.经过大量的谷歌搜索和一些关于stackoverflow的帮助后,我了解了所需的terminfo字段(最值得注意的是)和控制(例如)和"key"()序列,并在终端中实现了鼠标按钮事件.我写了一个小的ncurses程序,它是这样的:kmous\E[?1000h\E[M...
initscr ();
clear ();
noecho ();
cbreak ();
keypad (stdscr, TRUE);
mousemask (ALL_MOUSE_EVENT, NULL);
if (has_mouse ())
{
  while (1)
  {
    switch (getch ())
    {
    case KEY_MOUSE:
      if (getmouse (&event) == OK)
      {
        printf ("mouse event 0x%x at %i,%i\n", event.bstate, event.x, event.y);
这个程序在xterm和我的终端上运行正常,所以我的终端和它的terminfo条目都不能完全错误.
但是,mc似乎无法识别终端中的鼠标支持,甚至没有发出任何\E[?1000h序列来激活它,因此我的终端发送的鼠标按钮事件(即使没有\E[?1000h激活)也完全混淆了.
我错过了什么?