终端中的光标移动

终端中的光标移动

我正在尝试了解外壳如何移动屏幕光标(移动输入箭头键等)。

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

这已经让我发疯了,非常感谢您能对此提供任何线索。

答案1

不存在这样的系统调用或系统调用集。这一切都是按照惯例进行的。

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

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

6 % echo $TERM 
xterm

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

您可以这样做man cursesman terminfo获取更多信息。

聚苯乙烯

人们已经用转义序列完成了整个窗口系统。参见磁电阻率举个例子。

答案2

查看tput。它是几乎所有终端仿真器都支持的 ANSI 转义序列的包装器(支持量差异很大)。

tput仅当终端支持时才会输出序列,因此您不必担心支持情况。或者至少您不必担心终端中打印奇怪的字符:-)

答案3

我知道这不是你问题的确切答案,但咒骂库是你进行一些 tui 开发所需的东西。如果您是一名程序员,查看其源代码(在所有开源 unix 发行版中都可用)将向您展示它是如何完成的。

相关内容