我已经实现了一个终端仿真器和一个相应的 terminfo 条目,它允许我运行ncurses程序,如emacs、mc(午夜指挥官)或tig(git 浏览器)。我想为终端添加鼠标支持,最值得注意的是通过单击窗口将光标定位在emacs中。经过大量谷歌搜索和对 stackoverflow 的一些帮助后,我了解了所需的 terminfo 字段(最值得注意的是kmous
)和控制(例如\E[?1000h
)和“键”(\E[M...
)序列,并在我的终端中实现了鼠标按钮事件。我写了一个小的ncurses程序,它是这样的:
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
激活)弄糊涂了。
我错过了什么?