我正在尝试使用libgpm,看起来该程序检测到鼠标点击, 但作为副作用,它会向终端输出这样的内容:
^[[M <7^[[M#<7^[[M <7^[[M#<7^[[M <7^[[M#<7^[[M <7^[[M#<7^[[M Y=^[[M#M<^[[M !=^[[M#)=
即使我删除了对Gpm_Getc()
的任何调用,也请保持代码简单:
#include <gpm.h>
int main(int argc, char *argv[])
{
Gpm_Connect conn;
int c;
conn.eventMask = 0;
conn.defaultMask = ~0;
conn.minMod = 0;
conn.maxMod = ~0;
if (Gpm_Open(&conn, 0) == -1)
printf("Cannot connect to mouse server\n");
while (1);
Gpm_Close();
return 0;
}
我仍然看到那些乱码。我估计,它们代表鼠标事件。但在我的代码中没有直接指令来打印它们。为什么他们打印到我的终端?如何避免这种情况?
我在linux上使用gnome-terminal,而不是真正的控制台,如果这很重要。
答案 0 :(得分:1)
如果TERM
环境变量为xterm
,则GPM不会尝试打开Linux控制台。
相反,它只是打开 xterm 鼠标模式(这使得终端发送转义序列),事实证明,期待 应用程序 处理它而不是将转义序列转换为其协议。
从ncurses的角度来看,这使得它在终端模拟器中的行为不太有用,并且库会检查这种情况并忽略GPM(从2010开始)。