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键在三台计算机上给出了相同的序列).
有没有一种标准的方法来获取这些键,或者某种配置可以在所有机器上提供相同的序列?
您可以使用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()函数检查当前终端是否支持特殊键.
这是简单的方法..