当我研究鼠标与ncurses的接口时,我看到了很多选项,但是我没有看到任何方法来检测鼠标何时离开程序窗口。该窗口是终端仿真器的窗口,而不是ncurses窗口。
答案 0 :(得分:2)
那不是ncurses鼠标界面的repertoire中的内容,但是对于某些终端,您可以将它们设置为发送xterm的离开窗口和进入窗口控制序列,您的程序可以逐字节读取该序列使用getch
或使用define_key
将响应关联为“功能键”。
XTerm Control Sequences在 FocusIn / FocusOut 部分中列出:
FocusIn / FocusOut可以与任何鼠标事件组合,因为它可以 使用不同的协议。设置后,它将导致xterm发送
CSI
I
终端获得焦点时,而CSI
O
则失去焦点。
已启用
CSI ? Pm h
DEC Private Mode Set (DECSET).
...
Ps = 1 0 0 4 -> Send FocusIn/FocusOut events, xterm.
例如
printf("\033[?1004h");
fflush(stdout);
(其他一些终端也实现了此功能,但是由于它们没有记录其行为,因此您必须进行实验以找出这是否适用于您正使用的终端)。
在ncurses中,您可以将响应与define_key
相关联,例如,
#define KEY_FOCUS_IN 1001
#define KEY_FOCUS_OUT 1002
define_key("\033[I", KEY_FOCUS_IN);
define_key("\033[O", KEY_FOCUS_OUT);
并且(如果启用了keypad
,则在程序中检测到那些值作为getch
的返回值。