ncurses转义序列检测

时间:2011-08-18 11:44:51

标签: terminal ncurses

在ncurses原始模式下检测转义序列的最佳方法是什么。

我想到的是getch然后将它添加到某种缓冲区然后何时添加 文本匹配已知的转义序列执行适当的命令,否则忽略序列。

然而,在这个算法中,如果我遇到系统不知道的转义序列,即使继续输入其他字符,它们也将被视为转义序列的一部分。 是否有任何关于转义序列的规则或一些结束转义序列的标准字符

或者有没有办法在用户停止输入字符时检测ncurses?像转义序列通常来自字符序列,但我无法检测到最后一个字符,因为我有一个阻塞getch,只是在输入系统没有字符时阻塞

例如,如果我按下页面和c按钮我有连续的流 转义序列字符^ [[6~然后是字符c。我如何检测用户之间按下第一个转义序列然后c字符,如果我没有预先设定的已知转义序列

2 个答案:

答案 0 :(得分:6)

您可能希望使用libtermkey来解析关键事件。

http://www.leonerd.org.uk/code/libtermkey/

您可以将其直接连接到stdin,也可以按getch()提供给您的字节。

关于检测结束的一般想法;序列遵循某些规则。从ESC [开始的序列是CSI序列,并且在范围[\x40-\x7e]中的第一个八位字节结束。还有其他几种,但它们很少来自终端。

答案 1 :(得分:1)

如果没有预定义的转义序列集,您将无法确定序列的结束。

Ncurses使用termcap / terminfo来枚举序列及其含义。