Jua*_*uan 5 system-programming terminal
我正在努力思考贝壳如何移动屏幕光标(移动输入箭头键等)。
我已经做了很多测试,但我没有发现任何允许在终端中移动屏幕光标的系统调用。这是使用特定的终端扩展完成的吗?如果是这样,是否有任何文档说明如何为 xterm 实现这一点?
这让我发疯了,感谢您对此的任何启发。
没有这样的系统调用或系统调用集。这一切都是按惯例完成的。
在过去,当“终端”是通过电缆连接到计算机的大型笨重设备时,“智能终端”会执行诸如移动光标、画线或用颜色填充多边形之类的操作. 智能终端通常通过“转义序列”来做到这一点。程序发出一个特殊的字节值序列,通常以 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为例。