我写在Linux控制台程序的命令行界面。我希望能够使用箭头之类的按键。所以捕捉代码,我使用这个简单的程序:捕获在使用getchar)HOME键(
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键给三台电脑上相同的序列)。
有没有一种标准的方式来得到这个键,或某种配置的,这将使我在所有的机器相同的序列?
通过“特殊”键发送的转义码由终端类型不同,而且,更糟的是,他们并不一定构成一个前缀码。你应该使用[curses](http://en.wikipedia.org/wiki/Curses_%28programming_library%29)为你管理所有这些。 – Celada 2013-03-11 16:12:23
顺便说一下,通常'c'不会等于'3',因为如果用户按下Ctrl-C,那么您将会得到一个'SIGINT'信号。 – Celada 2013-03-11 16:13:13
这是一个比你想象中更复杂的问题......生成的代码取决于终端类型(以及文本控制台,xterm,gnome或kde终端或windows命令行在这方面都是不同的),以及在控制台驱动程序或X键映射设置上。 Linux文本终端HOWTO,http://www.tldp.org/HOWTO/Text-Terminal-HOWTO.html给出了一些起点,特别参见第6节(绝对使用并遵循那里提供的链接)。如果你想以_portable_方式来做这件事(没有太多与术语类型相关的代码),可以使用像'ncurses'这样的库。 – 2013-03-11 16:13:19