使用getchar()捕获HOME键

Ako*_*old 2 linux keyboard terminal getchar

我正在为Linux上的控制台程序编写命令行界面.我希望能够使用像箭头一样的键.所以为了捕获代码,我使用这个简单的程序:

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

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

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

有没有一种标准的方法来获取这些键,或者某种配置可以在所有机器上提供相同的序列?

mar*_*iux 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);
}
Run Code Online (Sandbox Code Playgroud)

这将初始化标准屏幕(stdscr),启用其中的键盘并使用getch()进行按键操作并再次关闭stdscr以重新执行tty模式.

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

这是简单的方法..

  • 我暗示为你的嵌入式环境编译`ncurses`,甚至,如果有必要,首先移植它,将节省你的时间. (2认同)