【问题标题】:VT100 escape sequences: Cursor movement wrap around to end of lineVT100 转义序列:光标移动环绕到行尾
【发布时间】:2014-09-22 04:33:00
【问题描述】:

我正在创建一个使用 VT100 转义序列控制的 Telnet CLI 应用程序。所以例如将光标向左导航 [D 转义序列从 Telnet 服务器发送到客户端,可能是 Putty 或 Gnome-terminal。不幸的是,对于比 Putty 行长更长的行,上面的转义序列将不允许将光标导航到当前行上方的行。

一个例子。光标是“|”。评论用'//'标记

----------------
>potato| // Now I press left arrow which sends esc sequence to application
----------------
>potat|o // Works as expected. The cursor moved left
----------------

另一个例子

----------------
>potatopotatopot // This is a long command which goes over two lines
|ato             // Now I press left arrow which sends esc sequence to application
----------------
>potatopotatopot // The cursor didn't move, since the escape sequence 
|ato             // does nothing if the cursor is at the edge
----------------

我一直在寻找在边缘时会环绕的任何其他转义序列,但没有找到。我还没有找到任何将终端模式更改为允许换行的转义序列。

那么这种终端导航一般是怎么处理的呢?

【问题讨论】:

  • 我想 Esc [ Line;ColumnH - “将光标移动到屏幕位置 v,h”(来自 ascii-table.com/ansi-escape-sequences-vt-100 对你很有用。
  • 我已经想到了,但这意味着我必须跟踪服务器应用程序中的列号。我想避免这种情况,因为将终端窗口大小更改为 80 以外的任何值都会使客户端输出看起来很奇怪。

标签: telnet vt100


【解决方案1】:

如前所述,bw 功能可以解决部分问题,但这种情况很少见。特别是,它不是 vt100 兼容程序(例如 xterm)的功能。 OP 提到了 PuTTY 和 gnome-terminal。后者不使用bw,因此首选不同的解决方案。

另一方面,PuTTY 确实实现了 vt100 光标位置报告,当它无法使用系统调用获取屏幕大小时,resize 使用它作为后备。引用 xterm 的control sequences 文档:

CSI Ps n  Device Status Report (DSR).
            Ps = 5  -> Status Report.
          Result (``OK'') is CSI 0 n
            Ps = 6  -> Report Cursor Position (CPR) [row;column].
          Result is CSI r ; c R

resize 程序使用它

  • 将光标发送到“巨大”(999 x 999)窗口的右下角
  • 发送 CPR 序列
  • 读取实际光标位置的报告

知道屏幕大小,服务器可以将光标发送到更有用的位置。

【讨论】:

    【解决方案2】:

    termcap 终端描述中的bw 功能表示在屏幕边缘向左移动是否换行到上一行。它出现在我检查的 PuTTy 描述中(ncurses 下的infocmp putty),但在许多其他描述中没有出现(例如,不在infocmp gnome 中)。

    您可以尝试跟踪光标所在的列,并在您想要回绕到上一行时使用移动控制序列。您必须知道用户屏幕的宽度,这可以通过他们设置LINESCOLS 环境变量来完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 2021-11-21
      相关资源
      最近更新 更多