c++ - ncurses 检测鼠标何时离开窗口
问题描述
当我研究鼠标与 ncurses 的接口时,我看到了很多选项,但我没有看到任何方法来检测鼠标何时离开程序窗口。该窗口是终端仿真器的窗口,而不是 ncurses 窗口。
解决方案
这不在ncurses的鼠标界面中,但对于某些终端,您可以将它们设置为发送 xterm 的离开和进入窗口控制序列,您的程序可以使用 逐字节读取getch
,或者使用define_key
关联响应作为“功能键”。
FocusIn/FocusOut部分中的XTerm 控制序列列表:
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
.
推荐阅读
- javascript - 如何与 Node.js 服务器中加载的 HTML 页面进行交互?
- ormlite-servicestack - LoadSelect 创建意外查询
- c# - 使用 MVC 操作过滤器将自定义参数添加到每个查询字符串中
- xml - 使用 Zeep 修改 SOAP 标头
- jquery - 使用 PHP 和 jQuery 上传多个图像
- java - 有没有办法将方法包含在表单布局的响应步骤中
- python - 为什么我在树莓派上通过串口接收到无法读取的数据?
- java - 如何编辑生成的字符串?
- javascript - 反向地理编码被阻止
- r - 如何在使用 bind_rows() 之前删除列表中的空数据框?