Gpm_Open()连接,但在鼠标单击时打印到控制台

时间:2018-05-22 21:47:58

标签: terminal console mouse xterm

我正在尝试使用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,而不是真正的控制台,如果这很重要。

1 个答案:

答案 0 :(得分:1)

如果TERM环境变量为xterm,则GPM不会尝试打开Linux控制台。

相反,它只是打开 xterm 鼠标模式(这使得终端发送转义序列),事实证明,期待 应用程序 处理它而不是将转义序列转换为其协议。

从ncurses的角度来看,这使得它在终端模拟器中的行为不太有用,并且库会检查这种情况并忽略GPM(从2010开始)。