在ncurses原始模式下检测转义序列的最佳方法是什么。
我想到的是getch然后将它添加到某种缓冲区然后何时添加 文本匹配已知的转义序列执行适当的命令,否则忽略序列。
然而,在这个算法中,如果我遇到系统不知道的转义序列,即使继续输入其他字符,它们也将被视为转义序列的一部分。 是否有任何关于转义序列的规则或一些结束转义序列的标准字符
或者有没有办法在用户停止输入字符时检测ncurses?像转义序列通常来自字符序列,但我无法检测到最后一个字符,因为我有一个阻塞getch,只是在输入系统没有字符时阻塞
例如,如果我按下页面和c按钮我有连续的流 转义序列字符^ [[6~然后是字符c。我如何检测用户之间按下第一个转义序列然后c字符,如果我没有预先设定的已知转义序列
答案 0 :(得分:6)
您可能希望使用libtermkey来解析关键事件。
http://www.leonerd.org.uk/code/libtermkey/
您可以将其直接连接到stdin
,也可以按getch()
提供给您的字节。
关于检测结束的一般想法;序列遵循某些规则。从ESC [
开始的序列是CSI序列,并且在范围[\x40-\x7e]
中的第一个八位字节结束。还有其他几种,但它们很少来自终端。
答案 1 :(得分:1)
如果没有预定义的转义序列集,您将无法确定序列的结束。
Ncurses使用termcap / terminfo来枚举序列及其含义。