2

我正在为 Linux 上的控制台程序编写命令行界面。我希望能够在其中使用箭头之类的键。因此,为了捕获代码,我使用了这个简单的程序:

int main()
{
    int c = 0;
    while (c != 3) { // ctrl-c
        c = getchar();
        printf("%d\n", c);
    }
}

这样做我在捕获 HOME 键时遇到了问题。在一台计算机上,我得到序列“27 91 72”,在另一台计算机上得到“27 79 72”,在第三台计算机上得到“27 91 49 126”。

我不知道为什么我在 HOME 和 END 键上得到如此不同的代码(箭头和 F1-F12 键在三台计算机上给出了相同的序列)。

有没有一种标准的方法来获取这个密钥,或者某种配置可以在所有机器上给我相同的序列?

4

1 回答 1

6

你可以使用 curses 框架。

使用诅咒时,很容易获得特殊的按键。但缺点是你必须在链接时拉入整个curses 库(例如使用gcc -lcurses)并且你必须在初始化的curses 屏幕中使用所有curses 函数。

#include <stdio.h>
#include <curses.h>

int main()
{
    int c = 0;
    initscr();
    keypad(stdscr, 1);
    c = getch();
    endwin();
    printf("0x%04x\n", c);
    printf("0x%04x\n", KEY_HOME);
}

这将初始化标准屏幕(stdscr),启用其中的键盘并使用 getch() 获得按键,然后再次关闭 stdscr 以恢复 tty 模式。

您还可以使用 has_key() 函数检查当前终端是否支持特殊键。

这是简单的方法..

于 2013-03-11T16:27:20.537 回答