终端中的光标移动

Jua*_*uan 5 system-programming terminal

我正在努力思考贝壳如何移动屏幕光标(移动输入箭头键等)。

我已经做了很多测试,但我没有发现任何允许在终端中移动屏幕光标的系统调用。这是使用特定的终端扩展完成的吗?如果是这样,是否有任何文档说明如何为 xterm 实现这一点?

这让我发疯了,感谢您对此的任何启发。

Bru*_*ger 9

没有这样的系统调用或系统调用集。这一切都是按惯例完成的。

在过去,当“终端”是通过电缆连接到计算机的大型笨重设备时,“智能终端”会执行诸如移动光标、画线或用颜色填充多边形之类的操作. 智能终端通常通过“转义序列”来做到这一点。程序发出一个特殊的字节值序列,通常以 ASCII 0x1b,'ESC' 开头,以移动光标,或为单词着色,或模仿电传打字机以外的一些特殊事物。

这就是“约定俗成”。如今,“终端”几乎总是位图屏幕、xterm、rxvt 等中众多窗口中的一个。由 xterm(或 rxvt 或其他)读取来自其中运行的“程序”的字节,并根据给定的约定解释这些字节。我刚刚在我的一个 xterm 窗口中输入了这个:

6 % echo $TERM 
xterm
Run Code Online (Sandbox Code Playgroud)

但我知道在那种情况下,旧的 xterms 过去常说“vt100”。任何“移动光标”的程序都必须为“xterm”约定输出转义序列以在 xterm 实例中移动光标。

你可以这样做man curses,并man terminfo获取更多信息。

聚苯乙烯

人们已经完成了带有转义序列的整个窗口系统。以MGR为例。

  • 您可以阅读 [xterm 转义序列](http://invisible-island.net/xterm/xterm.faq.html#ctlseqs_ms) 的列表。(不是教程!)现在大多数终端模拟器都模仿 xterm,或者至少是其中的一个很大的子集。 (2认同)