ncurses检测鼠标何时离开窗口

时间:2019-02-01 03:22:41

标签: c++ linux console ncurses xterm

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

1 个答案:

答案 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的返回值。