使用NCurses获取CTRL字符

时间:2013-07-14 00:03:13

标签: c linux ncurses curses

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

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

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

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

2 个答案:

答案 0 :(得分:1)

That actually is reliable(但有64,而不是96)。 Ctrl + A 一直通过 Ctrl - _ 得到妥善处理(不建议使用Ctrl- @ NUL的其他含义。)

答案 1 :(得分:1)

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

  • 如果返回的字符串的长度为1,则为简单字符
  • 如果长度为2,第一个字符为 ^ ,则它是一个控制字符,相应的规范按下字符是第二个字符字符串。

    请注意,按下可能有多种可能性,因为忽略了 Shift ,并且有一些特殊情况例如 控制 空间 控制 @ ,可以产生相同的结果。

使用 ncurses unctrl的其他实现可能会返回字符代码128-255的空指针。 X/Open Curses对于该案件应该采取的措施含糊不清。