【问题标题】:ncurses escape sequence detectionncurses 转义序列检测
【发布时间】:2011-08-18 11:44:51
【问题描述】:

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

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

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

或者当用户停止输入字符时,有没有办法在 ncurses 中检测?像转义序列通常以字符序列的形式出现,但我无法检测到最后一个字符,因为我有一个阻塞 getch,它只会在输入系统中没有字符时阻塞

例如,如果我按下 page down 和 c 按钮,我有连续的流 转义序列字符 ^[[6~ 然后是字符 c。如果我没有预定义的一组已知转义序列,我如何在这两者之间检测到用户先按下了转义序列,然后是 c 字符

【问题讨论】:

    标签: terminal ncurses


    【解决方案1】:

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

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

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

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

    【讨论】:

    • libtermkey 非常适合我在 mintty 中运行的程序,谢谢。
    【解决方案2】:

    如果没有一组预定义的转义序列,您将无法确定序列的结尾。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      相关资源
      最近更新 更多