【问题标题】:understanding CUB ansi escape sequence理解 CUB ansi 转义序列
【发布时间】:2015-03-11 19:11:08
【问题描述】:

我不明白为什么有时允许 CUB 序列通过前一行继续,有时不允许。文档告诉它不是但在实际情况下...... http://vt100.net/docs/vt100-ug/chapter3.html#CUB

例如,我有一个充满 80 列和 24 行空格的屏幕。

我在位置第 3 行第 4 列,可以使用转义序列设置:\033[3;4H

我用序列 \033[10D 将光标向左移动 10 次 这将使我处于以下位置:第 2 行第 76 列

所以它起作用了?! 有时它不会

请救救我! :)

我可以减少这种情况,但这是我看到的:

我正在编写一个 vt* 模拟器,一切正常。我可以启动 emacs/vim 和其他人,但随后我使用“脚本”命令在 putty 中启动 vttest,以记录每个键入的字符和序列。像这样:

# script test
Script started, file is test
# vttest
...

例如,当我在腻子中进行“猫测试”时,它会像我一样重播所有内容。当我用我的模拟器玩它时,我能够解析和分析它们提供的每个转义序列,但显示不一样。

【问题讨论】:

    标签: terminal ansi-escape


    【解决方案1】:

    VT100.net 上的措辞相当清楚:

    If an attempt is made to move the cursor to the left of the left margin,
    the cursor stops at the left margin.
    

    在 recent discussion 中,有人指出 PuTTY 支持(非 VT100)功能 bw,引用自 ncurses 的 terminfo 手册:

       auto_left_margin              bw         bw        cub1 wraps from col‐
                                                          umn 0 to last column 
    

    如您所见,PuTTY 在边距处换行的行为与 VT100 不同。 ncurses 有一个名为“putty”的终端条目,这仅仅是因为 PuTTY 与所有其他终端的不同之处足以导致使用其他终端。

    【讨论】:

    • 感谢您的回答。这解释了事情。写入最后一列时可能会出现另一种情况:如果您在第 80 列,并且您编写了一个可打印的字符,则光标应该位于新行,并且通过写入另一个字符,该字符将位于下一行(经典)。但是如果你做一个幼崽序列,它将在第一行向左移动而不会向下移动。
    猜你喜欢
    • 2021-06-28
    • 2012-04-14
    • 2011-06-18
    • 2011-09-27
    • 2011-05-05
    • 2018-11-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多