Linux ncurses 实现原理

发布于 2022-09-01 21:48:47 字数 79 浏览 17 评论 0

  1. ncurses 具体实现原理?

  2. ncurses 的实现依赖于操作系统吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如果没有 2022-09-08 21:48:47

如果你说的是那个GUI库的话,实现原理当然是直接打开console buffer然后写字符啊,或者通过一些奇怪的字符让shell来帮你做一样的事情,就跟GUI点像素是同一个道理。这种操作当然是依赖于操作系统的。Unix的很多escape sequence在Windows下面就用不了。

譬如说Windows,你要完全操纵一个console application上面的东西,你需要大量的函数:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx 。只有用满了这些,你才能在Windows上面做一个这样的GUI库,支持鼠标键盘滚轮操作,还有随意修改任何坐标的字符并控制什么时候刷新,还不会被locale和code page搞。

当然做一个简单的并不会很难,只要把这些奇怪的边界条件都处理好了,控件都是小事,顺便还可以增长如何让GUI可以适应中文、韩文、阿拉伯文、英文、泰文、菲律宾文等奇怪文字的知识。

℡寂寞咖啡 2022-09-08 21:48:47

传统的Unix Console和DOS/Windows Console并不一样。从串口终端发展下来的这一系Terminal从接口上说是一个纯粹的“流”,因此它本身并没有定位屏幕位置的能力。(最初的Terminal是打字机,而不是视频终端)

因此大部分的终端使用Escape Sequence,也就是一些特殊的不可见字符序列来传递光标定位、文字擦除、显示颜色等特殊的指令。其中普及最广的标准应该是ANSI Escape Sequence

具体到NCurses,NCurses应该使用了类似于Terminfo/Termcap的数据库来消化不同终端的不同。这些数据库保存了各种终端的指令支持状况,以及对应这些指令的Escape Sequence。

而在于具体实现,在Windows Console Host之类终端模型完全不同的环境里也许会比较特殊,但在支持Terminal的Unix类系统上应该是差别不大的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文