我想编写一个简单的C程序,并根据“按键按下”和“按键释放”事件执行不同的操作。这个程序将从rxvt中运行。 我应该使用哪个库或机制来访问按键按下和松开?读取/dev/tty只提供按键释放,这是真的吗?termcap、terminfo、ncurses和S-Lang也是如此吗?有没有一种方法可以在终端应用程序中实现这一点?
以下链接可能对您使用键盘原始模式有所帮助,这将使您访问键盘事件而不仅仅是按键释放。 这篇Linux Journal 文章 SourceForge上的这篇文章 以及当出现问题时可以使用的这个HOWTO 但原始模式的缺点是需要从扫描码手动转换字符。
在一般情况下,这是行不通的。 ANSI终端(所有仿真器都是从中派生出来的)仅表示按键“按下”事件。 它们不会独立记录上/下事件。 如果您需要低级键盘事件访问权限,则正确的环境确实是GUI程序。 即使是Web应用程序也比终端具有更清晰的键盘事件访问权限。
s+0x80
是加法吗?还是两个独立的字节?它不是从 PS/2 键盘发送的内容。例如,默认情况下(可能是扫描设置 2),按下键盘上的“F3”键会产生一个扫描码为 0x04。释放 F3 会导致发送两个(独立的)扫描码,即 0xF0 和 0x04,通过电线传输(0xF0 先被发送)。 - Peter Mortensen