用getchar()捕获HOME键

我正在为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键在三台计算机上给出了相同的顺序)。

有没有一个标准的方法来获得这个键,或者一些configuration,使所有机器上的序列相同?

你可以使用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()函数检查当前终端是否支持特殊的密钥。

这是简单的方法..