c++ - 终端文本编辑器的用户界面是如何实现的?

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

终端文本编辑器,如 emacs , vim , joe甚至 nano能够在命令行中显示任意 UI 元素,而无需每次都完全重写整个 UI,而是覆盖当前的 UI。

对于常规输出流,您只能使用返回字符 '\r'跳到当前输出行的开头并覆盖它,但据我发现你不能跳多行,cout << "\r\r\r\r\r\r";cout << '\r' 效果相同, 因此换行符后面的所有内容显然都是一成不变的。

其他应用程序做类似的事情,例如 $dpkg-reconfigure ca-certificates在 Ubuntu 或 aptitude 上图形包管理器。他们还为 UI 元素绘制轮廓,这些元素可能只是特殊字符。但是,他们仍然必须覆盖多行控制台输出。

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

最佳答案

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

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

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

关于c++ - 终端文本编辑器的用户界面是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26204024/

相关文章:

jquery - jQPlot y 轴上的力静态最小值和最大值

c++ - 如何为类中的模板定义类型别名

c++ - 重复使用 move 的容器?

c++ - 如何对 vector <char*> 进行排序?

c++ - 将同一 header 中定义的类的定义拆分到多个源文件中是否合法?

c++ - 避免等待 SwapBuffers

jquery - 打印可滚动表格的全部内容

python - Tkinter在按下按钮时不会改变图像

c++ - 带有 std::all_of( ) 和 std:none_of( ) 的空容器的好用法?

c++ - 如何为模板类实现 std::hash