我有一个关于NCurses的问题...我需要处理所有的按键,比如Esc、Alt+F等等。问题是这些代码很相似,例如:
Esc - 27
Alt+A - 27 65
例如,Alt+[key]组合键的代码实际上与Esc键类似...你有什么处理方法吗?
Esc - 27
Alt+A - 27 65
例如,Alt+[key]组合键的代码实际上与Esc键类似...你有什么处理方法吗?
这里是一个Python的例子:
key = self.screen.getch()
if key == ord('q'): # quit
go = False
elif key == 27: # Esc or Alt
# Don't wait for another key
# If it was Alt then curses has already sent the other key
# otherwise -1 is sent (Escape)
self.screen.nodelay(True)
n = self.screen.getch()
if n == -1:
# Escape was pressed
go = False
# Return to delay
self.screen.nodelay(False)
解决方法:
ESC
,然后立即又按下另一个键,例如 [
,我们的代码是否可以看到两个键都被输入,但它们_并不完全像是ESC
_?因为我真的不知道终端怎么知道在我第二次调用以收集下一个字符时,我是在尝试确定是否只是按下了ESC
! - Alexis Wilke[
。但是,你通常可以使用如此短的超时时间,以至于没有人可以合理地按下它,而且大多数转义序列都足够长,以至于很难在彼此之间的 25ms 内完美地按下每个键。另一方面,终端可能会比这更快。 - anon如果你不关心支持按下Escape键后再按另一个键的用户(这是从旧终端VT100时代终端遗留下来的),而只想响应PC 101键键盘上的物理键,你可以在你的(C)代码开始处设置以下内容:
ESCDELAY = 10;
man页面更详细地解释了发生了什么:https://man7.org/linux/man-pages/man3/curs_variables.3x.html
然后使用keyname()获取易于strcmp的人类可读名称,以便查看已按下的内容,例如^c表示Control + c。请参见如何使用getch() ncurses获取Ctrl、Shift或Alt?