有几个像ncurses这样的库可以帮助制作命令行GUI。
简单地说,它们是如何工作的?
我的第一个想法是ncurses拦截所有键盘输入,并通过逐行输出来绘制每个“帧”。然而,仔细检查发现每个新框架都会覆盖前一个框架。它如何修改已经输出的行?此外,它如何处理颜色?
编辑:同样的问题适用于任何具有“奇特”界面的内容,例如vim
和emacs
。
答案 0 :(得分:17)
文本终端具有命令序列,可以将光标移动到屏幕上的特定位置,插入字符,删除行等。
每种终端类型都不同,并且有自己的一组命令序列。 ncurses有一个数据库(详见terminfo)
内部ncurses维护2个屏幕视图:当前内容以及应用当前挂起更改后屏幕应该是什么样子。一旦程序请求屏幕重绘,ncurses计算一种有效的方法来更新屏幕看起来像所需的视图。确切的字符/命令序列输出取决于正在使用的终端类型。
答案 1 :(得分:5)
curses(我认为也是ncurses)通过在屏幕上移动光标来工作。有控制序列来做这些事情。再看看代码,你会看到它们。这些序列不是ASCII控制字符,它们是以(umm ...)ESC开头的字符串,也许。请查看here以获得更高级别的解释。