【发布时间】:2014-11-29 23:48:50
【问题描述】:
诸如emacs、vim、joe 甚至nano 之类的终端文本编辑器能够在命令行中显示任意 UI 元素,而无需每次都完全重写整个 UI,而是覆盖它们当前的内容用户界面。
对于常规输出流,您只能使用返回字符'\r'跳转到当前输出行的开头并覆盖它,但据我发现您不能跳转多行,cout << "\r\r\r\r\r\r";与cout << '\r' 具有相同的效果,因此换行符后面的所有内容显然都是一成不变的。
其他应用程序执行类似操作,例如 Ubuntu 上的 $dpkg-reconfigure ca-certificates 或 aptitude 图形包管理器。他们还为 UI 元素绘制轮廓,这些元素可能只是特殊字符。但是,他们仍然必须覆盖多行控制台输出。
他们是怎么做到的?该行为是否可移植到 Windows 平台?
【问题讨论】:
-
每个终端模拟器的实现可能不同。
-
@AndersonGreen 根据我的阅读,似乎有 ANSI 转义序列允许将终端上的光标设置为任意位置。 Curses 或 Ncurses 将这些序列包装到一个可用的接口中,以便您可以编写更便携的代码。
标签: c++ user-interface c++11 terminal stdout