ncurses转义序列检测

Tro*_*ydm 3 terminal ncurses

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

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

但是在这个算法中,如果我遇到系统不知道的转义序列,即使继续输入其他字符,它们也将被视为转义序列的一部分.是否存在转义序列可以有多长的规则或者一些结束转义序列的标准字符

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

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

Leo*_*erd 6

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

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

您可以直接将其连接到stdin,也可以将其提供给您getch().

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