ncurses检测鼠标何时离开窗口

ncurses detect when mouse leaves window

本文关键字:开窗口 何时离 鼠标 检测 ncurses      更新时间:2023-10-16

当我研究鼠标与ncurses的接口时,我看到了很多选项,但我看不到任何方法可以检测鼠标何时离开程序窗口。该窗口是终端模拟器的窗口,而不是ncurses窗口。

这不在ncurses的鼠标界面的曲目中,但对于某些终端,您可以设置它们发送xterm的离开并输入窗口控制序列,您的程序可以使用getch逐字节读取这些序列,或者使用define_key将响应关联为"函数键"。

XTerm控制序列FocusIn/FocusOut:部分列出

FocusIn/FocusOut可以与任何鼠标事件组合,因为它使用不同的协议。设置后,当终端获得焦点时,它会导致xterm发送CSII,当终端失去焦点时,发送CSIO

使用启用

CSI ? Pm h
DEC Private Mode Set (DECSET).
...
Ps = 1 0 0 4  -> Send FocusIn/FocusOut events, xterm.

例如

printf("33[?1004h");
fflush(stdout);

(其他一些终端实现了这一点,但由于它们没有记录自己的行为,您必须进行实验,以确定这是否适用于您碰巧使用的终端)。

在ncurses中,您可以将响应与define_key相关联,例如

#define KEY_FOCUS_IN     1001
#define KEY_FOCUS_OUT    1002
define_key("33[I", KEY_FOCUS_IN);
define_key("33[O", KEY_FOCUS_OUT);

和(如果启用了keypad),则在程序中检测这些值作为getch的返回值。