怎么做ncurses等。人。工作?

时间:2011-09-26 16:43:32

标签: user-interface command-line ncurses internals

有几个像ncurses这样的库可以帮助制作命令行GUI。

简单地说,它们是如何工作的?

我的第一个想法是ncurses拦截所有键盘输入,并通过逐行输出来绘制每个“帧”。然而,仔细检查发现每个新框架都会覆盖前一个框架。它如何修改已经输出的行?此外,它如何处理颜色?

编辑:同样的问题适用于任何具有“奇特”界面的内容,例如vimemacs

2 个答案:

答案 0 :(得分:17)

文本终端具有命令序列,可以将光标移动到屏幕上的特定位置,插入字符,删除行等。

每种终端类型都不同,并且有自己的一组命令序列。 ncurses有一个数据库(详见terminfo

内部ncurses维护2个屏幕视图:当前内容以及应用当前挂起更改后屏幕应该是什么样子。一旦程序请求屏幕重绘,ncurses计算一种有效的方法来更新屏幕看起来像所需的视图。确切的字符/命令序列输出取决于正在使用的终端类型。

答案 1 :(得分:5)

curses(我认为也是ncurses)通过在屏幕上移动光标来工作。有控制序列来做这些事情。再看看代码,你会看到它们。这些序列不是ASCII控制字符,它们是以(umm ...)ESC开头的字符串,也许。请查看here以获得更高级别的解释。

相关问题