【问题标题】:How is the UI of terminal texteditors implemented?终端文本编辑器的 UI 是如何实现的?
【发布时间】:2014-11-29 23:48:50
【问题描述】:

诸如emacsvimjoe 甚至nano 之类的终端文本编辑器能够在命令行中显示任意 UI 元素,而无需每次都完全重写整个 UI,而是覆盖它们当前的内容用户界面。

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

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

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

【问题讨论】:

  • 每个终端模拟器的实现可能不同。
  • @AndersonGreen 根据我的阅读,似乎有 ANSI 转义序列允许将终端上的光标设置为任意位置。 Curses 或 Ncurses 将这些序列包装到一个可用的接口中,以便您可以编写更便携的代码。

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


【解决方案1】:

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

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

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

【讨论】:

【解决方案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 版本上运行。

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 2012-03-14
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-01-13
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多