0

如何从 NCurses 库中获取控制键?我需要知道结果getch ()是否是用ctrl按下的字符,以及用它按下的字符。我用谷歌搜索了“ctrl keys ncurses”和“control keys ncurses”,没有太多结果。

我从快速测试中知道(至少在我的情况下)所有 CTRL 字符都与字符相关,相差 96。

IE

akey is 97
^Akey is 1
bkey is 98
^Bkey is 2
ckey is 99
^Ckey is 3

但这似乎不是编写程序的可靠信息。有谁知道这样做的方法?

4

2 回答 2

2

除了直接的 ASCII 测试之外,您还可以使用ncursesunctrlkeyname函数返回一个已解析相关信息的字符串:

  • 如果返回字符串的长度为 1,则为简单字符

  • 如果长度是 2,第一个字符是^,那么它是一个控制字符,对应的规范按下字符是字符串的第二个字符。

    请记住, pressed-with可能有多种可能性,因为Shift被忽略,并且有一些特殊情况,例如ControlSpacevsControl@可以产生相同的结果。

这就是ncurses:其他实现unctrl可能会为字符代码 128-255 返回一个空指针。 X/Open Curses对在这种情况下应该做什么含糊其辞。

于 2017-11-01T08:24:54.737 回答
1

这实际上是可靠的(但有 64,而不是 96)。Ctrl+A一直到Ctrl-_处理得当(由于 NUL 的其他含义,不鼓励使用 Ctrl-@)。

于 2013-07-14T00:16:01.593 回答