你必须在看到箭头键和功能键,或者键入命令时立即获得转义键。即使你真的真的很想立即看到逃跑并看到方向键,你也不能。这是因为箭头键发送的第一件东西是一个转义字符,所以如果wgetch看到一个转义字符,它需要检查下一个字符,然后才能断定该字符是由转义键生成的。
curses接口是为来自终端的数据通过可能很慢的网络连接传输到计算机的可能性而设计的。有可能的是,作为功能键序列的一部分的转义字符在网络分组的末尾被发送,而下一个字符是下一个分组的一部分,并且因此在这两个分组之间可能存在延迟字符。但即使没有网络,键盘也不是超高速设备,并且多字符序列中的字符以明显的(到计算机)延迟的方式发送。因此,没有一点时间,wgetch
将不可能识别功能和方向键。
如果您准备冒有时将箭头键转换为转义序列的风险,则可以减少转义延迟。默认情况下,它被设置为1000毫秒(1秒),但您可以通过更改全局变量ESCDELAY
的值来更改它。如果您的ncurses库在编译时启用了适当的线程功能,则还可以使用set_escdelay
函数,该函数特定于ncurses
。在这两种情况下,该值都是一个整数,表示要延迟的毫秒数。
请参阅man curs_variables
和man curs_threads
了解更多详情。 (在某些发行版中,您可能需要使用不同的man
参数,例如man curses_variables
和man 3ncurses threads
。)
非常感谢您的全面回答,我更了解在以下级别发生的事情总是更好地了解所有内容! :) –