怎么做ncurses等.人.工作?

Max*_*xpm 15 user-interface command-line internals ncurses

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

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

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

编辑:同样的问题适用于任何具有"花哨"界面的东西,比如vimemacs.

Cra*_*aig 17

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

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

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

  • 所以你的意思是,如果要在没有 ncurses 的情况下控制终端(其目标是独立于设备,但假设我不关心这一点),我可以直接将这些控制字符写入标准输出,并且我可以更改已经显示的文本即使大多数命令行程序只是在提示符下打印文本,也可以在屏幕的任何部分上显示? (3认同)
  • @huggie是的,但是你必须知道你的程序在什么类型的终端上运行。Ncurses 会自动处理这个问题。 (3认同)

Pet*_*son 5

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