问题
I would like to write a simple C program that will perform different actions based on both "key down" and "key up" events. This program will be run from inside rxvt.
What library or mechanism should I use to access both key presses and releases? Is it true that reading /dev/tty
will only provide key releases? Is this also true for termcap, terminfo, ncurses, and slang? Is there a way to achieve this from within a terminal application?
回答1:
The following links may be of some assistance in using the keyboard raw mode which will give you access to the keyboard events rather than just key releases.
- This Linux Journal article
- This article on SourceForge
- And this HOWTO for when it all goes bad
Raw mode does have the disadvantage that you have to do your own conversion from scan codes to characters though.
回答2:
This won't work in the general case. ANSI terminals (from which all emulators descend) represent key "press" events only. They don't record down/up events independently.
If you need low level keyboard event access, the proper environment is really a GUI program. Even a web application will have cleaner access to key events than a terminal.
回答3:
I don't think ncurses will work. The link Basilevs provided talks about the "up arrow" key and the "down arrow" key, not a key press and release.
来源:https://stackoverflow.com/questions/1409216/receiving-key-press-and-key-release-events-in-linux-terminal-applications