终端发短信的UI是如何实现的?

时间:2014-10-05 15:17:10

标签: c++ user-interface c++11 terminal stdout

emacsvimjoe甚至nano等终端发短信都能够在命令行中显示任意UI元素,而无需在每个单独完整的UI中重写时间,但覆盖目前的UI。

使用常规输出流,您只能使用返回字符'\r'跳转到当前输出行的开头并将其写入,但是从我发现的内容中,您无法跳过多行,{ {1}}与cout << "\r\r\r\r\r\r";具有相同的效果,所以后面换行的所有内容显然都是一成不变的。

其他应用程序执行类似的操作,例如Ubuntu上的cout << '\r'$dpkg-reconfigure ca-certificates图形包管理器。他们还为UI元素绘制轮廓,这些元素可能只是特殊字符。但是,他们仍然需要覆盖多行控制台输出。

他们是如何做到的?该行为是否可移植到Windows平台?

2 个答案:

答案 0 :(得分:3)

你会发现这些程序依赖于一个名为ncurses的库:

http://en.wikipedia.org/wiki/Ncurses

几乎所有操作系统都有可用的构建版本。

答案 1 :(得分:2)

curses是一个unix库,可让您在任意位置操作终端的内容。 ncurses是一个免费的,独立于供应商的curses版本,以及在linux上使用的curses库。

dpkg-reconfigure使用构建在curses之上的对话框,并提供用户界面小部件而不是原始终端访问。

ncurses包含扩展“菜单”,“表单”,“面板”,您可以使用它们自己实现用户界面小部件,但如果您走这条路线,它会变得非常复杂。

关于windows,有一些pdcurses在“dos box”终端中本地运行。你可以编写在windows上使用pdcurses的可移植程序,并在linux上使用ncurses,如果你将自己局限于公共子集。或者,您可以使用cygwin在Windows上使用ncurses。

Windows的另一个替代方案可能是Borlands TVision - 如果您能找到旧版本的Borland的turbo pascal或c ++编译器,它们包含一个完整的文本用户界面应用程序框架,称为TVision。但不确定这些代码生成的代码是否仍会在现代Windows版本上运行。