Rus*_*pov 6 terminal escape-characters ansi-term
我有一个 stm32f1 控制的设备,它使用 USART/USB 端口来实现用户控制界面。使用标准终端软件(putty/minicom),用户可以在设备外壳中输入简单的命令。
有一个问题。如果有许多传入的信息包,它们会通过 shell 提示打印,从而使输入新命令变得困难。
我计划将终端屏幕拆分为两个区域:一行提示和一个用于传入数据包的可滚动区域。
我尝试使用以下转义序列:
162 72 r * DECSTBM - Set top and bottom margins (scroll region on VT100)
[4;20r = Set top margin at line 4 and bottom at line 20
Run Code Online (Sandbox Code Playgroud)
但仍然找不到一个很好的教程,它描述了一种可以帮助我解决问题的正确方法。
阅读源代码很有帮助,但建议的示例很复杂。大多数有用的程序(例如 OP)都会通过 termcap 或curses 接口询问使用转义序列。如果用诅咒来做的话会简单得多。以下是使用 termcap 所需的步骤:
同时(对数据包的引用表明OP希望在读取输入的同时显示它们)
最佳实践不会尝试在滚动区域之外使用光标寻址,因此每次程序在屏幕的两个部分之间切换时,都会对滚动区域进行大量设置/重置。
进一步阅读:
(假设您希望提示符位于底部,并且窗口高度为 25 行。)
基础知识是:配置设备的 shell 以在从用户接受命令后设置滚动区域(相当于printf "\033[1,24r") - 并在完成后重置它 - printf "\033[r"。